Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   VCL Flicker Reduce Unit (https://www.delphipraxis.net/78231-vcl-flicker-reduce-unit.html)

jbg 1. Okt 2006 13:04


VCL Flicker Reduce Unit
 
Liste der Anhänge anzeigen (Anzahl: 1)
Wer schon mal auf ein TabSheet, dass Anchors oder Align=alClient hat, Controls gelegt hat, wird sicherlich nicht so begeistert von dem Geflacker sein, dass beim Vergrößern/Verkleinern des Formulars dabei ensteht. Da dieses Geflacker teilweise zu einer immensen Verlangsamung des Resize-Vorgangs kommt und auch nicht gerade schön anzusehen ist, bin ich auf Ursachenforschung gegangen. Und dabei musste ich festetellen, dass Borland beim WM_ERASEBKGND für alle TWinControls den kompletten Inhalt übermalt, also auch den von Child-Controls, die csOpaque im ControlStyle haben.

Damit dieses Geflackere aufhört habe ich nun eine kleine Unit geschrieben, die durch ihre bloses Aufnahme in ein Projekt, das Flackern stark reduziert.

Hier mal ein Screen-Recording (1.3MB), dass den Unterschied zeigt.


Zitat:

History:
2006-11-21:
- fixed region bugs
- fixed wrong DefaultHandler call
- fixed parent background painting
- added region exclusion for sub-controls of transparent control children
2006-10-03:
- fixed RangeChecks disabled

toms 1. Okt 2006 14:37

Re: VCL Flicker Reduce Unit
 
Hallo jbg,

Habe deine Unit kurz in einem aktuellen Projekt ausprobiert.

Folgende Probleme sind aufgetreten:

Der VirtualStringTree wird z.T nicht mehr richtig gezeichnet. (nur schwarzer Hintergrund)
Der EmbeddedWB wird dauern Range Check Errors hervor.

Ansonsten sieht's aber vielbersprechend aus!

jbg 1. Okt 2006 14:46

Re: VCL Flicker Reduce Unit
 
Zitat:

Zitat von toms
Der VirtualStringTree wird z.T nicht mehr richtig gezeichnet. (nur schwarzer Hintergrund)

Kann ich nicht reproduzieren. Vor allem ändert sich für den VT eigentlich gar nichts (solange er keine Child-Controls hat).

Zitat:

Der EmbeddedWB wird dauern Range Check Errors hervor.
Der wirft noch ganz andere Sachen. Was ich mich mit dem IE schon beruflich geärgert habe. Und der IE 7 lässt noch schlimmeres erwarten.

jbg 1. Okt 2006 15:09

Re: VCL Flicker Reduce Unit
 
Zitat:

Zitat von toms
Der EmbeddedWB wird dauern Range Check Errors hervor.

Auch das kann ich nicht nachvollziehen.

VT 4.4.3
EWB 14.57

jbg 3. Okt 2006 19:19

Re: VCL Flicker Reduce Unit
 
Zitat:

Zitat von toms
Folgende Probleme sind aufgetreten:

Der VirtualStringTree wird z.T nicht mehr richtig gezeichnet. (nur schwarzer Hintergrund)
Der EmbeddedWB wird dauern Range Check Errors hervor.

Das kommt, wenn der Ersteller der Unit (ich) mit den Vorgabewerten für die Breichsüberprüfung und Überlaufprüfung arbeitet, aber die Benutzer dies nicht machen.

Ich habe jetzt zum einen die Übergabe von Cardinals an Integer Parameter mit einem Typecast behoben und zum anderen für die Unit die Bereichs- und Überlaufprüfung abgeschaltet. Einfach nochmal herunterladen (ggf. Browsercache leeren).

jbg 21. Nov 2006 20:31

Re: VCL Flicker Reduce Unit
 
Es gibt eine neue, überarbeitete Version der VCLFlickerReduce Unit.

Zitat:

Änderungen:
2006-11-21:
- fixed region bugs
- fixed wrong DefaultHandler call
- fixed parent background painting
- added region exclusion for sub-controls of transparent control children
2006-10-03:
- fixed RangeChecks disabled

Ich gebe keine Garantie, dass die Unit zu 100% funktioniert, da es immer einen Fall geben kann in dem eine abgeleitete Klasse mit WM_ERASEBKGND herumtrickst.

xaromz 21. Nov 2006 21:19

Re: VCL Flicker Reduce Unit
 
Hallo,

mal eine Frage: tritt das Flackern unter Vista immer noch auf? Da wird schließlich jedes Fenster erst mal in ein Offscreen-Bitmap gemalt. Die Performance sollte dadurch aber nicht unbedingt besser werden...

Gruß
xaromz

jbg 21. Nov 2006 22:14

Re: VCL Flicker Reduce Unit
 
Zitat:

Zitat von xaromz
Mal eine Frage: tritt das Flackern unter Vista immer noch auf?

Das kann ich im Moment nicht testen, da mir letztes Wochenende die Graka abgeraucht ist und ich noch nicht dazu gekommen bin, mir eine gescheite neue zu kaufen. Und mit der, die ich im Augenblick drinnen habe, kann ich gerade mal Spiele anno 1999 spielen. Also vollkommen ungeeignet für Vista (da sieht nun alles dunkelgrau aus. So müssen sich wohl dann die Illegal-Vista-Kopierer fühlen).

Die Unit verringert das flackern hauptsächlich dadurch, dass nicht mehrmals auf der selben Stelle mit unterschiedlichen Farbwerten/Hintergrund-Themes gemalt wird. Das beschleunigt das ganze natürlich ein Stück, was Vista auch zugute kommen sollte.

Gandalfus 22. Nov 2006 11:33

Re: VCL Flicker Reduce Unit
 
Zitat:

Zitat von xaromz
Hallo,

mal eine Frage: tritt das Flackern unter Vista immer noch auf? Da wird schließlich jedes Fenster erst mal in ein Offscreen-Bitmap gemalt. Die Performance sollte dadurch aber nicht unbedingt besser werden...

Gruß
xaromz

Ich würde sagen, dass dadurch die Performance sogar besser wird.

Dash 4. Jan 2007 19:10

Re: VCL Flicker Reduce Unit
 
Also bei mir macht die Unit auch einige Probleme. In meiner ListView werden einige Einträge einfach schwarz wenn ich das Fenster maximiere! Ansonsten habe ich eigentlich nichts auszusetzen, klasse Unit :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:22 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz