![]() |
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 ![]() Zitat:
|
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! |
Re: VCL Flicker Reduce Unit
Zitat:
Zitat:
|
Re: VCL Flicker Reduce Unit
Zitat:
VT 4.4.3 EWB 14.57 |
Re: VCL Flicker Reduce Unit
Zitat:
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). |
Re: VCL Flicker Reduce Unit
Es gibt eine neue, überarbeitete Version der VCLFlickerReduce Unit.
Zitat:
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. |
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 |
Re: VCL Flicker Reduce Unit
Zitat:
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. |
Re: VCL Flicker Reduce Unit
Zitat:
|
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:
|
Re: VCL Flicker Reduce Unit
Hallo jbg,
großes Lob und vielen Dank von mir :-) Wenn das wirklich an Borland liegt, solltest Du vielleicht einmal in Fragen und Anregungen etwas zu dem Problem schreiben... Deine Unit funktioniert bei mir bis dahin anscheinend erst einmal wunderbar. Gruß Stahli |
Re: VCL Flicker Reduce Unit
Hi,
Habe die Unit auch mal ausprobiert. Als allerstes muss ich sagen, dass die Unit wirklich toll ist :) Einen "Fehler" habe ich allerdings. Ich habe mehrere Panels mit ParentBackground = True. Das führt aber zu einer Fehlerdarstellung. Der Hintergrund kann durch Fenster die ich darüberziehe übermalt werden (Sprich das Fenster ist dann im Hintergrund, wie wenn ein Programm nicht mehr reagiert und es nicht mehr richtig neugezeichnet wird). Lässt sich das evtl. beheben? mfG mirage228 |
Re: VCL Flicker Reduce Unit
noch ein Nachtrag:
Das Flackern trat bei meinem Programm nur unter XP auf - unter NT nicht. Muss morgen mal sehen, wie die Unit-Auswirkungen unter NT sind... Mit der Unit flackern bei mir noch die Einträge der RadioGroup (der Rahmen und die Beschriftung allerdings nicht mehr). Stahli |
Re: VCL Flicker Reduce Unit
Zitat:
|
Re: VCL Flicker Reduce Unit
Zitat:
Wo in Deiner Unit kann ich den InvalidateRect-Code einfügen oder muss der ganz woanders hin? mfG mirage228 |
Re: VCL Flicker Reduce Unit
Ich habe es zwar jetzt nicht getestet, aber wenn du den gesamten Code von InvalidateSyncPaintControls() durch ein "Control.Invalidate;" ersetzt, könnte es funktionieren.
|
Re: VCL Flicker Reduce Unit
Zitat:
Habe in der Datei, die in Deinem ersten Beitrag angehängt ist und in allen VCL Source Units suchen lassen... kein Ergebnis zu einer solchen Funktion :gruebel: mfG mirage228 |
Re: VCL Flicker Reduce Unit
Das liegt wohl daran, dass ich mich auf den
![]() |
Re: VCL Flicker Reduce Unit
Zitat:
mfG mirage228 |
Re: VCL Flicker Reduce Unit
Hi,
also ich habe noch einen Fehler bei mir im Programm und zwar lasse ich die Form nach folgendem Prinzip zeichnen: ![]() Wenn ich nun deine Komponente in mein Programm einbinde, dann ist es mir nicht möglich, nach dem Verändern der Formgröße, ein Memo zu fokussieren. Weisst du, woran das liegt? Hier ist mein Post, welchen in vor ein paar Tagen erstellt hatte: ![]() |
Re: VCL Flicker Reduce Unit
Hallo jbg,
ich hatte gerade festgestellt, dass mit Deiner alten Unit ein TImage direkt auf einem TabSheet nach dem Bild-Löschen das Bild sichtbar bleibt: Image1.Picture:=nil; Das Bild verschwand erst nach dem Minimieren oder Übderdecken meiner Form und anschließendem Neuzeichen der Form. Deine neue Unit reduziert bei mir kein Fackern mehr (kein Effekt erkennbar). Mein Problem mit dem Image konnte ich mit Deiner alten Unit klären, indem ich mein Image einfach auf ein Panel setze und dieses dann auf das TabSheet. Stahli |
Re: VCL Flicker Reduce Unit
Liste der Anhänge anzeigen (Anzahl: 1)
Cool Unit :) und effektiv xD
Allerdings habe ich zwei Bugs: Und zwar wird das TreeView nicht immer komplett neugezeichnet (im Expand) und zum anderen zeichnest du den Hintergrund der Tableiste nicht durchsichtig sondern in cBtnFace ;) Das sieht mit Tabs auf Tabs ziemlich schlecht aus :( Ich habe im Anhang mal ein Screenshot von den beiden Fehlern. Kommentiere ich die Zeile aus, funktioniert alles wunderbar! MfG xZise |
Re: VCL Flicker Reduce Unit
Dieses Projekt ist tot, da ich für jede Komponente auf der Welt eine Ausnahme programmieren müsste. Also mehr Ausnahmen als Regelfälle.
|
Re: VCL Flicker Reduce Unit
Schade :(
|
AW: VCL Flicker Reduce Unit
Hallo,
vielen Dank für Eure Antworten und Eure Hilfe. Die Kompination aus der "VCLFlickerReduce" und "...FormResize... Invalidate;..." haben mein Problem gelöst. Danke und Tschüs Gebhard |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:58 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz