为什么用canvas.fillRect(myrect)不能擦除我画在canvas上的画?(10分)

B

Boblee

Unregistered / Unconfirmed
GUEST, unregistred user!
我用以代码画图:
oldPenColor := Canvas.Pen.Color;
oldBrush := Canvas.Brush;
rec:=Rect(oneHS.HotSpotX-5,oneHS.HotSpotY-5,oneHS.HotSpotX+5,oneHS.HotSpotY+5);
with g_drawImg do begin
Canvas.Pen.Color := oneHS.HotSpotColor;
Canvas.Brush.Style := bsSolid;
//Canvas.pen.Mode := pmXor;
Canvas.Brush.Color:=oneHS.HotSpotColor;
Canvas.Ellipse(rec);
Canvas.Brush.Style := bsClear;
Canvas.Ellipse(oneHS.HotSpotRect);
end;
Canvas.Pen.Color := oldPenColor;
Canvas.Brush := oldBrush;
。。。。。
画好后,由于我要实现点鼠标位置在热点时可以拖动热点,所以在开始拖动时需擦除原先
的热点,当mouseup 时再用以上代码重画热点。擦除我用这样:
canvas.fillRect(oneHS.HotSpotRect);但效果是我只看到image在刷新,但热点就是不消失。
我试了改成这样:
canvas.brush.color= clRed ;//这里颜色随便 //如果不加这句,下面的也不起作用,不知为何?
canvas.fillrect(canvas.cliprect);//这样就能清除,但这里的清除将清除canvas上所有的点
//如果参数仍用上面的 oneHS.HotSpotRect,那将会出现一块红色区
//这肯定不行。
我也试了用pen.mode := pmXor,这样我只要重画一下就能把原来的热点给擦了,但老是出现颜色不对,
比如我黄色,显示的热点的颜色就变成了蓝色。不知为何。
我想知道,如何清除canvas上某一区域的图象?
 
Canvas.Brush.Style := bsSolid;
Canvas.Brush.color :=你需要的颜色
Canvas.Ellipse(你要填充的区域);

 
顶部