![]() |
Delphi-Version: 5
Problem mit PaintBox und Label
Hallo,
Ich habe auf meinem Main Form eine Paintbox, in der eine Grafik erstellt wird, und ein Label. Mit PaintBox.Repaint löse ich den OnPaint Event der Paintbox aus, der in der Paintbox eine Grafik erstellt. Wenn ich das Label ändere, wird allerdings auch der OnPaint-Event der PaintBox ausgelöst, was ich nicht möchte, da das Zeichnen sehr rechenaufwändig ist. Gibt es eine Möglichkeit, das Label zu ändern ohne die Paintbox neu malen zu müssen oder das Label gleichzeitig mit dem Malen zu ändern, so dass nur einmal gemalt wird? Ich habe versucht, das Label in der OnPaint-Serviceroutine zu ändern. Dies löst den OnPaint Event aber trotzdem ein zweites Mal aus. |
AW: Problem mit PaintBox und Label
Mit senden einer WM_SETREDRAW wäre das möglich.
|
AW: Problem mit PaintBox und Label
Es wird nicht das Event der Paintbox ausgelöst ... es gibt nur ein Event.
TPaintBox und TLabel haben keine eigenen Canvas, sondern zeichnen sich auf dem ihres des Parent. Ein Repaint-Befehl an das Label geht also an den Parent, vorallem wenn das Label transparent ist, denn dann muß sich der Parent ja auch neu zeichnen und wenn sich der Parent neu zeichnet, dann ist auch die Paintbox betroffen. :angle: Man könnte höchstens die Region eingrenzen, aber dann müssen die Zeichenroutinen diese Angabe auch selber auswerten. |
AW: Problem mit PaintBox und Label
wenn es so aufwändig zu berechnen ist dam male doch in ein Bitmap wenn nötig und lass die Paintbox das Bitmap malen im OnPaint.
|
AW: Problem mit PaintBox und Label
Das kanns doch nicht sein. Wenn ich 10 Labels und eine komplexe Grafik update, dann muss ich die Grafik insgesamt 11 mal updaten.
Selbst ein Bitmap umkopieren kostet Zeit. Gibt es denn keine Möglichkeit, den Repaint beim Ändern der Labels zu unterdrücken und erst zum Schluss beim Aufbau der Grafik einen Repaint zu machen? |
AW: Problem mit PaintBox und Label
dreckig ? LockWindowUpdate(handle) ...
|
AW: Problem mit PaintBox und Label
Zu bemerken ist aber noch, dass das locken beim unlocken für ein refresh sorgt ;)
Nicht dass sich später jemand wundert. (Auch schön wen man damit den ganzen desktop lockt und endlockt :twisted:) MFG Memnarch |
AW: Problem mit PaintBox und Label
Zitat:
|
AW: Problem mit PaintBox und Label
sauber ist eine Implementierung in dieser Art (reines Testprojekt 6 Labels auf dem Form)
Delphi-Quellcode:
procedure TForm2.Timer1Timer(Sender: TObject);
begin if Timer1.Tag > 6 then begin Timer1.Enabled := false; SendMessage(handle,WM_SETREDRAW,-1,0) ; RedrawWindow(handle, 0, 0, RDW_ERASE or RDW_FRAME or RDW_INVALIDATE or RDW_ALLCHILDREN); end else begin SendMessage(handle,WM_SETREDRAW,0,0); Timer1.Tag := Timer1.Tag + 1; TLabel(FindComponent('Label' + IntToStr(Timer1.Tag))).Caption := FormatDateTime('ss:zzz',now); end; end; |
AW: Problem mit PaintBox und Label
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:08 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