![]() |
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 |
Re: Flimmern beim zeichnen
wenn du selbst schon mit offscreen-bitmap arbeitest, kann DoubleBuffered eher schaden als nützen.
|
Re: Flimmern beim zeichnen
habs auch ohne getestet, bringt keine verbesserung :(
|
Re: Flimmern beim zeichnen
Wozu zeichnest du noch auf ein TImage anstatt es auf ein TBitmap zu zeichnen?
|
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:
wobei Graphic vom Typ TGraphic sein muss.
Form.Canvas.Draw(0,0,Graphic)
Wenns anders geht, würd ich mich freuen! |
Re: Flimmern beim zeichnen
Zitat:
Delphi-Quellcode:
BitBlt(Form1.Canvas.Handle, 0, 0, Form1.ClientWidth, Form1.ClientHeight,
SourceCanvas.Handle, 0, 0, SRCCOPY); |
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:
Diese Zeile bewirkt, dass windows den Hintergrund nicht neu zeichnet.
panel1.controlstyle := panel1.controlstyle +[csOpaque];
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. |
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() ) |
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! |
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. |
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