Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Flimmern bei nicht klassischem XP-Style (https://www.delphipraxis.net/85571-flimmern-bei-nicht-klassischem-xp-style.html)

Alexander Roth 1. Feb 2007 16:39


Flimmern bei nicht klassischem XP-Style
 
Hallo an alle,

also mein Problem ist folgendes: Ich habe ein Programm geschrieben, was eine Diagrammkomponente (RiverSoftAVG Charting Component Suite) benutzt. Wenn ich nun einen netten Schieberegler bewege, werden die Daten geändert.
Das entscheidende ist nun: Im klassischen XP Style geschieht das ohne Flimmern. (DoubleBuffered:=true)
Bei jeden anderen Style flimmert es aber richtig kräftig.

Noch wichtig ist, dass egal, ob ich das Manifest nicht drin habe, oder ob ich auf klassische Ansicht geschaltet habe, macht keinen Unterschied. Beides mal klappt es und sobald mein Programm nicht mehr in der klassischen Ansicht ist, flimmerts.

Wisst ihr woran das liegen könnte?
Wie kann man es beheben?


Gruß Alexander

jbg 1. Feb 2007 17:48

Re: Flimmern bei nicht klassischem XP-Style
 
WM_ERASEBKGND abfangen und dort "Message.Result := 1" ausführen ohne das inherited. Dann kommt es darauf an, ob die Komponente den gesamten Bereich füllt oder sich auf die in WM_ERASEBKGND gefüllten Zeichenfläche verlässt. Macht sie dies, dann werden einige Bereiche nicht neugezeichnet was zu unschönen Pixelresten führt. In diesem Fall müsstest du ebenfalls WM_PAINT und WM_PRINTCLIENT übschreiben und dort den Hintergrund füllen, da der zeitliche Abstand dort auf fast 0 schrumpft und nicht wie bei WM_ERASEBKGND einige Millisekunden beträgt.

Alexander Roth 1. Feb 2007 18:17

Re: Flimmern bei nicht klassischem XP-Style
 
Also erstmal danke für die Antwort.

Zitat:

Zitat von jbg
Dann kommt es darauf an, ob die Komponente den gesamten Bereich füllt oder sich auf die in WM_ERASEBKGND gefüllten Zeichenfläche verlässt.

Sie füllt nicht die gesamt form wenn du das gemeint hast.

Zitat:

Zitat von jbg
WM_ERASEBKGND abfangen und dort "Message.Result := 1" ausführen ohne das inherited. Dann kommt es darauf an, ob die Komponente den gesamten Bereich füllt oder sich auf die in WM_ERASEBKGND gefüllten Zeichenfläche verlässt. Macht sie dies, dann werden einige Bereiche nicht neugezeichnet was zu unschönen Pixelresten führt. In diesem Fall müsstest du ebenfalls WM_PAINT und WM_PRINTCLIENT übschreiben und dort den Hintergrund füllen, da der zeitliche Abstand dort auf fast 0 schrumpft und nicht wie bei WM_ERASEBKGND einige Millisekunden beträgt.

Zeichnet man damit sozusagen alles bis auch die Diagrammkomponente neu?


Also damit auch ich Normalsterblicher das verstehe: Wieso flimmert es bei nicht-klassisch?


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:40 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