Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Mi Jul 16, 2025 21:33

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 24 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
BeitragVerfasst: Di Dez 09, 2003 17:55 
Offline
DGL Member
Benutzeravatar

Registriert: Di Jun 24, 2003 19:09
Beiträge: 732
Gibt es eine möglichkeit wie ich normale Komponenten wie z.B. eine einfach ListBox mit einem bestimmten Alpha Wert darstellen kann so das der Hintergrund des Forumlars durch scheint?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Dez 09, 2003 18:29 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Also bei Fenster unter Windows 2k/XP gibt es solch eine Möglichkeit. Allerdings lässt sich das auf einzelne Elemente übertragen. Du müsstest diese Elemente komplett von Hand malen und mit dem Hintergrund vermischen.

Wozu brauchst du denn das? Evtl. kann man da ein wenig tricksen und den anschein erwecken, dass es transparent sei. ;-)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Dez 09, 2003 19:03 
Offline
DGL Member
Benutzeravatar

Registriert: Di Jun 24, 2003 19:09
Beiträge: 732
Ich hab ein Hauptformular auf dem das aktuelle Hintergrundbild angezeigt wird(also nix einfarbiges ;) ). Darauf will ich eine Komponente in die man mit Drag und Drop Dateien rein ziehen kann. Die Komponente wird ne Listbox oder ein einfaches StringGrid. Es würde insgesammt wesentlich besser aussehen wenn die ListBox bzw. das StringGrid etwas Transparent wäre so das ein Teil des Hintergrundes durch scheint...

Das mir Formularen zu realisieren ist kein Problem. Aber mit einzelnen Komponenten...
da fällt mir ein.
Problem 2 : Wenn ich ein Formular lade und auf ein anderes packe indem ich dem Formular als ParentWindow das Haupt Formular zuweise dann funktioniert AlphaBlending und Transparenz bei dem Formular was ich auf das HauptFormular packe nicht mehr... Wie kann ich machen das das funzt?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Dez 09, 2003 19:34 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Also das erste Problem könntest du mit einem DrawGrid machen. Das zeichnest du selber und macht es transparent. Allerdings das zweite Problem ist so nicht Lösbar. Dort müsstest du dann alle Komponenten inklusive Fenster selber zeichnen. Und das ist auch die Methode zu der ich dir raten würde, wenn du unbedingt Alphablending haben möchtest. Aber das sinnvollste wird sein, dass du es weglässt.

Aber mal so ne blöde Frage warum hast du eigentlich ein Hintergrundbild in deiner Anwendung?

PS: das Selbermachen eines Buttons kann man recht einfach mit einem TImage erledigen. Eine ListBox kann man selber malen. Wenn du dann den Rand noch per Hand zeichnest sollte das auch kein Problem sein. Schwierig wird es nur bei einem Edit. CheckBox (Radio) könnte man auch über TImage realisiern.

Überall wird es aber so sein, dass du es erst einmal kommplett in ein Bild malen musst. Dann mit dem Hinterdgrund mischen und erst dann darfst du es zeichnen.
Das ist aber alles sehr recheninteniv.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Dez 09, 2003 20:04 
Offline
DGL Member
Benutzeravatar

Registriert: Di Jun 24, 2003 19:09
Beiträge: 732
Ich Entwickle die komplett neue Version der Desktop Komponente der Shell Erweiterung SharpE. Das heißt der Windows Desktop wird deaktiviert und durch eine neue Anwendung ersetzt. Die Anwendung ist so groß wie der Desktop und zeigt das aktuelle Win Hintergrundbild. Die Desktop Objekte werden dynamisch aus dll Dateien geladen und auf den Desktop gelegt. Nur werden dabei alle Blend und Transparenz Effekte deaktiviert :?
Ich muß es aber irgendwie erreichen das der Hintergrund eines jeden Desktop Objektes(also dem aus der dll geladenen Formular) Transparenz ist so das das Hintergrundbild angezeigt wird. Es wäre auch noch gut wenn AlphaBlending für die Objekte funktionieren würde.
Hätte ich eine möglichkeit ein Komponente Transparent oder mit AlphaBlending darzustellen dann wäre das kein Problem da die Formulare der Desktop Objekte auf ein TPanel im Hauptformular gelegt werden. Ich müßte also nur das TPanel Transparent bekommen...
oder halt einen komplett anderen Weg finden :?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 10, 2003 08:02 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Kannst du mal ein Beispielbild von so einem Desktop posten? Also von einem mittelkomplexem? Geht das? Weil ich kann mir gerade nicht ausmalen, was auf den Elementen alles drauf ist.

Sind die Elemente eigentlich so richtig interaktiv? Also ob diese alle Funktionalitäten von den Standart Delphi Komponenten haben müssen? Also wirklich alle. Weil wenn nicht, dann könntest (solltest du sowieso) die Elemente selber erstellen und diese dann selber blenden.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 10, 2003 16:14 
Offline
DGL Member
Benutzeravatar

