Autor Beitrag
Christian R.
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 13.06.06 13:52 
Mich würde interessieren, warum man zum Shapen eines Forms nicht die TransparentColor- und TransparentColorValue- Eigenschaft benutzt sondern SetWindowRegion. Das Windows 9x Bitmaps für den Hintergrund benutzt habe ich schon rausbekommen. Ich gehe mal stark davon aus, dass es auch um Rechenzeit geht. Die Bewegung eines transparenten Forms (Ruck, Ruck, Ruck ...) braucht meiner Erfahrung nach sehr viel davon. Ist SetWindowRegions schneller?

Aber was ist nun genau der Vorteil zu SetWindowRegion?
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Di 13.06.06 19:43 
Prinzipiell zwei Dinge:
1. Transparenz-Effekte sind erst ab Windows2000 implementiert
2. SetWindowRegion sagt Windows einfach, dass an bestimmten Stellen nicht gezeichnet werden muss

Im Detail: Bei SetWindowRegion liegt die Darstellungsmaske für Windows vorbereitet im Speicher, wodurch das Zeichnen beschleunigt wird. Bei Transparenz-Farben muss Windows erst aus den zu zeichnenden Bilddaten die transparenten Stellen ermitteln, wodurch Rechenzeit verschenkt wird.

BTW: Die GDI rechnet jegliche Dinge auf CPU ... Daher ist es ein Unterschied, ob man eine Linie mit GDI oder OpenGL zeichnet, OpenGL rechnet (sofern unterstützt) alles auf der GPU, die für solche Dinge optimiert ist ...

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
root_at_localhost
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 191



BeitragVerfasst: Di 13.06.06 21:08 
wie schon gesagt wurde, Transparenz gibts erst ab w2k, bei SetWindowsRegion kann man außerdem an transparenten stellen auch auf das dahinterliegende Formular durchklicken, ich bin mir icht sicher, ob das mit Transparenz geht, glaub aber nicht...
DarkLord05
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 449

WinXP Pro SP2
Opera; Delphi 3 Pro; Delphi 2005, Turbo Delphi, dev-c++, Eclipse, MS Visual Studio .NET 2003, MS Visual C++
BeitragVerfasst: Di 13.06.06 21:13 
user profile iconroot_at_localhost hat folgendes geschrieben:
wie schon gesagt wurde, Transparenz gibts erst ab w2k, bei SetWindowsRegion kann man außerdem an transparenten stellen auch auf das dahinterliegende Formular durchklicken, ich bin mir icht sicher, ob das mit Transparenz geht, glaub aber nicht...


Bei mir geht das, und wenn man z.B. eh Programme schreibt die nur ab win2k gehen, dann find ich das völlig ok das mit Transparent zu machen.
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Di 13.06.06 21:17 
@DarkLord: Ich hab mir angewöhnt, Transparenz so zu nutzen, dass sie auf Systemen, wo sie nicht unterstützt wird, nicht stört ... Die Implementierung der VCL ist in der Hinsicht eine einzige Katastrophe*, wenn an sie aus Versehen mal aktiviert ... Transparenz ist oft genug eh nur Spielerei und ich seh's nicht ein, warum ich Programm XY nur auf Win2K nutzen kann, weil der Programmautor unbedingt "visuelle Effekte, die so toll sind", drin haben muss.

@SetWindowRegion: Unterstützt keine Halbtransparenz.

*Anwendung crasht mit ner AV beim Initialisieren der Form weg

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
DarkLord05
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 449

WinXP Pro SP2
Opera; Delphi 3 Pro; Delphi 2005, Turbo Delphi, dev-c++, Eclipse, MS Visual Studio .NET 2003, MS Visual C++
BeitragVerfasst: Di 13.06.06 21:25 
user profile iconBenBE hat folgendes geschrieben:

...Transparenz ist oft genug eh nur Spielerei und ich seh's nicht ein, warum ich Programm XY nur auf Win2K nutzen kann, weil der Programmautor unbedingt "visuelle Effekte, die so toll sind", drin haben muss.
...


So mein ich das nicht^^ ich mein, falls man in einem Programm xyz etwas macht was z.B. nur unter den NT Systemen funktioniert...was weiß ich warum^^ DANN kann man Transparenz benutzen und nicht wegen der Transparenz nur für NT Systeme.

Und ich hab noch nie Probleme damit gemerkt, weder ich noch nen Freund.

So seh ich das jedenfalls :)
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Di 13.06.06 21:29 
user profile iconDarkLord05 hat folgendes geschrieben:
Und ich hab noch nie Probleme damit gemerkt, weder ich noch nen Freund.

Naja, dann setz mal auf nem leeren Form AlphaBlend auf true und führ das Compilat auf Win9x aus ... Sauber programmiert müsste die VCL die Transparenz einfach ignorieren - tut sie aber nicht (siehe oebn) ...

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
root_at_localhost
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 191



BeitragVerfasst: Di 13.06.06 21:59 
Ich hab mir halt einmal ne Funktion gebastelt, die aus ner Bitmap eine Maske für SetWindowRegion bastelt und das Problem ist gelößt, wozu soll ich mich da mit alphablend Spielereien rumärgern, wenn ich ne Lösung hab, die auch auf meinem alten 133MHz mit win95 funktioniert...
alzaimar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: Di 13.06.06 22:05 
Alphablend ist für Leute, die keinen Bock haben, sich Gedanken um gut programmierte und performante Visualisierung zu machen. Schaut euch doch WinAmp an, das CPU Zeit frisst, nur weil die Kanten ein wenig weichgezeichnet sein sollen. Das kann man auch anders, allerdings mit etwas mehr Aufwand. Und dann ist es auch kompatibel zu Win 9x, und zwar so, das das Teil auch auf einem alterschwachen PC läuft (So wie BenBE das treffend formuliert hat).

Mit Windows Regions hat man viel mehr Freiheit.

Übrigens lässt sich Semitransparenz hervorragend mit Regions implementieren. Man muss nur wissen, was hinter der Form ist. :mrgreen:

_________________
Na denn, dann. Bis dann, denn.
root_at_localhost
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 191



BeitragVerfasst: Di 13.06.06 22:49 
user profile iconalzaimar hat folgendes geschrieben:

Übrigens lässt sich Semitransparenz hervorragend mit Regions implementieren. Man muss nur wissen, was hinter der Form ist. :mrgreen:


Davon hab ich jetzt wieder noch nix gehört, kannst du das mal bitte kurz erklären
Christian R.
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 15.06.06 08:51 
@BenBE:

Danke schon mal für die ausführliche Antwort. Habe mir ähnliches aus Logik zusammengereimt, da ich in einigen Beiträgen nachlesen konnte, dass gerade bei älteren Win 9x Versionen mit einer Bitmap für Transparenz gearbeitet wird.

Würde gern noch mal wissen, ob SetWindowRegions und ähnliche auf der Basis von OpenGL arbeiten, da Du OpenGL angesprochen hast. Wenn ich mit OpenGL in Delphi arbeiten möchte, kannst Du mir vielleicht noch ein gutes Tutorial empfehlen? :les:

Danke schön.
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Do 15.06.06 10:24 
SetWindowRegion bereitet die Informationen einfach besser auf, weshalb die Performance gesteigert werden kann.

Mit OpenGL hat das wenig zu tun ... OpenGL ist direkt eine eigene Grafik-Bibliothek, die für schnelle Grafik-Anzeige optimiert ist und vieles auf Hardware, statt wie die GDI per Software rechnet. Infos zu OpenGL findest Du auf www.delphigl.com

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Christian R.
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 15.06.06 10:47 
Vielen Dank. Very precise ...