Einzelnen Beitrag anzeigen

Der schöne Günther

Registriert seit: 6. Mär 2013
6.157 Beiträge
 
Delphi 10 Seattle Enterprise
 
#9

AW: Canvas flackern bei VCL Styles

  Alt 22. Sep 2013, 15:20
Das habe ich nirgends geschrieben. Ich habe geschrieben: if Buffer.Width <> PaintBox1.Width then Buffer.Width := Paintbox1.Width [...]
Ja, und im Else-Zweig schreibst du es nochmal.

Delphi-Quellcode:
if Buffer.Width <> PaintBox1.Width then
   begin
     Buffer.Width := PaintBox1.Width; <-- Wenn ungleich, ...
     StartPeakScan;
   end
   else
   begin
     Buffer.Width := PaintBox1.Width; <-- Wenn gleich, dann auch
     Buffer.Height := PaintBox1.Height;
     DrawSpectrum;
   end;

Ich habe nur leider noch nie mit TChart gearbeitet, daher bräuchte ich hier auch wieder eine Erklärung
Ich weiß nicht, wieviel du mit grafischen Anzeigen und Diagrammen machst, aber ich denke auf jeden Fall, das sich das lohnt. Es ist eine tolle Komponente die sich um das Zeichnen an sich vollständig kümmert. (Automatische oder manuelle) Achsenskalierung, Linien, Punkte, Balken, was auch immer. Eigentlich ist schon in der normalen Variante alles drin. Ich weiß nicht ob bei den Delphi-Beispielen etwas dabei ist, aber ich hatte mit TChart auch erst Null Erfahrung aber nach keinen 10 Minuten weiß man, wie es geht.
Ich schwafele nur und kann kein konkretes Tutorial geben, würde aber trotzdem mit Nachdruck empfehlen, da bei naher Gelegenheit unbedingt reinzuschauen. Ich finde, man kann damit wirklich eine große Menge Zeit sparen!


Blöd mit der Paintbox. Meine einzige Erklärung wäre gewesen, dass das Zeichnen des Formulars wegen den Stilen entsprechend länger dauert und dein Timer zu oft feuert. Kannst du den vlt. etwas herunterdrehen? Vielleicht könntest du die Paintbox manuell einfrieren? Wenn ich es richtig in Erinnerung habe, könntest du, an der VCL vorbei, mittels SendMessage nach (oder vor?) der Neuberechnung ein WM_SETREDRAW mit LParam = 0 zum Einfrieren und im onPaint wieder mit 1 zum Aufwachen schicken.

Ich sehe nur, dass ich in meiner Anwendung bestimmt bald ein Dutzend TCharts habe und die funktionieren auch beim Live-Wechsel des VCL-Stils weiterhin und flackern nicht.

Vielleicht kannst du mit dem Debugger durchwandern und finden, wo bzw. wann es flackert? Wie hängt die Timer-Geschwindigkeit damit zusammen? Statt Paintbox.Refresh mal PaintBox.Invalidate probiert?
  Mit Zitat antworten Zitat