doubleBuffered ist eigentlich nur notwendig wenn du wirklich Komponenten wandern lässt. Dies hat allerdings den Nachteil das die Auslasung sehr hoch werden kann. Denn sobald du irgend eine Komponente (TImage etc.) bewegst wird sofort neu gezeichnet. Wenn du also 10 Dingen nacheinander bewegst (die Position änderst) wird 10 mal neu gezeichnet.
Um eine ordentliche Performance zu erreichen hab ich es bisher so gemacht:
- Eine Displaykomponente
- eine Bildkomponente (von TComponent abgeleitet)
Die Bildkoponenten haben das property Display wo die Displaykomponente zugewiesen werden kann.
Wenn sich das bild ändert (oder die Position) sagt diese Komponente einfach der Displaykomponente das diese sich neu zeichnen müsste (inklussive aller Bildkomponenten die sich darauf darstellen). Die Displaykomponente zeichnet jetzt aber nicht sofort alle Bildkomponenten sondern setzt einfach ein Flag das neu gezeichnet werden müsste.
Delphi-Quellcode:
procedure TDisplay.CheckRedrawTimer(Sender: TObject);
begin
if (lastdraw + 40000 < GetTickCount()) and (fNeedRedraw) then
begin
lastdraw := GetTickCount();
Invalidate();
end;
end;
Wie man genau so etwas macht ist eben eine Sache des Programmierers. Programmieren heißt ja nicht einfach nur tippen sondern sich auch Gedanken zu machen wie man etwas am besten umsetzt.