K kane Unregistered / Unconfirmed GUEST, unregistred user! 1999-04-17 #2 补充一下,象TImage那种控件在最小化后,再最大化,图象仍然存在, 但是我如果用TCanvas在Panel上画一个图形,经过刷新后,就没有了, 怎么办?我用OnPaint事件来解决,可是鼠标在Panel上不停的闪烁. 好象鼠标的移动就触发了OnPaint事件. 总之就一句话,如何使在Panel上画的图象在被其他窗口挡住或最小 化,最大话后,还存在
补充一下,象TImage那种控件在最小化后,再最大化,图象仍然存在, 但是我如果用TCanvas在Panel上画一个图形,经过刷新后,就没有了, 怎么办?我用OnPaint事件来解决,可是鼠标在Panel上不停的闪烁. 好象鼠标的移动就触发了OnPaint事件. 总之就一句话,如何使在Panel上画的图象在被其他窗口挡住或最小 化,最大话后,还存在
H huizhang Unregistered / Unconfirmed GUEST, unregistred user! 1999-04-17 #3 Hi kane, 在Windows编程中, 被遮挡的窗体当遮挡物移开后或者窗体从最小化到恢复显示的时 候都会收到WM_Paing消息. WM_Paint消息包括被遮挡的窗体以及需要重新绘制的区 域. TPanel 是不具备Canvas属性的, 故你不可能用Canvas在Panel上画图. Delphi自带 的带有Canvas属性的控件都有OnPaint事件. 鼠标的移动是不应该触发Paint的. 一 定是你所用控件相互有遮挡尔引发了WM_Paint消息. 在TImage上画的东西, 实际上是画到TImage.Picture.Bitmap上, 最小化, 最大化 后自动调用它的Paint或者Repaint方法来刷新.
Hi kane, 在Windows编程中, 被遮挡的窗体当遮挡物移开后或者窗体从最小化到恢复显示的时 候都会收到WM_Paing消息. WM_Paint消息包括被遮挡的窗体以及需要重新绘制的区 域. TPanel 是不具备Canvas属性的, 故你不可能用Canvas在Panel上画图. Delphi自带 的带有Canvas属性的控件都有OnPaint事件. 鼠标的移动是不应该触发Paint的. 一 定是你所用控件相互有遮挡尔引发了WM_Paint消息. 在TImage上画的东西, 实际上是画到TImage.Picture.Bitmap上, 最小化, 最大化 后自动调用它的Paint或者Repaint方法来刷新.
K kane Unregistered / Unconfirmed GUEST, unregistred user! 1999-04-18 #4 谢谢huizhang,我是用这样的方法的 var aCanvas:TCanvas; begin aCanvas:=TCanvas.Create; aCanvas.Handle:=GetDC(Panel1.Handle); aCanvas.Brush.Color:=clBlue; aCanvas.FillRect(Panel1.ClientRect); end; 这样,Panel就被我上色了,也可以在上面画图,但是经过遮挡或最小化, 最大化后就没有了,我如何使它再现呢
谢谢huizhang,我是用这样的方法的 var aCanvas:TCanvas; begin aCanvas:=TCanvas.Create; aCanvas.Handle:=GetDC(Panel1.Handle); aCanvas.Brush.Color:=clBlue; aCanvas.FillRect(Panel1.ClientRect); end; 这样,Panel就被我上色了,也可以在上面画图,但是经过遮挡或最小化, 最大化后就没有了,我如何使它再现呢
J jghuang Unregistered / Unconfirmed GUEST, unregistred user! 1999-04-18 #5 试试把这段代码放在form.onpaint()中.
V VC Unregistered / Unconfirmed GUEST, unregistred user! 1999-04-18 #6 to cane: 要在Panel上画画,可以在它上面放上一个PaintBox控件, 响应PaintBox的OnPaint事件在PaintBox上画....
宋 宋非 Unregistered / Unconfirmed GUEST, unregistred user! 1999-04-18 #7 1.Tpanel没有canvas属性,因次无On_Paint事件. 2.但你可以写一个简单的控件,继承自Tpanel,但可以处理WM_Paint消息. 3.添加消息处理函数有两种方法,详见Delphi帮助.(写的很清楚的说).
1.Tpanel没有canvas属性,因次无On_Paint事件. 2.但你可以写一个简单的控件,继承自Tpanel,但可以处理WM_Paint消息. 3.添加消息处理函数有两种方法,详见Delphi帮助.(写的很清楚的说).
K kane Unregistered / Unconfirmed GUEST, unregistred user! 1999-04-18 #8 to:jghuang 效果不错,但是当有别的窗口挡住时,直接点击本窗口,不会 触发Form的OnPaint事件,而且我要动态创建N个Panel放在ScrollBox 里,我希望当Panel出现在ScrollBox的可视范围内时,自己把自己画 一遍,就好象ACDSee. to:VC 因为我要创建多个,所以想尽量少用内存,不用其他控件,直接向 Panel上画。 我就想达到象ACDSee的那种效果就可以了 谢谢大家!!
to:jghuang 效果不错,但是当有别的窗口挡住时,直接点击本窗口,不会 触发Form的OnPaint事件,而且我要动态创建N个Panel放在ScrollBox 里,我希望当Panel出现在ScrollBox的可视范围内时,自己把自己画 一遍,就好象ACDSee. to:VC 因为我要创建多个,所以想尽量少用内存,不用其他控件,直接向 Panel上画。 我就想达到象ACDSee的那种效果就可以了 谢谢大家!!
K kane Unregistered / Unconfirmed GUEST, unregistred user! 1999-04-18 #9 to 宋非: 我用到了WM_Paint事件,可是因为我在过程中用到了 Paint,所以它会不停的收到WM_Paint,我又不停的画,产 生了循环,导致画面闪烁,很是难办。
L lhz Unregistered / Unconfirmed GUEST, unregistred user! 1999-04-18 #10 用一个TImage,在TImage的不同区域绘画来模拟多个控件.这种方法 最省资源,而且比较简单,连OnPaint都不用响应.
宋 宋非 Unregistered / Unconfirmed GUEST, unregistred user! 1999-04-18 #11 你是否可以在你用Paint过程中把你发的WM_PAINT消息的wparam记下来, 然后在自己定义的事件函数中鉴别一下再处理,这样就不循环了?
宋 宋非 Unregistered / Unconfirmed GUEST, unregistred user! 1999-04-18 #12 你是否可以在你用Paint过程中把你发的WM_PAINT消息的wparam记下来, 然后在自己定义的事件函数中鉴别一下再处理,这样就不循环了?
K kane Unregistered / Unconfirmed GUEST, unregistred user! 1999-04-19 #13 to 宋非: 我的Paint就是Canvas的FillRect啊,这个好象不好办