Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Zeichnen - leichtes Flimmern (https://www.delphipraxis.net/39469-zeichnen-leichtes-flimmern.html)

Gruber_Hans_12345 3. Feb 2005 10:44


Zeichnen - leichtes Flimmern
 
Hallo, ich möchte gerne einen Newsticker in mein Programm einbauen, und habe dazu im unteren Bereich ein Panel mit 1600*180 Pixel. Auf diesem Panel ist eine PaintBox. (DoubleBufferd des Panels ist eingeschaltet)

Nun wird im Intervall von 50 ms (per TTimer) eine variable (linke position runtergezählt) und Invalidate von der Paintbox aufgerufen.

im OnPaint werden dann verschiedende ZEichenroutinen aufgerufen wie
FillRect (ganzen Hintergrun löschen)
Line
TextOut ....

das ganze flimmert nun leicht (dort wo die bewegung ist, der Text nach links rutscht)

kann man das irgendwie besser machen ?

toms 3. Feb 2005 10:46

Re: Zeichnen - leichtes Flimmern
 
Hi,

Mit einem Bitmap im Speicher und bitblt

Gruber_Hans_12345 3. Feb 2005 10:58

Re: Zeichnen - leichtes Flimmern
 
Zitat:

Zitat von toms
Hi,

Mit einem Bitmap im Speicher und bitblt

Hm, dachte das genau macht DoubleBufferd ?

Elite-Koennen 8. Feb 2005 15:06

Re: Zeichnen - leichtes Flimmern
 
Moin!
Hatte ein ähnliches Problem mit TImage.
Hier findest du es

Warum verwendest du TPaintBox ? Hier wird die Zeichenfläche doch automatisch aktualisiert. D.h. nach jeder Zeichenoperation wird alles dargestellt. So siehst du kurzzeitig das durch FillRect verursachtes Vakuum.

Elite-Koennen 8. Feb 2005 15:08

Re: Zeichnen - leichtes Flimmern
 
Ach ja, DoubleBuffered auf True verhindert, dass die Zeichenfläche des Formulars kurzzeitig zum Vorschein kommt.

stoxx 8. Feb 2005 15:20

Re: Zeichnen - leichtes Flimmern
 
siehe hier:

http://www.pjh2.de/delphi/units/index.php?l=de

Muetze1 8. Feb 2005 15:39

Re: Zeichnen - leichtes Flimmern
 
Moin!

Grundlegendes:

1. Kein DoubleBuffered verwenden
2. BitBlt verwenden mit einem Hintergrundbild
3. PaintBox verwenden ist ok, dann im OnPaint aber auch mit InterSectRect() und Canvas.ClipRect arbeiten
4. FillRect und BitBlt mit dem angegebenen ClipRect des Canvas beschränken

Und damit das ganze auch flimmerfrei sein kann nicht Invalidate verwenden (was bei einer TPaintBox das Invalidate des gesamten Parents auslösen würde (somit der Form höchst wahrscheinlich) sonder mit InvalidateRect() auf das Rechteck der TPaintBox beschränkt.

Dadurch wird das ganze optimierter, flimmerfrei und vor allem Resourcen schonender. DoubleBuffer ist wirklich langsam.

MfG
Muetze1


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:35 Uhr.

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