Delphi-PRAXiS

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 Image Flackert, wenn Cursor nicht über Formular. (https://www.delphipraxis.net/75531-image-flackert-wenn-cursor-nicht-ueber-formular.html)

Cyberbob 21. Aug 2006 03:17


Image Flackert, wenn Cursor nicht über Formular.
 
Hallo, noch ein Problem in meinem Programm.

Ich entwickle grad meinen MediaPlayer weiter, mein Problem nun, wenn der Mauscursor nicht über einem der Formulare meines Programmes liegt, Flackert die PaintBox auf dem Formular.
Die PaintBox wird über einen Timer sändig aktuallisiert um die FFT- oder die Wavedaten anzuzeigen.

Schonmal danke für alle Antworten.

Luckie 21. Aug 2006 03:31

Re: Image Flackert, wenn Cursor nicht über Formular.
 
Zeichnes du den Inhalt der Paintbox immer komplett neu?

Zeichen auf ein Bitmap im Speicher und kopiere es bei bedarf auf den Canvas der Paintbox. Das ist wesentlich performanter und das flackern sollte nicht auftreten.

Cyberbob 21. Aug 2006 04:43

Re: Image Flackert, wenn Cursor nicht über Formular.
 
Ich zeichne per

Delphi-Quellcode:
PaintBox.MoveTo(0, Height div 2);
For i := 1 To 255 do
  PaintBox.LineTo(i, FFTData[i]);
DoubleBuffered ist auch aktiv!

SirThornberry 21. Aug 2006 07:21

Re: Image Flackert, wenn Cursor nicht über Formular.
 
Du machst genau das was Luckie vermutetet hat. Bei jeder Aktion die du ausführst auf die Canvas wird die Ausgabe aktuallisiert was das Flackern verursacht. Machs so:
Delphi-Quellcode:
var lBmp: TBitmap;
begin
  lBmp := TBitmap.Create;
  try
    //Alle Aktionen auf eine Canvas/Bitmap im Speicher ausführen
    lBmp.SetSize(PaintBox.Width, PaintBox.Height);
    lBmp.Canvas.MoveTo(0, Height div 2);
    For i := 1 To 255 do
      lBmp.Canvas.LineTo(i, FFTData[i]);
    //Und jetzt das Bitmap mit einem Rutsch auf die Canvas kopieren
    BitBlt(PaintBox.Canvas.Handle, 0, 0, lBmp.Width, lBmp.Height, lBmp.Canvas.Handle, 0, 0, SRCCOPY);
  finally
    lBmp.Free;
  end;

Cyberbob 21. Aug 2006 23:19

Re: Image Flackert, wenn Cursor nicht über Formular.
 
Mein Delphi meckert bei dem Befehl SetSize! Hab ich vergessen, irgendwelche Units einzubinden.

Meflin 21. Aug 2006 23:23

Re: Image Flackert, wenn Cursor nicht über Formular.
 
Zitat:

Zitat von Cyberbob
Mein Delphi meckert bei dem Befehl SetSize! Hab ich vergessen, irgendwelche Units einzubinden.

SetSize ist eien Mehtode von TBitmap! D.h. wenn bei TBitmap nicht gemeckert wird, fehlt auch die Unit nicht (in dem Fall die Unit Graphics). Also vermutlich ein Fehler in deinem Code ;) ohn e selbigen kann ich dir den aber auch nicht sagen...


Cyberbob 21. Aug 2006 23:34

Re: Image Flackert, wenn Cursor nicht über Formular.
 
Habs jetzt mit:
Delphi-Quellcode:
lBmp.Width := frmFFT.PaintBox.Width;
lBmp.Height := frmFFT.PaintBox.Height;
bemacht, musste aber Feststellen, das das Flackern nur noch schlimmer wurde. Jetzt ist es sogar nicht mehr flüssig, wenn der mauszeiger über dem formular ist.
muss mir wohl doch nochmal das mit den threads anschauen.

Gruss
Christian

Luckie 22. Aug 2006 00:42

Re: Image Flackert, wenn Cursor nicht über Formular.
 
Zitat:

Zitat von SirThornberry
Du machst genau das was Luckie vermutetet hat. Bei jeder Aktion die du ausführst auf die Canvas wird die Ausgabe aktuallisiert was das Flackern verursacht. Machs so:
Delphi-Quellcode:

    //Und jetzt das Bitmap mit einem Rutsch auf die Canvas kopieren
    BitBlt(PaintBox.Canvas.Handle, 0, 0, lBmp.Width, lBmp.Height, lBmp.Canvas.Handle, 0, 0, SRCCOPY);

Das gehört natürlich nicht an diese Stelle in den Code, sondern da wo es gezeichnet werden soll, also in der Timer Methode und / oder im OnPaint Ereignis.

pacman1986 22. Aug 2006 00:48

Re: Image Flackert, wenn Cursor nicht über Formular.
 
ich würde das bitmap im oncreat createn und im onclose freen und das die ganze zeit benutzen das spart auch zeit und ist meiner Meinung nach auch sauberer.


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