![]() |
Komponente flackert trotz BitBlt
Liste der Anhänge anzeigen (Anzahl: 1)
Hi DP'ler!
Als 'leichte' Anfängerübung hab ich mir vorgenommen, ein "Vier Gewinnt" Spiel in Form einer Komponente zu schreiben, was bisher auch ganz gut klappt. (siehe Anhang :wink:) Aber: Ich bekomme es nicht hin, dass die Komponente flimmerfrei angezeigt wird. Trotz Bitmap-Buffer und BitBlt. Kann ich evtl. irgendwie verhindern, dass etwas angezeigt wird, bevor das Bild komplett aufgebaut wurde? Ähnlich wie es TImage macht (?). Etwas schnelleres wie BitBlt ohne DirectX gibt's wohl nicht. -Dani |
Re: Komponente flackert trotz BitBlt
hast dus schon mit DoubleBuffered := true; probiert ?
Das ist allerdings langsamer... |
Re: Komponente flackert trotz BitBlt
Macht das denn noch Sinn wenn ich bereits ein Puffer-Bitmap zum Zeichnen benutze?
|
Re: Komponente flackert trotz BitBlt
nimm doch einfach n Timage :)
.. kannst ja die komponente trotzdem universal halten indem du einfach nur das bitmap vom image benutzt.. achja das direct draw von directx ( delphix ) is echt easy zu usen.. einfach alles hinzeichen auf den canvas.. dann flip; und schon is das ding flickerfree |
Re: Komponente flackert trotz BitBlt
Okay danke mal ;)
DelhiX fände ich ein bischen übertrieben für den Zweck, also wird wohl DoubleBuffered reichen müssen... |
Re: Komponente flackert trotz BitBlt
Hallo Dani,
natürlich ist DoubleBufferd völlig übertrieben. Ein TImage ist ebenfalls ein ziemliches Schwergewicht. Dein Problem ist sehr wahrscheinlich Invalidate. Ruf in RePaintAll mal Paint auf bzw. ersetze überall Invalidate mit Paint.
Delphi-Quellcode:
procedure TVierGewinnt.RePaintAll;
begin DrawBackGround; DrawAllSeperators; DrawFrame; DrawAllCoins; Paint; end; |
Re: Komponente flackert trotz BitBlt
Mhh, an Invalidate hab ich gar nicht gedacht...
Wenn ich jedoch Invalidate durch Paint ersetzte, tritt beim Erstellen der Komponente folgender Fehler auf: Exception EInvalidOperation : "Element '' hat kein übergeordnetes Fenster."
Delphi-Quellcode:
Edit: Sieht so aus, als müsste die Komponente wissen, wer ihr Parent ist... seltsamerweise ging das vorher ohne :gruebel:
procedure TVierGewinnt.Paint;
begin If Visible then BitBlt(Canvas.Handle, 0, 0, Bmp.Width, Bmp.Height, BMP.Canvas.Handle, 0, 0, SRCCOPY); <--- Hier kommt der Fehler //inherited; end; Ist zwar nicht besonders elegant, aber ich nehm halt einfach mal an, dass der Owner auch gleichzeitig die Parentfunktion übernimmt :-/
Delphi-Quellcode:
Dafür kann man DoubleBuffered jetzt weglassen, es lag tatsächlich an Invalidate! Danke Jens Schumann :thuimb:
constructor TVierGewinnt.Create(AOwner: TComponent);
begin inherited; BMP := TBitmap.Create; try Parent := AOwner as TWinControl; except Destroy; exit; end; {....} |
Re: Komponente flackert trotz BitBlt
Zitat:
|
Re: Komponente flackert trotz BitBlt
Stimmt natürlich, mich wundert nur, dass es eine ganze Zeit fehlerfrei ohne die Angabe eines Parents lief :shock:
|
Re: Komponente flackert trotz BitBlt
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:29 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz