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
Benutzerbild von TTF
TTF

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

Canvas flackern bei VCL Styles

  Alt 21. Sep 2013, 15:52
Hallo,
Mein Problem ist Folgendes:
Ich zeichne per Canvas auf eine PaintBox, wenn ich aber einen anderen VCL-Style als den Windows Standard Style verwende werde ich trotz der eingeschalteten Property DoubleBuffered mit einem hässlichen Flackern konfrontiert. Im Windows Style läuft aber alles flüssig.
Weiss jemand woran das liegen könnte beziehungsweise, wie man das beheben könnte? Oder ist das ein Bug der IDE?
Bin für jede Antwort dankbar
Liebe Grüsse
TTF
Quidquid id est, timeo perfossores machinae computatoriae et dona ferentes...
  Mit Zitat antworten Zitat
Volker Z.

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

AW: Canvas flackern bei VCL Styles

  Alt 21. Sep 2013, 23:17
Hallo,

Zitat:
Ich zeichne per Canvas auf eine PaintBox, [...]
Was zeichnest Du?
Zitat:
Bin für jede Antwort dankbar
Wir wären für jeden weiteren Input dankbar.

Ich lege mir eine Paintbox und ImageList (14 Bitmaps 256x256 Pixel) auf ein Formular und lass mir mal was in der Paintbox zeichnen
Delphi-Quellcode:
procedure TForm1.PaintBox1Paint(Sender: TObject);
var
  i, j : Integer;
begin
  for i := 0 to 10 do
    for j := 0 to ImageList1.Count - 1 do
      ImageList1.Draw (PaintBox1.Canvas, Random (Width), Random (Height), j, True)
end;
egal welchen Style ich verwende, da flackert nix, da ruckelt nix.

Zurück zur Frage: Was zeichnest Du?

Code wäre da sicherlich recht hilfreich.

Gruß
Volker Zeller
  Mit Zitat antworten Zitat
Benutzerbild von TTF
TTF

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

AW: Canvas flackern bei VCL Styles

  Alt 22. Sep 2013, 00:44
Danke für die Antwort. Ich zeichne eine Waveform mithilfe der Bass.dll. Ganz ähnlich wie im custloop Sample.
Vielleicht liegt es daran, dass ich das ganze mit einem Timer recht häufig update. Ich wüsste jedoch nicht, warum es dann nur bei Windows style funktionieren sollte.
Der Vorgang dabei ist folgender:
Ich scanne die Peaks von der Audiodatei und übertrage dann Linie für Linie die Waveform auf ein TBitmap, das ich dann in die PaintBox malen lasse.
Ist daran etwas falsch oder so?
Code kann ich Grade leider nicht geben, da ich nicht am Computer bin. Ich glaube ohnehin nicht, dass es auf ein Detail im Code ankommt, sondern auf das Prinzip. Falls es aber nötig ist, editiere ich gerne noch etwas rein.
Liebe Grüsse
TTF
Quidquid id est, timeo perfossores machinae computatoriae et dona ferentes...
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#4

AW: Canvas flackern bei VCL Styles

  Alt 22. Sep 2013, 01:48
Flackern + TPaintbox = Es wird sehr wahrscheinlich nicht im OnPaint der Paintbox gezeichnet. Richtig wäre es daher im Timer (der kann praktisch nicht zu schnell sein) nur das das Bitmap neu zu zeichnen, und dann TPaintbox.Invalidate aufzurufen. Im TPaintbox.OnPaint Ereignis sollte dann das Bitmap auf den Paintbox-Canvas geblittet werden. Das wäre auch unabhängig von Styles der saubere Weg.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
cltom

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

AW: Canvas flackern bei VCL Styles

  Alt 22. Sep 2013, 07:09
Flackern + TPaintbox = Es wird sehr wahrscheinlich nicht im OnPaint der Paintbox gezeichnet. Richtig wäre es daher im Timer (der kann praktisch nicht zu schnell sein) nur das das Bitmap neu zu zeichnen, und dann TPaintbox.Invalidate aufzurufen. Im TPaintbox.OnPaint Ereignis sollte dann das Bitmap auf den Paintbox-Canvas geblittet werden. Das wäre auch unabhängig von Styles der saubere Weg.
Auch wenn das schon im Großen und Ganzen gut beschrieben ist, ein Codebeispiel wäre super dazu. So ganz nachvollziehen kann ich es noch nicht. Du erzeugtst eine zweite Bitmap, auf die zeichnet man im Timer-Event? Und die kopiert man im OnPaint der Paintbox?

Geändert von cltom (22. Sep 2013 um 07:12 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von TTF
TTF

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

AW: Canvas flackern bei VCL Styles

  Alt 22. Sep 2013, 08:16
Also das Codeschnipsel:

Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  if Buffer.Width <> PaintBox1.Width then
  begin
    Buffer.Width := PaintBox1.Width;
    StartPeakScan;
  end
  else
  begin
    Buffer.Width := PaintBox1.Width;
    Buffer.Height := PaintBox1.Height;
    DrawSpectrum;
  end;

  PaintBox1.Refresh;
end;

//und dann Painten

procedure TForm1.PaintBox1Paint(Sender: TObject);
begin
  PaintBox1.Canvas.Draw(0, 0, Buffer);
end;
Weiss jemand woran es liegen könnte?
Quidquid id est, timeo perfossores machinae computatoriae et dona ferentes...
  Mit Zitat antworten Zitat
Antwort Antwort


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 13:56 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz