Noch ein Nachtrag dazu: Du kannst in der Paint Methode von der Paintbox auch mit IntersectRect() zum einen überprüfen ob du was zeichnen müsstest und zum anderen erhälst du bei einer Positiven Antwort sogar gleich das Rechteck des zu zeichnenden Teilbereiches. Dieses Verfahren wende ich (ist das von negaH beschriebene) in meinem Programm an und es ist recht effektiv. Und TCanvas bietet mit der Eigenschaft ClipRect schon das Rechteck, welches gezeichnet werden müsste.
Delphi-Quellcode:
Procedure TForm1.PaintBox1Paint(Sender: TObject);
Var
lDrawRect: TRect;
Begin
If IntersectRect(lDrawRect, PaintBox1.ClientRect, Canvas.ClipRect) Then
Begin
BitBlt(p_Canvas.Handle,
lDrawRect.Left,
lDrawRect.Top,
lDrawRect.Right - lDrawRect.Left,
lDrawRect.Bottom - lDrawRect.Top,
DeinBitmap.Canvas.Handle,
lDrawRect.Left - PaintBox1.ClientRect.Left,
lDrawRect.Top - PaintBox1.ClientRect.Top,
SRCCOPY);
End;
End;
DeinBitmap ist dein Bitmap mit der Grafik als gesamtes (die Off-Screen-Bitmap)