问一个Image canvas 重绘的问题

wangwei244157887 2014-03-05 09:22:26
为什么使用窗体的画布进行重绘的时候,窗体一刷新,上面画的内容就消息了,而用Image的画布重会的东西,当窗体刷新的时候,却不消息呢
...全文
1687 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
华芝塔尼欧 2015-08-25
  • 打赏
  • 举报
回复
引用 6 楼 fengyehudie 的回复:
我已经将绘线代码放到onpaint事件中,但是被遮挡之后线条依然不见了哦 。这不太科学哦。 procedure TMainWindow.FormPaint(Sender: TObject); var pen:TPen; tmp:integer; begin MyPaint.DrawCanvas(PageIndex); tmp := CKBox_Querry.Top - 2; pen := TPen.Create; pen.Color := clblack; pen.Style := PSSOLID; pen.Width := 10; MainWindow.Canvas.MoveTo(0,tmp); MainWindow.Canvas.LineTo(700,tmp); end;
我就是在某个选择框上边画一条线分隔成上下部分。这代码是在 onPaint中实现的。结果不行哦
华芝塔尼欧 2015-08-25
  • 打赏
  • 举报
回复
我已经将绘线代码放到onpaint事件中,但是被遮挡之后线条依然不见了哦 。这不太科学哦。 procedure TMainWindow.FormPaint(Sender: TObject); var pen:TPen; tmp:integer; begin MyPaint.DrawCanvas(PageIndex); tmp := CKBox_Querry.Top - 2; pen := TPen.Create; pen.Color := clblack; pen.Style := PSSOLID; pen.Width := 10; MainWindow.Canvas.MoveTo(0,tmp); MainWindow.Canvas.LineTo(700,tmp); end;
「已注销」 2014-03-07
  • 打赏
  • 举报
回复
引用 4 楼 sololie 的回复:
绘图的代码放到Form的OnPaint(WM_PAINT消息)事件处理函数中,然后Form每次收到需要重绘的消息后就会不停地绘制,所以图像不会消失,如果你不在OnPaint事件中处理,那么只是绘制一次,图像被遮住后需要重绘就会抹掉前面画的东西。同理IMAGE控件中已经内部在WM_PAINT消息中绘图了,你指定了一个图像给它,它就会处理了。你可以先阅读windows消息机制相关的书籍内容。
恩,谢谢,你这样讲我明白些
sololie 2014-03-06
  • 打赏
  • 举报
回复
绘图的代码放到Form的OnPaint(WM_PAINT消息)事件处理函数中,然后Form每次收到需要重绘的消息后就会不停地绘制,所以图像不会消失,如果你不在OnPaint事件中处理,那么只是绘制一次,图像被遮住后需要重绘就会抹掉前面画的东西。同理IMAGE控件中已经内部在WM_PAINT消息中绘图了,你指定了一个图像给它,它就会处理了。你可以先阅读windows消息机制相关的书籍内容。
「已注销」 2014-03-05
  • 打赏
  • 举报
回复
那Image没有刷新事件,不会像窗体那样重绘,清除Canvas上的东西吗?
  • 打赏
  • 举报
回复
窗体提刷新的时候会把背景刷掉重新画,你要用窗体的重绘的话,需要在onpaint事件里面画
  • 打赏
  • 举报
回复
你可以看看Timage的源码,GetCanvas方法,还有Paint方法,你画的Canvas跟显示到Timage的Canvas是不一样的,刷新只会刷新显示的Canvas,画的Canvas没刷新

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi GAME,图形处理/多媒体
社区管理员
  • GAME,图形处理/多媒体社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