AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Canvas flackern bei VCL Styles
Thema durchsuchen
Ansicht
Themen-Optionen

Canvas flackern bei VCL Styles

Ein Thema von TTF · begonnen am 21. Sep 2013 · letzter Beitrag vom 26. Sep 2013
Antwort Antwort
Seite 1 von 2  1 2      
Der schöne Günther

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

AW: Canvas flackern bei VCL Styles

  Alt 22. Sep 2013, 14: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
Benutzerbild von TTF
TTF

Registriert seit: 19. Mai 2013
70 Beiträge
 
Delphi XE4 Enterprise
 
#2

AW: Canvas flackern bei VCL Styles

  Alt 22. Sep 2013, 21:23
Danke erstmal für die Hilfe. Ich habe den Timer nun auf 200ms zurückgesetzt. Nun sind nur noch vereinzelt Flackern(aber trotzdem zuviel) zu sehen. Es scheint wirklich mit dem Timer zusammenzuhängen, aber nicht mal darauf kann man gehen. Das Ding flackert oder nicht, wie die GPU gerade lustig ist. Bei 400ms ist das Ergebnis schon fast anschaubar, aber natürlich dauert das Zeichnen beim Laden oder resizen. Es flackert 'nur' noch alle 4-5 sekunden. Und so geht das weiter (600ms => 6-7sec). Aber das kann es kann ja irgendwie nicht sein. Ich gebe ja zu, ich habe einen Laptop und vielleicht nicht die Beste Grafikkarte, aber so ein Bisschen Wellenlinien könnte man doch schon aushalten, zumal man als liebe liebe GPU bei transparenten Fenstern(Windows aero) imho sich sogar noch ein bisschen mehr anstrengen muss, als bei den nicht transparenten.
Hat jemand ein gutes Tutorial für TChart, weil das ja sein soll?
Ich hänge mal das ganze Projekt an(ist eig nur ein Testprojekt) an:
Wegen dem doppelten Buffer.width. ja, was soll man sagen .
Falls jemand Zeit hat sich das anzuschauen, bin ich dankbar.
Angehängte Dateien
Dateityp: zip Waveform.zip (3,69 MB, 15x aufgerufen)
Quidquid id est, timeo perfossores machinae computatoriae et dona ferentes...
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#3

AW: Canvas flackern bei VCL Styles

  Alt 22. Sep 2013, 21:40
Hast du mal probiert statt PaintBox1.Refresh; wirklich PaintBox1.Invalidate; zu benutzen?

Und eventuell könnte man noch versuchen, direkt BitBlt oder StretchBlt aufzurufen, statt Canvas.Draw. (Aber erst danach)
  Mit Zitat antworten Zitat
Benutzerbild von TTF
TTF

Registriert seit: 19. Mai 2013
70 Beiträge
 
Delphi XE4 Enterprise
 
#4

AW: Canvas flackern bei VCL Styles

  Alt 23. Sep 2013, 16:02
PaintBox1.Invalidate habe ich auch schon versucht.
Von BitBlt und StretchBlt habe ich ehrlich gesgt noch nie was gehört
Quidquid id est, timeo perfossores machinae computatoriae et dona ferentes...
  Mit Zitat antworten Zitat
cltom

Registriert seit: 22. Sep 2005
230 Beiträge
 
Delphi 12 Athens
 
#5

AW: Canvas flackern bei VCL Styles

  Alt 23. Sep 2013, 16:16
Das wär echt Weltklasse, wenn einer so ein Beispiel-Projekt machen könnte, das die Benutzung der zweiten Bitmap, das blitten und wie man das mit dem Timer steuert, veranschaulicht. Ich hab's leider auch noch nicht ganz kapiert. Wo wird invalidate aufgerufen, was wird im Timer gemacht, was im OnPaint der PaintBox, wo wird geblittet, wie?

Vielleicht hat einer ein Erbarmen, das wär spitze, danke im Voraus!
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#6

AW: Canvas flackern bei VCL Styles

  Alt 23. Sep 2013, 18:36
Das wär echt Weltklasse, wenn einer so ein Beispiel-Projekt machen könnte, das die Benutzung der zweiten Bitmap, das blitten und wie man das mit dem Timer steuert, veranschaulicht. Ich hab's leider auch noch nicht ganz kapiert. Wo wird invalidate aufgerufen, was wird im Timer gemacht, was im OnPaint der PaintBox, wo wird geblittet, wie?

Vielleicht hat einer ein Erbarmen, das wär spitze, danke im Voraus!
Ist ja kein problem.
Nur ich habe kein XE.. sorry

Vielleicht bringt es was wenn du deinen eigenen DoubleBuffer erstellst?
Ka. Ob der in den Styles fehlerhaft ist.

gruss

Geändert von EWeiss (23. Sep 2013 um 18:39 Uhr)
  Mit Zitat antworten Zitat
Volker Z.

Registriert seit: 3. Dez 2012
Ort: Augsburg, Bayern, Süddeutschland
419 Beiträge
 
Delphi XE4 Ultimate
 
#7

AW: Canvas flackern bei VCL Styles

  Alt 24. Sep 2013, 00:15
Hallo,

hast Du schon mal folgendes versucht (ich beschränke mich auf das Wesentliche, ansonsten Dein Code wie gehabt)
Delphi-Quellcode:
procedure TForm1.DrawSpectrum;
begin
  // clear background
  Buffer.Canvas.Brush.Color := TStyleManager.ActiveStyle.GetStyleColor (scWindow);
  Buffer.Canvas.FillRect(Rect(0, 0, Buffer.Width, Buffer.Height));

  // Rest wie gehabt
end;
Gruß
Volker Zeller
  Mit Zitat antworten Zitat
Benutzerbild von TTF
TTF

Registriert seit: 19. Mai 2013
70 Beiträge
 
Delphi XE4 Enterprise
 
#8

AW: Canvas flackern bei VCL Styles

  Alt 24. Sep 2013, 20:26
Habe ich getestet mit dem selben Ergebnis.
Quidquid id est, timeo perfossores machinae computatoriae et dona ferentes...
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#9

AW: Canvas flackern bei VCL Styles

  Alt 25. Sep 2013, 15:52
Habe ich getestet mit dem selben Ergebnis.
Check das!
Mein Kumpel war so freundlich mich an sein XE4 zu lassen
Als Hobby Schreiber ist mir das einfach zu teuer.

gruss

Geändert von EWeiss (26. Sep 2013 um 12:38 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von TTF
TTF

Registriert seit: 19. Mai 2013
70 Beiträge
 
Delphi XE4 Enterprise
 
#10

AW: Canvas flackern bei VCL Styles

  Alt 25. Sep 2013, 20:19
Hallo EWeiss
Herzlichsten Dank, dass du dir exra die Mühe gemacht hast. Es funktioniert top.
Könntest du mir bitte noch sagen, wo meine Fehler lagen?
Danke und liebe Grüsse
TTF
Quidquid id est, timeo perfossores machinae computatoriae et dona ferentes...
  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 08:01 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