如何擦去透明画布上的图形?(100分)

  • 主题发起人 主题发起人 wenlong111
  • 开始时间 开始时间
W

wenlong111

Unregistered / Unconfirmed
GUEST, unregistred user!
如何擦去透明画布上的图形?
我已经在一透明画布上画了一个图形,我如何才能把已经画上的图形擦去?
paint函数中:
var
Slika : Tbitmap;
x1,x2,x3,x4,y1,y2,y3,y4:integer;
begin
Slika:=TBitmap.Create;
Slika.Width:=ClientWidth;
Slika.Height:=ClientHeight;
slika.Transparent:=true;
with Slika.Canvas do begin
Color:=fBackColor;
Brush.Style:=bsclear;
FillRect(Rect(0,0,Slika.Width,Slika.Height));
end;
x1:=2;
y1:=2;
x2:=12;
y2:=2;
x3:=12;
y3:=12;
x4:=2;
y4:=12;
polyLine([point(x1,y1),Point(x2,y2),Point(x3,y3),Point(x4,y4),Point(x1,y1)]);
FloodFill(((x1+x2)div 2),((y1+y4)div 2),Brush.Color, fsBorder);
Canvas.CopyMode:=cmSrcCopy;
Canvas.Draw(0, 0, Slika);
Slika.Free;
end;
 
再调用一次
Color:=fBackColor;
Brush.Style:=bsclear;
FillRect(Rect(0,0,Slika.Width,Slika.Height));
不就可以了吗?

不过,如果你上面的方法是写在onpaint事件里就罗嗦了,因为paint的时候又把图形画上去了。
 
color :=fBackColor;这个没用。因为背景是透明的,没有颜色阿。

 
那就FillRect,第一次不用bsClear,第二次的时候再用。
 
这样会有一个问题。第一次使用不透明的时候会背景刷成其他颜色。这样是可以把它擦掉,但是会留下一块疤。
 
问题解决了。直接调用TGraphicControl的Invalidate函数使空间实效就可以了。不要调用paint函数,调用paint函数不重绘。谢谢LeeChange的参与。给分。
 

Similar threads

后退
顶部