Delphi-PRAXiS
Seite 1 von 2  1 2      

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

Mjöllner 24. Nov 2006 06:24


Flimmern beim zeichnen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo erst mal
ich arbeite in der Schule gerade an einem Projekt zum darstellen von 3D-Objekten.
Es ist komplett Vektor-basierend.

Jedenfalls kommt es beim zeichnen immer wieder zu starken flackern.

Ich hab doublebuffered auf true gesetzt.
Ich zeichne erst auf ein TImage und setze das dann direkt aufs Form.

Ich weiß nicht,warum es trotzdem flackert. ICh zeichne bei meinem Beispielobjekt etwa 530 Punkte. Daran sollte es aber denke ich nicht liegen.
Ich vermute, ich hab die diese Offset screen methode einfach noch nich vertanden :(

Der Quelltext ist beigefügt.

Danke für die Hilfe,
mfg
Mjöllner

DGL-luke 24. Nov 2006 07:35

Re: Flimmern beim zeichnen
 
wenn du selbst schon mit offscreen-bitmap arbeitest, kann DoubleBuffered eher schaden als nützen.

Mjöllner 24. Nov 2006 07:50

Re: Flimmern beim zeichnen
 
habs auch ohne getestet, bringt keine verbesserung :(

Muetze1 24. Nov 2006 09:56

Re: Flimmern beim zeichnen
 
Wozu zeichnest du noch auf ein TImage anstatt es auf ein TBitmap zu zeichnen?

Mjöllner 24. Nov 2006 11:14

Re: Flimmern beim zeichnen
 
ich denke genau da liegt das Problem.
ich wusste nicht, wie ich dem Formular diese Bitmap überhelfen kann.

Ich habs bloß so gesehen:
Delphi-Quellcode:
Form.Canvas.Draw(0,0,Graphic)
wobei Graphic vom Typ TGraphic sein muss.
Wenns anders geht, würd ich mich freuen!

Aenogym 24. Nov 2006 11:59

Re: Flimmern beim zeichnen
 
Zitat:

Zitat von Mjöllner
Wenns anders geht, würd ich mich freuen!

Delphi-Quellcode:
  BitBlt(Form1.Canvas.Handle, 0, 0, Form1.ClientWidth, Form1.ClientHeight,
         SourceCanvas.Handle, 0, 0, SRCCOPY);

kolbaschedder 24. Nov 2006 12:13

Re: Flimmern beim zeichnen
 
Das Flimmern kommt daher, dass Windows immer zuerst den Hintergrund zeichnet, der dann wieder übermalt wird.

Ich würde das ganze auf ein Panel zeichnen.

in der FormCreate folgende zeile einfügen.

Delphi-Quellcode:
panel1.controlstyle := panel1.controlstyle +[csOpaque];
Diese Zeile bewirkt, dass windows den Hintergrund nicht neu zeichnet.

Das Kopieren des Bitmap auf das Panel erfolgt dann in der

Panel1.onPaint;

neu zeichnen nie durch den direkten Aufruf von onPaint erzwingen, sondern

panel1.invalidate;

aufrufen.

kolbaschedder 24. Nov 2006 12:26

Re: Flimmern beim zeichnen
 
Ok, ich hab mal dein Programm runtergeladen. Es reicht völlig, wenn du den direkten aufruf von

zeichnen;

durch

invalidate;

ersetzt. (ausser natürlich in der FormPaint() )

Mjöllner 24. Nov 2006 12:39

Re: Flimmern beim zeichnen
 
nett das du nochmal was geschrieben hast, ich bin nämlich gerade daran gescheitert, dieses Panel in meni Programm einzufügen :D

Mit dem invalidate ist schon viel getan! Es laufen zwar immer noch graue Balken durchs Bild, aber es sieht schon besser aus. Jetzt werd ich mich mal darum kümmern, das restliche Programm effektiver zu gestalten, dann siehts bestimmt auch wieder besser aus!


Vielen dank erst mal an alle, die geholfen haben!

kolbaschedder 24. Nov 2006 14:07

Re: Flimmern beim zeichnen
 
Bei mir läuft es absolut flimmerfrei. Schau mal nach, ob du alle aufrufe deiner Zeichnen-Routine durch "Invalidate" ersetzt hast.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:21 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