Registriert: Di Jun 24, 2003 19:09
Beiträge: 732
hm,
ich muß das dann doch genauer erklären. Ich glaub die beschreibung als Komponente ging etwas daneben. Ich hab "SharpE Core Component" einfach frei übersetzt weil ich halt wußte was damit gemeint ist :wink:
Ok, also. SharpE besteht aus mehreren Anwendungen wobei jede einen Teil des Shell Systems steuert. Alle Anwedungen sind komplett unabhängig voneinander.
Hier ein Screenshot von meinem aktuellen Desktop : http://lowdimension.net/sharpe_screen_shots/1297.jpg
so siehts aus(Der Desktop ist bei mir halt nur leer). Der Hintergrund wird halt von der SharpDesk Anwendung gesteuert. Diese Code ich gerade komplett neu. Auf dem SharpE Desktop können wie unter Windows einfach Icons als Links erzeugt werden.
Hier mal noch ein anderer Screenshot wo man die Desktop Objekte der aktuellen Version sieht (oben, links) : http://lowdimension.net/sharpe_screen_shots/1819.jpg
Ich erweitere das ganze nun zu einem dynamischen System. Das heißt das was auf dem Desktop an Objekten erzeugt werden kann ist dynamisch in dll's gespeichert.
In jeder dll befindet sich das Formular was einfach in die SharpDesk anwendung geladen wird. Durch das dynamische System sind halt viel komplexere Desktop Objekte möglich... Das laden und nutzen der dll's ist größtenteils schon fertiggestellt und funktioniert problemlos. Auf dem Hauptformular wird für jedes geladene Desktop Objekt ein TPanel erstellt und in dieses TPanel wird das Forumlar eines jeden Desktop Objektes hinein geladen. Da das TPanel und logischerweise das geladene Formular als Parent bzw. ParentWindow nun aber das Hauptformular der SharpDesk Anwendung besitzen werden die AlphaBlend und Transparenz werte des geladenen Objekt Formulars ignoriert. Es ist aber wichtig das die Formulare der Desktop Objekte als ParentWindow das Hauptformular der SharpDesk Anwendung bekommen da sie so an dieses Hauptformular gebunden sind und nicht frei herum schwirren ;) . Da aber ein komplettes Formular aus der dll geladen wird und einfach nur angezeigt wird ist es recht schwierig eine Transparenz zu erzeugen so das das Hintergrundbild des Hautpformulars angezeigt wird. Würde es irgendwie funktionieren einzelnen Komponenten wie einem TPanel eine Transparenz zuzuweisen dann würde dies automatisch auf das geladene Formular übertragen werde wordurch dies auch Transparent werden würde...

jetzt etwas klarer? :?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 10, 2003 17:19 
Offline
DGL Member

Registriert: Mo Nov 03, 2003 20:23
Beiträge: 66
Es gibt eine Componente, die via OpenGL sämtliche Componenten darstellen kann... Hab leider den Namen vergessen...

Aber damit konntest du dann die Componenten - Drehen, Skalieren und Blenden...

Und noch ein paar andere Sachen... Is mir aber leider bei einem Crash verloren gegangen :(

Hatte mal einen QuickStarter geproggt, der damit lief... Halt jede Menge schöne Effekte :)

Lassen sich aber nicht 3rd Partycomponenten anzeigen. Die Flackern sich dann nen Wolf, weil sie die Oberfläche der Form dann anders benutzen...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 10, 2003 17:58 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Japp. Jetzt ists klarer. Aber wenn du so etwas haben willst dann müsstest du entweder solche OpenGL Komponenten benutzen oder du schreibst eigene Komponenten die das blenden. Ich fürchte das ist eines der Dinge die nicht gehen. Das Windowsblending kannst du auch nur dann nutzen, wenn es eine eigenständiges Fenster ist.

- 3th Party Komponenten
- Selber machen
- irgendwie als Fenster erzeugen. Also kein Kind von einem Fenster
- Oder auf Blending verzichten
Einen anderen Weg wird es da wohl nicht geben.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 10, 2003 18:33 
Offline
DGL Member

Registriert: Mo Jan 20, 2003 20:10
Beiträge: 424
Wohnort: nähe Starnberg
Hallo,

keine Ahnung ob richtig liege, aber du kannst auch die Botschaft WM_ERASEBKGND der untergeordneten Fenster, die für das leeren des Fensterhintergrundes zustaendig ist, abfangen und deine eigene Hintergrundzeichenroutine aufrufen.

Die Komponente XPMenu macht dieses für viele Zeichenroutinen, um Delphiprogrammen ein XP - Style zu verpassen.

Gruß
KidPaddle

_________________
http://www.seban.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 10, 2003 19:18 
Offline
DGL Member
Benutzeravatar

Registriert: Di Jun 24, 2003 19:09
Beiträge: 732
Um das mit dem Erase Background zu benutzen müßte dann aber jeden mögliche Komponenten die im Formular der Desktop Objekte benutzt wird dies unterstützen. Das ist einfach nur viel zu Aufwändig...

