Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Flackern von Listbox verhindern (https://www.delphipraxis.net/185099-flackern-von-listbox-verhindern.html)

EWeiss 14. Mai 2015 19:32

Flackern von Listbox verhindern
 
Bei jeden erzwungenen Repaint des Haupt Formular flackert die Listbox.
Ich erstelle die ListBox mit CreateWindowEx.
Diese wird anschließend gesubclassed.

Ich achte darauf das die ListBox beim erstellen des Windows keine Style verwendet.
Bsp. CS_HREDRAW or CS_VREDRAW..

Ich achte darauf das in der WinProc WM_ERASEBKGND stets 1 zurückgibt.
Habe versuche mit WM_SETREDRAW angestellt usw..
Auch das setzen von LBS_NOREDRAW führt nicht zum Erfolg.

Bekomme das Flackern einfach nicht weg.
Also nicht die Einträge oder das zeichnen derjenigen sondern das der kompletten Listbox wenn die Form aktualisiert.

Mir fällt jetzt nicht ein was ich da noch machen könnte um dieses leidige Problem zu beseitigen.

Ein Begin und Endupdate bringt auch nichts da NonVcl..
Dürfte aber auch mit WM_SETREDRAW gleichzusetzen sein.
All anderen Controls verhalten sich still nur die ListBox hüpft da rum.

gruss

Popov 14. Mai 2015 20:29

AW: Flackern von Listbox verhindern
 
Evtl.
Delphi-Quellcode:
ListBox1.DoubleBuffered := True;
?

himitsu 14. Mai 2015 20:35

AW: Flackern von Listbox verhindern
 
Es wird nicht die VCL-TListBox verwendet. :zwinker:

Aber ja, sowas wäre die Lösung.
Dein Problem ist, daß deine Form scheinbar den Hintergrund erst neu zeichnet, oder die Listbox den Hintergrund erstmal komplett platt macht, bevor sich die ListBox erneut drauf malt und das muß zwangsläufig in einem Flackern enden.

EWeiss 14. Mai 2015 20:38

AW: Flackern von Listbox verhindern
 
Zitat:

Zitat von himitsu (Beitrag 1301586)
Es wird nicht die VCL-TListBox verwendet. :zwinker:

Aber ja, sowas wäre die Lösung.
Dein Problem ist, daß deine Form scheinbar den Hintergrund erst neu zeichnet, oder die Listbox den Hintergrund erstmal komplett platt macht, bevor sich die ListBox erneut drauf malt und das muß zwangsläufig in einem Flackern enden.

Die ListBox verwendet keinen DoubleBuffer hingegen die Hauptform schon.

Habe es jetzt mal mit den Winstyles versucht.
Delphi-Quellcode:
WS_POPUP or WS_CLIPCHILDREN or WS_CLIPSIBLINGS;


Allerdings werden mir dann die Einträge in der Listbox nicht neugezeichnet.
Flackern tut dann nichts mehr.. bringt mich aber auch nicht weiter.

gruss


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:50 Uhr.

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