HSG |
|
Vor allem bei bewegter Grafik stellt man oft ein unschönes Flackern fest. Man kann dieses Flackern vermeiden, wenn man die Grafik verdeckt erzeugt und dann schlagartig anzeigt.
..... // 1. Referenzvariable vereinbaren buffer : TBitMap; ..... // 2. BitMap-Objekt erzeugen, Größe setzen buffer := TBitMap.Create; buffer.Width := 400; buffer.Height := 300; // auf Verzerrungen achten ...... // 3. in den Puffer zeichnen with buffer.Canvas do ... ...... // 4. Puffer anzeigen Canvas.Draw(0,0,buffer); ...... // 5. Objekt freigeben buffer.Free; ......
Download des Projekts:Wanderlinie1.zip
unit uWander1; { mk, 23.4.03 } interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls; type TForm1 = class(TForm) Timer1: TTimer; procedure Timer1Timer(Sender: TObject); procedure FormCreate(Sender: TObject); private x,y1,y2,dx : integer; public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.Timer1Timer(Sender: TObject); begin // an alter Stelle löschen, dh. mit Hintergrundfarbe zeichnen Canvas.Pen.Color := clBtnFace; Canvas.MoveTo(x,y1); Canvas.LineTo(x,y2); // neues x bestimmen if (x > width-20) or (x < 10) then dx := -dx; x := x + dx; // an neuer Stelle mit Vordergrundfarbe zeichnen Canvas.Pen.Color := clRed; Canvas.MoveTo(x,y1); Canvas.LineTo(x,y2); end; procedure TForm1.FormCreate(Sender: TObject); begin x := 10; y1 := 20; y2 := 120; dx := +1; Canvas.Pen.width := 20; Canvas.MoveTo(x,y1); Canvas.LineTo(x,y2); end; end.
Download des Projekts:Wanderlinie2.zip
unit uWander2; { mk, 23.4.03 } interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls; type TForm1 = class(TForm) Timer1: TTimer; procedure Timer1Timer(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); private x,y1,y2,dx : integer; // 1. Referenzvariable vereinbaren buffer : TBitMap; public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.Timer1Timer(Sender: TObject); begin // 3. Puffer verändern with buffer.Canvas do begin // an alter Stelle löschen, dh. mit Hintergrundfarbe zeichnen Pen.Color := clBtnFace; MoveTo(x,y1); LineTo(x,y2); // neues x bestimmen if (x > width-20) or (x < 10) then dx := -dx; x := x + dx; // an neuer Stelle mit Vordergrundfarbe zeichnen Pen.Color := clRed; MoveTo(x,y1); LineTo(x,y2); end; // 4. Puffer anzeigen Canvas.Draw(0,0,buffer); end; procedure TForm1.FormCreate(Sender: TObject); begin x := 10; y1 := 20; y2 := 120; dx := +1; // 2. BitMap-Objekt erzeugen, Größe setzen buffer := TBitMap.Create; buffer.Width := Width; buffer.Height := Height; // 3. in den Puffer zeichnen with buffer.Canvas do begin Pen.width := 20; Brush.Color := clBtnFace; FillRect(Rect(0,0,width-1,height-1)); MoveTo(x,y1); LineTo(x,y2); end; // 4. Puffer anzeigen Canvas.Draw(0,0,buffer); end; procedure TForm1.FormDestroy(Sender: TObject); begin // 5. Objekt freigeben buffer.Free; end; end.