Das mit einer OpenGL Komponente zu mache ist denke ich auch nicht wirklich von Vorteil weil hier richtig viele Objekte Dargestellt werden und das denke ich einfach nur zu viel Leistung braucht.

Auf Blending zu verzichten würde wenns absolut nicht anders geht möglich sein. Aber auf die Transparenz zu verzichten ist absolut nicht möglich da der Hintergrund des Formulars irgendwie Transparent gemacht werden muß...


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 10, 2003 19:59 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Mit EraseBackground kannst du da nichts reißen. Daran hatte ich auch schon mal gedacht. Aber dabei wird nur das neuzeichnen des Hintergrundes unterdrückt. Das kann zu häßlichen Grafikfehler führen wenn du irgendetwas darüberziehst (fenster etc).

Also wenn du da überhaupt nicht drauf verzichten kannst dann musst du das wohl oder übel per Hand machen. Allerdings wenn du da viele Objekte hast wird es einfach nur super langsam. Speziell wenn du Blending mit einbaust.

Aber für den Fall, dass du es selber machen möchtest rate ich dir auf einer recht windowsnahen Komponente auzusetzen. Also so etwas wie TWinControl oder sogar TControl. Die haben schon sehr viele Dinge implementiert so das du nur das Zeichnen und die Interaktion implementieren musst.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 10, 2003 20:30 
Offline
DGL Member
Benutzeravatar

Registriert: Di Jun 24, 2003 19:09
Beiträge: 732
Ich bin gerade ernsthaft am überlegen ob ich die Formulare der Objekte nicht einfach als unabhängige nicht an das Hauptformular gebundene Objekte lade. Also einfach nur das Form laden und kein Parent Window zuweisen. Das hätte halt nur einfach den Nachteil das windows die Formulare dann als ganz normale Fenster betrachtet und lädt. Dann könnte ich aber AlphaBlending und Trasparenz uneingeschränkt verwenden.
Jetzt wo ihr die funktionsweise so halbwegs verstanden habt kann ich das sicherlich einfach so fragen :
Würde es derbe Nachteile bringen, bzw. wie schlimm wäre es wenn ich die Formulare der Objekte einfach als unabhängige Formulare lade?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 10, 2003 21:13 
Offline
DGL Member

Registriert: Mo Jan 20, 2003 20:10
Beiträge: 424
Wohnort: nähe Starnberg
Ich würde das WM_ERASEBKGND nicht unterdrücken, sondern mir den verdeckten Teil des Hintergrundes, also vom übergeordneten Form, holen und einfach neu zeichnen.

Auch der Aufwand hält sich in Grenzen. Du schreibst eine Routine, die sich durch die Controls des zu ladenen Forms iterierst.

1. Klassische Methode:
Du holst mit GetWindowLong(hWnd, GWL_WNDPROC) die Nachrichtenfuncktion und speicherst diese. Mit SetWindowLong(hWnd, GWL_WNDPROC, NeuWndProc) kannst Du dann deine eigene Nachrichtenfunktion eintragen und die Nachricht abfangen. Bei allen anderen rufst Du die zuvor gespeicherte Funktion auf. Das ganze nennt sich Subclassing und wird bei vielen Steuerelementen von Windows so gehabt. Die VCL und XPMenu machen dieses auf diesem Weg.

2. TApplication - Methode
Keine Ahnung ob die geht, ist nur ne Idee. TApplication.OnMessage wird für jede Nachricht aufgerufen. Wenn Du das untergeordnete Formular einhängst, müßten auch die Nachrichten des Formulares abgefangen werden können, so daß Du relativ leicht an diese Infos kommst. Dann must Du nur prüfen, ob das zu zeichende Fenster nicht zu dem Hintergrundformular gehört.

Wie gesagt beides nur grob im Kopf überlegt und nicht geprüft.

Gruß
KidPaddle

_________________
http://www.seban.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 10, 2003 21:15 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Ich weiß nicht, ob das so gehen würde. Sobald du auf den Hintergrund klickst würden die Formulare in den selbigen rutschen und wären nicht mehr sichtbar. Bzw. Könntest du diese Formulare auch ÜBER Anwendungen ziehen. Da Fenster keiner Z-Order unterliegen. Nur selten jedenfall. StayOnTop föllt auch weg, da sie immer im Vordergrund sind.
Die kleinen Formulare bei einem Klick auf den Hintergrund wieder in den Vordergrund zu schieben würde zwar gehen würde aber in einer wilden Flackerei enden sobald auf den Hintergrund geklickt wird.

Wie ist das eigentlich derzeit gelöst? Da müsste doch das selbe problem mit deinem Hintergrund und den Anwendungen passieren, oder?

PS: MDI (wo sich Fenster in einem anderem Fenster befinden) geht auch nicht, da dort das Blending ausgeschalten wird. Ich hatte es vorhin mal ausprobiert.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 24 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 10 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.009s | 14 Queries | GZIP : On ]