通常可用双缓存进行解决:用PaintBox画图后,将PaintBox里的画图内容保存至后台的一个
画布里,在窗口(或PaintBox)重画时再将后台画布里的内容重新拷贝至PaintBox里,则
PaintBox里显示的内容一直都还在。
例如下:
type
TForm1 = class(TForm)
....
public
aBitMap :TBitMap; // 引入一个TBitMap类的成员变量,用它的canvas作为后台画布
end;
implementation
procedure TForm1.FormCreate(Sender: TObject);
begin // 创建aBitMap并进行初始化,设置背景色、大小和PaintBox一样
aBitMap :=TBitMap.Create;
aBitMap.Canvas.Brush.Color :=PaintBox1.Color;
aBitMap.Width :=PaintBox1.Width;
aBitMap.Height :=PaintBox1.Height;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin // 假如有此按钮进行矩形图绘制,则绘制完后进行拷贝,如下
PaintBox1.Canvas.Rectangle(10,10,50,50);
aBitMap.Canvas.CopyRect(aBitMap.Canvas.ClipRect,
PaintBox1.Canvas,aBitMap.Canvas.ClipRect);
// 将PaintBox的内容拷贝至后台画布aBitMap.Canvas保存
end;
procedure TForm1.PaintBox1Paint(Sender: TObject);
begin //PaintBox重画时(或者在主窗口重画时)将后台画布内容重新拷贝至PaintBox显示
PaintBox1.Canvas.CopyRect(PaintBox1.ClientRect,
aBitMap.Canvas,PaintBox1.ClientRect);
end;