所谓双缓冲就是先画到内存画布(如: TBitmap), 然后再转帖到目的地.
譬如下面小程序:
procedure TForm1.FormCreate(Sender: TObject); begin Timer1.Interval := 100; Color := clWhite; end; procedure TForm1.Timer1Timer(Sender: TObject); begin Canvas.Pen.Color := Random($FFFFFF); Canvas.MoveTo(Random(ClientWidth), Random(ClientHeight)); Canvas.LineTo(Random(ClientWidth), Random(ClientHeight)); end;
改为双缓冲绘图可以是:
var bit: TBitmap; procedure TForm1.FormCreate(Sender: TObject); begin Timer1.Interval := 100; bit := TBitmap.Create; bit.Width := ClientWidth; bit.Height := ClientHeight; end; procedure TForm1.Timer1Timer(Sender: TObject); begin bit.Canvas.Pen.Color := Random($FFFFFF); bit.Canvas.MoveTo(Random(bit.Width), Random(bit.Height)); bit.Canvas.LineTo(Random(bit.Width), Random(bit.Height)); Self.Canvas.Draw(0, 0, bit); end; procedure TForm1.FormDestroy(Sender: TObject); begin bit.Free; end;