Manchmal Probleme beim Neuzeichnen meiner Komponente
Hallo,
hab folgendes Problem. ICh hab von TCustomPanel abgeleitet und nutze auch das OnPaint Event davon zum Neuzeichnen. Ich hab zusätzlich ein Flag IsDirty, welches mir angibt, ob die Ausgabe komplett neu berechnet werden muss oder ob ich lediglich mein DoubleBufferdBitmap zeichnen muss, weil sich nichts geändert hat an der Ausgabe, nur lediglich das Bild erneuert werden muss weil ein anderes Fenster über meine Komponente geschoben wurde. Das funktioniert auch meistens ganz gut, nur manchmal zeichnet er sich dann doch nich neu, z.B. wenn ich mir den Hint anzeigen lasse ist dieser Bereich dann ungültig. Hab irgendwie das Gefühl das OnPaint-Event wird manchmal nich ausgelöst.... Kann man da generell was zu sagen, was ich da für MAßnahmen treffen könnte? Meine Paint-Prozedur sind ungefähr so aus:
Delphi-Quellcode:
Für jeden Tip dankbar!
procedure TCustomTreemapChart.Paint;
var OldCursor: TCursor; begin if IsDirty then begin try OldCursor := Screen.Cursor; Screen.Cursor := crAppStart; FDoubleBufferedBitmap.Height := Width; FDoubleBufferedBitmap.Width := Height; DrawChart(FDoubleBufferedBitmap.Canvas, ClientRect); Canvas.Draw(0, 0, FDoubleBufferedBitmap); MakeDirty; finally Screen.Cursor := OldCursor; end; end//IsDirty else BitBlt(Canvas.Handle, 0, 0, Width, Height, FDoubleBufferedBitmap.Canvas.Handle, 0, 0, SRCCOPY); end; Liebe Grüße, Laura |
Re: Manchmal Probleme beim Neuzeichnen meiner Komponente
Warum so kompliziert? Warum nutzt du nicht einfach TCanvas.ClipRect, welches den dreckigen Bereich angibt. Mit diesem Rechteck kannst du zusamemn mit deinem ClientRect das Überschneidungsrechteck berechnen (IntersectRect). Wenn die Funktion false zurück gibt, gibt es keine Überschneidung, also brauchst du dann gar nicht zu zeichnen. Im anderen Falle musst du nur noch das berechnete Rechteck in deinem Clientbereich malen.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:35 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