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

Aktuelle Zeit: Mi Jul 16, 2025 15:57

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



Ein neues Thema erstellen Auf das Thema antworten  [ 24 Beiträge ]  Gehe zu Seite Vorherige  1, 2
Autor Nachricht
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 10, 2003 21:20 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Man kann mit dem Stil WS_EX_NOACTIVATE einstellen, daß ein Fenster immer im Hintergrund bleibt. Das könntest du für das Hintergrundfenster verwenden und für die anderen Fenster ganz normale Formen nehmen. Der Stil geht aber nur bei WinXP oder 2000.


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

Registriert: Di Jun 24, 2003 19:09
Beiträge: 732
Bei der aktuellen Version ist es halt nicht dynamisch. Die TImages,TLabels,etc. für die Desktop Objekte werden direkt von der Anwendung erzeugt und verwaltet. Es gibt da kein Formular. Es kann also die Transparent Eigenschaft der Komponenten genutzt werden. Ich möchte es aber unbedingt dynamisch aufbauen weil es nur so richtig sinn macht.
Bei der aktuellen Test Version mit dynamischen Objekten hab ich die reine Transparenz mit einem kleinen Trick gelöst. Die WinApi bietet die Funktion PaintDesktop welches den passenden Hintergrundbildausschnitt auf dass Formular zeichnet. Ich lasse einfach jedes Object die PaintDesktop funktion aufrufen. Damit erzeuge ich den Eindruck das es Trasparent ist. Das hat aber den Nachteil das ich die Objekte nicht bewegen kann da beim flüssigen bewegen der Hintergrund nicht jedesmal aktualisert werden kann. Und außerdem ist es so nicht möglich Objekte auch nur ein klein wenig zu überlagern. AlphaBlending ist damit natürlich auch nicht möglich...
Nur irgendwie muß das doch funktionieren. Das dynamische Objekt System ist so genial. Ich will das unbedingt nutzen. Irgendwer im IRC meinte das das vielleicht mit GDI+ geht. Das ist irgendne neue WinXP Grafikschnittstelle von MS. Nur hab ich absolut keine Erfahrung damit :(


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

Registriert: Di Jun 24, 2003 19:09
Beiträge: 732
LarsMiddendorf hat geschrieben:
Man kann mit dem Stil WS_EX_NOACTIVATE einstellen, daß ein Fenster immer im Hintergrund bleibt. Das könntest du für das Hintergrundfenster verwenden und für die anderen Fenster ganz normale Formen nehmen. Der Stil geht aber nur bei WinXP oder 2000.

Kann ich damit auch realisieren das die geladenen Formulare auch auf keinen Fall in den Vordergrund gebracht werden? Es wäre mist wenn die andere Fenster zum Teil überlagern sobald man sie anklickt...


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

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
WS_EX_NOACTIVATE ist auf jeden Fall schon mal ein stück in die Richtung. Nur leider hat das einen kleinen Nachteil. Ich hatte das gerade mal in einer Testanwendung ausprobiert und da musste ich feststellen, dass die Fenster dennoch vor ein anderes Fenster in der selben Anwendung geholt werden können. Und sobald ich das Flag nicht bei beiden Fenstern aktiviert hatte löste es sich bei dem anderen Fenster dann auch auf.

GDI+ ist eine Grafikerweiterung. Ich bezweifele mal sehr stark, dass die dir bei deinem Problem helfen könnte, da die Windowsanwendungen und die Komponenten da nicht drauf aufgebaut sind. Da müsstest du dir von Grund auf neue Komponenten schreibe. Das ist noch mehr arbeit als mit "normal" GDI.

Kannst du vielleicht deine transparenten Fenster auch mit Regionen erstellen. Damit kannst du bestimmte Bereiches eines Fensters (auch Panel) als nicht existent deklarieren. Dann könntest du die Module wieder als Panels machen. Du hättest dann allerdings kein blending aber das ist momentan ja eh ein wenig schwieriger zu lösen. Der Vorteil dabei wäre, dass diese Bereiche des Fensters tatsächlich Löcher in den Fenstern sind und nur ein mal eingestellt werden müssten.


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

Registriert: Di Jun 24, 2003 19:09
Beiträge: 732
Aber was mache ich dann wenn ich ein Modul z.B. ein Icon enthält? Da eine Region zu erstellen die wirklich alle Transparenten Pixel des Icons enthält halte für ziemlich auwendig. Generell müßte die Region ja alle Transparenten Pixel des Formulars enthalten... -> imo zu aufwendig.

Mir ist aber für die reine Transparenz noch ne andere Idee gekommen. Ich unterteile das ganze in zwei Haupt Formulare. Ein Hintergrundformular welches das Hintergrundbild enthält und keinerlei Transparenz besitzt. Davor kommt ein Formular auf das die Desktop Objekte geladen werden. Der Hintergrund der Desktop Objelkte sowie der des Formulars auf das sie geladen werden bekomme eine Farbe (z.b. clFuchsia) und wird auf Transparent gestellt. Das müßte imo funktionieren.
Nur hab ich damit keine individuelles AlphaBlending für die einzelnen Objekte :?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Dez 11, 2003 19:40 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Ich habe heute zufällig dieses Thema bei Delphi Praxis gelesen:
http://www.delphipraxis.net/topic14843_eigenes+desktop+window.html

Es geht darum wie man einen eigenen Desktop erstellt. Vermutlich wird der normale Windows Desktop auch auf diese Art und Weise eingerichtet.
Dann könntest du alle Formen einfach normal lassen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Dez 11, 2003 19:54 
Offline
DGL Member
Benutzeravatar

Registriert: Di Jun 24, 2003 19:09
Beiträge: 732
Das bringt mir aber nix da ich ja absolut keinen normalen Windows Desktop brauche. Auf einem Normalen Windows Desktop kann ich ja nur normale Verknüpfungen und Ordner erzeugen. Also das was der Windows Desktop halt alles kann.
Das reicht mir aber nicht :wink:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Dez 11, 2003 21:42 
Offline
DGL Member
Benutzeravatar

Registriert: Di Jun 24, 2003 19:09
Beiträge: 732
Ich wollte gerade mal das mit den 2 Formularen ausprobieren. Nur leider gibts dabei natürlich wieder Massenweise Probleme. Das Problem ist die Transparenz des Vordergrund Formulars. Wenn ich irgendwo hinklicke wählt er natürlich das Hintergrund Formular an weil das Vordergrund Formular ja nicht da ist. Wenn ich das Hintergrunf Formular auf nicht anwählbar stellen dann bleibt das Vordergrund Formular schon mal vorn. Bei jedem klick piept er aber rum und sowas wie ein PopUp Menu im Vordergrundformular geht auch nicht...

Irgendwelche Vorschläge?!?!! :?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Dez 26, 2003 13:56 
Offline
DGL Member
Benutzeravatar

Registriert: Di Jun 24, 2003 19:09
Beiträge: 732
Nur mal für als Anmerkung für die die es vielleicht interresiert wie ich das Problem gelöst habe :
Ich hab mich für den Weg der Fake Transparenz entschieden. Die Haupt/Träger Anwendung lädt den kompletten Hintergrund in ein TBitmap. Ein Pointer zu diesem TBitmap wird an die geladenen Formulare übergeben und diese zeichnen den benötigten Bildausschnitt auf ihren Hintergrund und den Rest halt darauf. Damit kann ich zusätzlich auch noch individuelle Transparenz der Formulare erreichen. Einziger Nachteil ist das halt Überlappen zweier Formulare nicht funktioniert da ja nichts wirklich Transparent ist. Aber das nehme ich einfach so hin weil es nicht so tragisch ist...

Hier ein Screenshot : http://people.freenet.de/BilliBerserker/SharpDeskP.jpg
Alles was dort dargestellt wird(bis auf das Einstellungs Fenster) sind einzelne Formualre die dynamisch aus dll Dateien geladen und auf einem Formular der Hauptanwendung angezeigt werden. :)
Ich hatte ja auch das Problem mit dem laden von Formularen aus dll's bzw. Delphi Packages. Hab dort nun auch einen weg gefunden das doch mit dll's zu machen :)


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 Vorherige  1, 2
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 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:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.011s | 14 Queries | GZIP : On ]