7 7030 Unregistered / Unconfirmed GUEST, unregistred user! 2002-01-17 #1 设计一迭件(从TGraphicControl派生)时碰到如下问题:如何清空当前的画布? 控件是透明,因此用fillrect(rect)就好象不行了,不知还有何法
0 0738 Unregistered / Unconfirmed GUEST, unregistred user! 2002-01-18 #2 清空后的效果你想达到什么呢?你不会是想连父窗口的颜色也给清了吧,否则的话,用 FillRect前将Brush定义好应该没问题啊
7 7030 Unregistered / Unconfirmed GUEST, unregistred user! 2002-01-19 #5 to zhihuali:设计控件时能canvas.assign(nil)吗?
7 7030 Unregistered / Unconfirmed GUEST, unregistred user! 2002-01-20 #7 一用就出错了,错误信息:can't assign nil to Tcanvascontrol!
0 0738 Unregistered / Unconfirmed GUEST, unregistred user! 2002-01-21 #8 我还是没明白你意思,不知道你所谓的清空后的效果怎样,如果你是想当前画布清空后让他 显示为父窗口的底色(因为它透明),你干脆直接CopyRect父窗口得了
7 7030 Unregistered / Unconfirmed GUEST, unregistred user! 2002-01-21 #10 to 0738:我想要达到的效果,cm_mouseenter发生时,显示一图像,当cm_mouseleave 发生时又显示另一图像,现在就是当cm_mouseenter时,不能清空底图,我要的是透明效果 原码请看: http://www.delphibbs.com/delphibbs/dispq.asp?lid=872568
to 0738:我想要达到的效果,cm_mouseenter发生时,显示一图像,当cm_mouseleave 发生时又显示另一图像,现在就是当cm_mouseenter时,不能清空底图,我要的是透明效果 原码请看: http://www.delphibbs.com/delphibbs/dispq.asp?lid=872568
0 0738 Unregistered / Unconfirmed GUEST, unregistred user! 2002-01-22 #11 我看了你的源码,在procedure ticustombutton.CMMouseEnter(var AMsg: TMessage); 中有下面的代码: Frame3d(Canvas, MainRect, FColorHighLight,FColorShadow,Fravno1);//lk canvas.Brush.Style :=bsclear; Canvas.FillRect(MainRect); 你将Canvas.Brush.Style := bsClear这句去掉就行了
我看了你的源码,在procedure ticustombutton.CMMouseEnter(var AMsg: TMessage); 中有下面的代码: Frame3d(Canvas, MainRect, FColorHighLight,FColorShadow,Fravno1);//lk canvas.Brush.Style :=bsclear; Canvas.FillRect(MainRect); 你将Canvas.Brush.Style := bsClear这句去掉就行了
7 7030 Unregistered / Unconfirmed GUEST, unregistred user! 2002-01-22 #12 to 0738: 照你所说的去掉的话,控件就有底色了,如放在一个Image上,就不是透明的效果了
0 0738 Unregistered / Unconfirmed GUEST, unregistred user! 2002-01-26 #14 按照你的设计思路我暂时还解决不了你的问题,不过你可以试试下面的方式,我试了一下可以 达到你的效果: 1、定义一个变量MyFlag用来表明应该画什么 2、修改Paint过程调用DrawGlyph的部分 if MyFlag = 应该调用DrawGlyph then DrawGlyph; if MyFlag = 应该调用DrawGlyphHot then DrawGlphHot; ....... 3、修改CMMouseEnter、CMMouseLeave等会影响画图的部分 例如CMMouseEnter,MyFlag = 应该调用DrawGlyphHot;Invalidate; CMMouseLeave,MyFlag = 应该调用DrawGlyph;Invalidate; 不过这样的话,因为每次都重画,效率可能会低些,但暂时没什么好办法了
按照你的设计思路我暂时还解决不了你的问题,不过你可以试试下面的方式,我试了一下可以 达到你的效果: 1、定义一个变量MyFlag用来表明应该画什么 2、修改Paint过程调用DrawGlyph的部分 if MyFlag = 应该调用DrawGlyph then DrawGlyph; if MyFlag = 应该调用DrawGlyphHot then DrawGlphHot; ....... 3、修改CMMouseEnter、CMMouseLeave等会影响画图的部分 例如CMMouseEnter,MyFlag = 应该调用DrawGlyphHot;Invalidate; CMMouseLeave,MyFlag = 应该调用DrawGlyph;Invalidate; 不过这样的话,因为每次都重画,效率可能会低些,但暂时没什么好办法了
卷 卷起千堆雪tyn Unregistered / Unconfirmed GUEST, unregistred user! 2002-01-26 #15 清空画布这样来 : Canvas.FillRect(Canvas.ClipRect);
0 0738 Unregistered / Unconfirmed GUEST, unregistred user! 2002-01-26 #16 to:卷起千堆雪tyn Canvas.FillRect(Canvas.ClipRect);好像不行呢,除非能取得它本身所盖住的父窗口 的位图
G gbh Unregistered / Unconfirmed GUEST, unregistred user! 2002-01-26 #17 我是这样做的: xxx.canvas.bitmap:=nil; 而且从没出错。
D donkey Unregistered / Unconfirmed GUEST, unregistred user! 2002-01-27 #18 我也遇到过这个问题,清空和fillrect是完全不同的不信你保存到文件试试看?直接把 Canvas.bitmap或canvas.graphi赋为nil就可以了.
7 7030 Unregistered / Unconfirmed GUEST, unregistred user! 2002-01-29 #20 to gbh,donkey:canvas有bitmap或graphic属性吗? 0738的方法还能达到效果