AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Komponente flackert trotz BitBlt

Ein Thema von Dani · begonnen am 2. Jul 2004 · letzter Beitrag vom 2. Jul 2004
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Dani
Dani

Registriert seit: 19. Jan 2003
732 Beiträge
 
Turbo Delphi für Win32
 
#1

Komponente flackert trotz BitBlt

  Alt 2. Jul 2004, 16:36
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 )

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
Angehängte Dateien
Dateityp: zip viergewinnt_595.zip (4,7 KB, 24x aufgerufen)
Dani H.
  Mit Zitat antworten Zitat
MrKnogge

Registriert seit: 9. Jun 2003
Ort: Pforzheim
2.458 Beiträge
 
Delphi 2007 Professional
 
#2

Re: Komponente flackert trotz BitBlt

  Alt 2. Jul 2004, 16:42
hast dus schon mit DoubleBuffered := true; probiert ?
Das ist allerdings langsamer...
Christian Bootz
Einstein ist tot, Newton ist tot,
und mir ist auch schon ganz schlecht...
  Mit Zitat antworten Zitat
Benutzerbild von Dani
Dani

Registriert seit: 19. Jan 2003
732 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Komponente flackert trotz BitBlt

  Alt 2. Jul 2004, 16:46
Macht das denn noch Sinn wenn ich bereits ein Puffer-Bitmap zum Zeichnen benutze?
Dani H.
  Mit Zitat antworten Zitat
supermuckl

Registriert seit: 1. Feb 2003
1.340 Beiträge
 
FreePascal / Lazarus
 
#4

Re: Komponente flackert trotz BitBlt

  Alt 2. Jul 2004, 17:04
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
Das echte Leben ist was für Leute...
... die im Internet keine Freunde finden!
  Mit Zitat antworten Zitat
Benutzerbild von Dani
Dani

Registriert seit: 19. Jan 2003
732 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Komponente flackert trotz BitBlt

  Alt 2. Jul 2004, 17:31
Okay danke mal
DelhiX fände ich ein bischen übertrieben für den Zweck, also wird wohl DoubleBuffered reichen müssen...
Dani H.
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#6

Re: Komponente flackert trotz BitBlt

  Alt 2. Jul 2004, 18:10
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;
I come from outer space to save the human race
  Mit Zitat antworten Zitat
Benutzerbild von Dani
Dani

Registriert seit: 19. Jan 2003
732 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Komponente flackert trotz BitBlt

  Alt 2. Jul 2004, 20:01
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

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
Dani H.
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#8

Re: Komponente flackert trotz BitBlt

  Alt 2. Jul 2004, 20:37
Zitat von Dani:
Edit: Sieht so aus, als müsste die Komponente wissen, wer ihr Parent ist... seltsamerweise ging das vorher ohne
Ein TGraphicControl braucht doch immer einen Parent. Min das Formular. Worauf sollte es sonst gezeichnet werden.?
I come from outer space to save the human race
  Mit Zitat antworten Zitat
Benutzerbild von Dani
Dani

Registriert seit: 19. Jan 2003
732 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: Komponente flackert trotz BitBlt

  Alt 2. Jul 2004, 21:01
Stimmt natürlich, mich wundert nur, dass es eine ganze Zeit fehlerfrei ohne die Angabe eines Parents lief
Dani H.
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#10

Re: Komponente flackert trotz BitBlt

  Alt 2. Jul 2004, 21:04
Zitat von Dani:
Stimmt natürlich, mich wundert nur, dass es eine ganze Zeit fehlerfrei ohne die Angabe eines Parents lief
Mich auch
I come from outer space to save the human race
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:49 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