图形的重画问题(100分)

  • 主题发起人 主题发起人 xueye
  • 开始时间 开始时间
X

xueye

Unregistered / Unconfirmed
GUEST, unregistred user!
我使用PaintBox画图,但不知怎么回事,当窗口最小画后再恢复发现所画的图形不见了,我用了窗口的Onpaint方法进重画好像也不行,另外当我打开另一个窗口覆盖我的图形窗口后,再把这个窗口最小化后我的图形窗口的图形也没了
有没有人能帮帮我啊!感谢!
 
在 PaintBox 的 OnPaint 事件里面画
 
procedure TForm1.FormPaint(Sender: TObject);
begin
if //....最好判断一个窗体是否为活动状态。否则刷新时很慢
form1.Refresh
end;
 
刷新后可以重新显示图形的。
 
通常可用双缓存进行解决:用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;
 
多人接受答案了。
 
后退
顶部