
Zitat von
himitsu:

Zitat von
shmia:
Häufig wird der Fehler gemacht, dass ausserhalb des Events OnPaint auf den Canvas gezeichnet wird; dass wäre aber ein Fehler.
Fehler?
Ich zeichne sehr oft außerhalb dieses Events darauf.
Im OnPaint wird (bei mir) nur etwas neugezeichnet, wenn z.B. ein Teil verdeckt war ...
Wuzu muß/soll man erst 'ne Umleitung über OnPaint machen, wenn es an den "anderen" Stellen, also dort wo sich etwas ändern soll, diese Veränderung direkt reinzeichnet?
Dann musst du ja an 2 Stellen den Code fürs Zeichnen bereithalten:
einmal an der "anderen" Stelle und dann im OnPaint-Eventhandler.
Jederzeit kann die Paintbox von einem Fenster überdeckt werden; beim wiederaufdecken wird OnPaint aufgerufen.
Wenn das Zeichnen aus 3 Dingen besteht, kann man den OnPaint-Eventhandler auch so schreiben:
Delphi-Quellcode:
procedure TForm1.PaintBox1Paint(Sender: TObject);
begin
ZeichneTeil1(PaintBox1.Canvas);
ZeichneTeil2(PaintBox1.Canvas);
ZeichneTeil3(PaintBox1.Canvas);
end;
Wenn zu einem "anderen" Zeitpunkt weisst, dass Teil2 sich geändert hat, dann kannst du
Delphi-Quellcode:
begin
...
ZeichneTeil2(PaintBox1.Canvas);
...
end;
ansonsten ist PaintBox1.Invalidate die saubere Lösung.