Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Komponente flackert trotz BitBlt (https://www.delphipraxis.net/25195-komponente-flackert-trotz-bitblt.html)

Dani 2. Jul 2004 15:36


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

MrKnogge 2. Jul 2004 15:42

Re: Komponente flackert trotz BitBlt
 
hast dus schon mit DoubleBuffered := true; probiert ?
Das ist allerdings langsamer...

Dani 2. Jul 2004 15:46

Re: Komponente flackert trotz BitBlt
 
Macht das denn noch Sinn wenn ich bereits ein Puffer-Bitmap zum Zeichnen benutze?

supermuckl 2. Jul 2004 16:04

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

Dani 2. Jul 2004 16:31

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...

Jens Schumann 2. Jul 2004 17:10

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;

Dani 2. Jul 2004 19:01

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:
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;
Edit: Sieht so aus, als müsste die Komponente wissen, wer ihr Parent ist... seltsamerweise ging das vorher ohne :gruebel:

Ist zwar nicht besonders elegant, aber ich nehm halt einfach mal an, dass der Owner auch gleichzeitig die Parentfunktion übernimmt :-/

Delphi-Quellcode:
constructor TVierGewinnt.Create(AOwner: TComponent);
begin
  inherited;

 BMP := TBitmap.Create;
 try
  Parent := AOwner as TWinControl;
 except
  Destroy;
  exit;
 end;

{....}
Dafür kann man DoubleBuffered jetzt weglassen, es lag tatsächlich an Invalidate! Danke Jens Schumann :thuimb:

Jens Schumann 2. Jul 2004 19:37

Re: Komponente flackert trotz BitBlt
 
Zitat:

Zitat von Dani
Edit: Sieht so aus, als müsste die Komponente wissen, wer ihr Parent ist... seltsamerweise ging das vorher ohne :gruebel:

Ein TGraphicControl braucht doch immer einen Parent. Min das Formular. Worauf sollte es sonst gezeichnet werden.?

Dani 2. Jul 2004 20:01

Re: Komponente flackert trotz BitBlt
 
Stimmt natürlich, mich wundert nur, dass es eine ganze Zeit fehlerfrei ohne die Angabe eines Parents lief :shock:

Jens Schumann 2. Jul 2004 20:04

Re: Komponente flackert trotz BitBlt
 
Zitat:

Zitat von Dani
Stimmt natürlich, mich wundert nur, dass es eine ganze Zeit fehlerfrei ohne die Angabe eines Parents lief :shock:

Mich auch :shock:


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:29 Uhr.
Seite 1 von 2  1 2      

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