procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
CurrentRect.Left:=x;
CurrentRect.Top:=y;
end;
procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
CurrentRect.Right:=x;
CurrentRect.Bottom:=y;
if(ssLeft in shift) then
begin
Canvas.Brush.Style := bsclear ;
image1.Canvas.Rectangle(CurrentRect);
end;
end;
有没有人指点一下,最好能够自已测试一下,网上都说照着重画一下,就可以擦除,感觉还是有些问题,希望谁能够编个测试代码给我看看,谢谢!
6 个解决方案
#1
if(ssLeft in shift) then
begin
image1.picture.Graphic:=nil;
image1.Parent.DoubleBuffered:=true;
Canvas.Brush.Style := bsclear ;
image1.Canvas.Rectangle(CurrentRect);
end;
begin
image1.picture.Graphic:=nil;
image1.Parent.DoubleBuffered:=true;
Canvas.Brush.Style := bsclear ;
image1.Canvas.Rectangle(CurrentRect);
end;
#2
手机上的照片一般多大呢
#3
另一种方法是画在目标控件的canvas上,每次重新加载image
或者画在form 的canvas,他的刷新会擦除以前的矩形
或者画在form 的canvas,他的刷新会擦除以前的矩形
#4
1#楼的方法可以擦除以前的图像,但是把图片也清空了,#3楼说的不太理解,不过重新加载image倒提醒我可以结合1#楼的办法,但是试了一下,还是不行
#5
那用2个image
image2加载图片作底图,image1没图片,用来绘画
image1设置transparent为True
image2加载图片作底图,image1没图片,用来绘画
image1设置transparent为True
#6
根据#3楼的建议,#5楼的想法,结合#1楼的方法,可以解决问题,而且效果还不错,谢谢大家,但这只是把问题解决了,不是最好的方法,果然人多力量大,呵呵...希望更多人能够参与,把这种方法更完善
#1
if(ssLeft in shift) then
begin
image1.picture.Graphic:=nil;
image1.Parent.DoubleBuffered:=true;
Canvas.Brush.Style := bsclear ;
image1.Canvas.Rectangle(CurrentRect);
end;
begin
image1.picture.Graphic:=nil;
image1.Parent.DoubleBuffered:=true;
Canvas.Brush.Style := bsclear ;
image1.Canvas.Rectangle(CurrentRect);
end;
#2
手机上的照片一般多大呢
#3
另一种方法是画在目标控件的canvas上,每次重新加载image
或者画在form 的canvas,他的刷新会擦除以前的矩形
或者画在form 的canvas,他的刷新会擦除以前的矩形
#4
1#楼的方法可以擦除以前的图像,但是把图片也清空了,#3楼说的不太理解,不过重新加载image倒提醒我可以结合1#楼的办法,但是试了一下,还是不行
#5
那用2个image
image2加载图片作底图,image1没图片,用来绘画
image1设置transparent为True
image2加载图片作底图,image1没图片,用来绘画
image1设置transparent为True
#6
根据#3楼的建议,#5楼的想法,结合#1楼的方法,可以解决问题,而且效果还不错,谢谢大家,但这只是把问题解决了,不是最好的方法,果然人多力量大,呵呵...希望更多人能够参与,把这种方法更完善