Hi!
Vorneweg, es geht um ein Spiel und möchte eigene Buttons möglichst schnell anzeigen lassen.
Ich mache mir mit der Graphics32-Library ein Offscreenbitmap. Es beinhaltet alle Buttons, Hintergründe und sonstige Spielereien. Dieses zeichne ich auf die Form. Wenn z.B durch Hovern das Bitmap geändert werden muss, zeichne ich es neu. Das geht recht schnell. Das eigentlich Problem ist das Zeichnen.
Mit DoubleBufferd: Es ist auf etwas älteren System recht träge.
Ohne DoubleBufferd: Auf allen System sehr schnell. Es flackert trotz Offscreenbitmap extrem.
Ich habe zeichen das Bitmap mittels DrawTo (ist eine TBitmap32-Methode) oder BitBlt. (Macht keinen Unterschied, DrawTo macht haargenau das selbe.)
Kann ich den DoubleBuffered Effekt selber nachbauen, so das ich es auf ein Gleichgewicht optimieren kann? Ich möchte nicht erst das Projekt mit
OpenGL oder so machen.
P.S.: Was mir aufgefallen ist: Bei kleinen Bitmaps funktioniert das Offscreenbitmap. Aber bei meinem 640x480 großem flackerts immernoch.
edit: Och Mist. Jetzt hab ich den ganzen Tag rumprobiert und jetzt finde ich den Fehler selber:
Statt dem
Self.Invalide
das nutzen:
Delphi-Quellcode:
r := Self.ClientRect;
windows.InvalidateRect(Self.Handle, @r, FALSE);
(Danke an turboPASCALs GPU-Temp-Messer!
)