如何清空画布的内容?(100分)

  • 主题发起人 主题发起人 7030
  • 开始时间 开始时间
7

7030

Unregistered / Unconfirmed
GUEST, unregistred user!
设计一迭件(从TGraphicControl派生)时碰到如下问题:如何清空当前的画布?
控件是透明,因此用fillrect(rect)就好象不行了,不知还有何法
 
清空后的效果你想达到什么呢?你不会是想连父窗口的颜色也给清了吧,否则的话,用
FillRect前将Brush定义好应该没问题啊
 
怎么定义?
 
Canvas.Assign(Nil);
 
to zhihuali:设计控件时能canvas.assign(nil)吗?
 
为何不可?
 
一用就出错了,错误信息:can't assign nil to Tcanvascontrol!
 
我还是没明白你意思,不知道你所谓的清空后的效果怎样,如果你是想当前画布清空后让他
显示为父窗口的底色(因为它透明),你干脆直接CopyRect父窗口得了
 
to 0738:我想要达到的效果,cm_mouseenter发生时,显示一图像,当cm_mouseleave
发生时又显示另一图像,现在就是当cm_mouseenter时,不能清空底图,我要的是透明效果
原码请看: http://www.delphibbs.com/delphibbs/dispq.asp?lid=872568
 
我看了你的源码,在procedure ticustombutton.CMMouseEnter(var AMsg: TMessage);
中有下面的代码:
Frame3d(Canvas, MainRect, FColorHighLight,FColorShadow,Fravno1);//lk
canvas.Brush.Style :=bsclear;
Canvas.FillRect(MainRect);
你将Canvas.Brush.Style := bsClear这句去掉就行了
 
to 0738:
照你所说的去掉的话,控件就有底色了,如放在一个Image上,就不是透明的效果了
 
我下午再帮你看看
 
按照你的设计思路我暂时还解决不了你的问题,不过你可以试试下面的方式,我试了一下可以
达到你的效果:
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;
不过这样的话,因为每次都重画,效率可能会低些,但暂时没什么好办法了
 
清空画布这样来 : Canvas.FillRect(Canvas.ClipRect);
 
to:卷起千堆雪tyn
Canvas.FillRect(Canvas.ClipRect);好像不行呢,除非能取得它本身所盖住的父窗口
的位图
 
我是这样做的:
xxx.canvas.bitmap:=nil;
而且从没出错。
 
我也遇到过这个问题,清空和fillrect是完全不同的不信你保存到文件试试看?直接把
Canvas.bitmap或canvas.graphi赋为nil就可以了.
 
CANVAS.CLEAR呢
 
to gbh,donkey:canvas有bitmap或graphic属性吗?
0738的方法还能达到效果
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部