delphi在image图片上画随鼠标动态画矩形,怎么消除以前的矩形,不发生重叠

时间:2022-10-28 11:11:34
 

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;

#2


手机上的照片一般多大呢

#3


另一种方法是画在目标控件的canvas上,每次重新加载image
或者画在form 的canvas,他的刷新会擦除以前的矩形

#4


1#楼的方法可以擦除以前的图像,但是把图片也清空了,#3楼说的不太理解,不过重新加载image倒提醒我可以结合1#楼的办法,但是试了一下,还是不行

#5


那用2个image
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;

#2


手机上的照片一般多大呢

#3


另一种方法是画在目标控件的canvas上,每次重新加载image
或者画在form 的canvas,他的刷新会擦除以前的矩形

#4


1#楼的方法可以擦除以前的图像,但是把图片也清空了,#3楼说的不太理解,不过重新加载image倒提醒我可以结合1#楼的办法,但是试了一下,还是不行

#5


那用2个image
image2加载图片作底图,image1没图片,用来绘画

image1设置transparent为True

#6


根据#3楼的建议,#5楼的想法,结合#1楼的方法,可以解决问题,而且效果还不错,谢谢大家,但这只是把问题解决了,不是最好的方法,果然人多力量大,呵呵...希望更多人能够参与,把这种方法更完善