Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Problem mit PaintBox und Label (https://www.delphipraxis.net/165114-problem-mit-paintbox-und-label.html)

iphi 15. Dez 2011 08:09

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.

Bernhard Geyer 15. Dez 2011 08:17

AW: Problem mit PaintBox und Label
 
Mit senden einer WM_SETREDRAW wäre das möglich.

himitsu 15. Dez 2011 08:23

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.

Bummi 15. Dez 2011 09:22

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.

iphi 15. Dez 2011 14:45

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?

Bummi 15. Dez 2011 14:49

AW: Problem mit PaintBox und Label
 
dreckig ? LockWindowUpdate(handle) ...

Memnarch 15. Dez 2011 14:54

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

uligerhardt 15. Dez 2011 15:15

AW: Problem mit PaintBox und Label
 
Zitat:

Zitat von iphi (Beitrag 1141502)
Mit PaintBox.Repaint löse ich den OnPaint Event der Paintbox aus, der in der Paintbox eine Grafik erstellt.

Reicht nicht PaintBox.Invalidate? Das wäre schonmal ressourcenschonender, weil nicht zwangsweise sofort alles neu gezeichnet wird.

Bummi 15. Dez 2011 15:17

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;

Bernhard Geyer 15. Dez 2011 15:48

AW: Problem mit PaintBox und Label
 
Zitat:

Zitat von Memnarch (Beitrag 1141615)
Zu bemerken ist aber noch, dass das locken beim unlocken für ein refresh sorgt ;)

Und dieser Refresh wirkt dann auch noch auf dem gesamten Desktop - Unter XP sorgt das für eine schöne Flackerorgie ...


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:52 Uhr.
Seite 1 von 2  1 2      

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