Entwickler-Ecke

Multimedia / Grafik - Flickern eliminieren


DelphiMan - So 18.05.03 18:52
Titel: Flickern eliminieren
Hallo zusammen,

ich benütze eine Paintbox ich möchte gerne jede sekunde einen ausschnitt der paintbox neuzeichnen (um eben bspw. die aktuelle sekunde graphisch darzustellen). dabei treten leider unerwünschte flicker-effekte auf, obwohl ich auch schon doublebuffered sowie invalidate gesetzt habe. Kennt jemand von euch vielleicht eine wirksame methode flickern bei neuzeichnen eines bereichs zu unterdrücken? Außerdem: wie kann man nur einen ausschnitt der paintbox neuzeichnen, ohne dabei das OnPaint-Eregnis auszulösen?
Vielen Dank im Voraus!

MfG
DelphiMan


Jack Falworth - So 18.05.03 19:28

hI,

also erstmal das mit dem einen Teil neuzeichnen geht nicht. Immer nur die ganze Paintbox. Das Problem hatte ich auch mal.

Besser finde ich, wenn man ein Image benutzt, da wird das Neuzeichnen automatisch gemacht.
Um das Flickern zu verhindern, nimm einfach ne Scrollbox, dann setz ein Image mit derselben Größe in die Scrollbox und setz dann Scrollbox.Doublebuffered auf true. Funktioniert bei meinen Programmen wunderbar.

MfG

Jack Falworth


Kostja - So 18.05.03 19:36

Ich hab das immer so gemacht, dass ich das gewünschte Bild zuerst in eine Bitmap gezeichnet hab und dann dieses Bitmap auf der Image Komponente mittels Draw dargestellt:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
var Graph: TBitmap;

implementation

procedure Form1.Create;
begin
  Graph := TBitmap.Create;
end;


procedure Zeichen;
begin
With Graph.Canvas Do
      begin

      Pen.Color:=clBlack;
      Brush.Color:= clBlack;
      Rectangle(0,0,w,h);
      //Sleep(0);
      Pen.Color:=clYellow;
      Brush.Color:=clYellow;
      Rectangle(vnext,50,vnext+100,150);

      //Sleep(0);
      end;
Image1.Canvas.Draw(0,0,Graph);
end;


Moderiert von user profile icontommie-lie: Delphi-Tags hinzugefügt