![]() |
|||
| 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.