用CANVAS随着鼠标的移动画出矩形

用CANVAS随着鼠标的移动画出矩形 Delphi / Windows SDK/API
http://www.delphi2007.net/DelphiMultimedia/html/delphi_20061107153346171.html
我想用CANVAS随着鼠标的移动,在窗体上画出一个从起点到终点的矩形框.我在MOUSEDOWN里记录起点,然后在MOUSEMOVE里从起点到鼠标所在位置画矩形,但是发现画了好多层的矩形,我现在只想从起点到鼠标所在位置画一个矩形,并且随着鼠标的移动而变化,该怎么做呢?如何擦除多余的矩形呢?

没人回答吗?

设定时器,如100ms  
  在OnTimer里执行画图操作,画矩形前清屏

unit   Unit1;  
   
  interface  
   
  uses  
      Windows,   Messages,   SysUtils,   Variants,   Classes,   Graphics,   Controls,   Forms,  
      Dialogs;  
   
  type  
      TForm1   =   class(TForm)  
          procedure   FormMouseDown(Sender:   TObject;   Button:   TMouseButton;  
              Shift:   TShiftState;   X,   Y:   Integer);  
          procedure   FormMouseMove(Sender:   TObject;   Shift:   TShiftState;   X,  
              Y:   Integer);  
      private  
          {   Private   declarations   }  
          FOpt,  
          FCpt:   TPoint;  
          procedure   DrawRectangle(AOpt,   ACpt:   TPoint);  
      public  
          {   Public   declarations   }  
      end;  
   
  var  
      Form1:   TForm1;  
   
  implementation  
   
  {$R   *.dfm}  
   
  procedure   TForm1.DrawRectangle(AOpt,   ACpt:   TPoint);  
  begin  
      With   Canvas   do  
      begin  
          //左垂  
          MoveTo(AOpt.X,   AOpt.Y);  
          LineTo(AOpt.X,   ACpt.Y);  
   
          //右垂  
          MoveTo(ACpt.X,   AOpt.Y);  
          LineTo(ACpt.X,   ACpt.Y);  
   
          //上水  
          MoveTo(AOpt.X,   AOpt.Y);  
          LineTo(ACpt.X,   AOpt.Y);  
   
          MoveTo(AOpt.X,   ACpt.Y);  
          LineTo(ACpt.X,   ACpt.Y);  
      end;  
  end;  
   
  procedure   TForm1.FormMouseDown(Sender:   TObject;   Button:   TMouseButton;  
      Shift:   TShiftState;   X,   Y:   Integer);  
  begin  
      With   Canvas   do  
      begin  
          if   Shift   =   [ssleft]   then  
          begin  
              Canvas.Pen.Mode   :=   pmNot;  
              Canvas.Pen.Color   :=   clRed;  
              FOpt   :=   Point(X,   Y);  
              FCpt   :=   Point(X,   Y);  
              MoveTo(X,   Y);  
              LineTo(X,   Y)  
          end;  
      end;  
  end;  
   
  procedure   TForm1.FormMouseMove(Sender:   TObject;   Shift:   TShiftState;   X,  
      Y:   Integer);  
  begin  
      With   Canvas   do  
      begin  
          if   Shift   =   [ssleft]   then  
          begin  
              DrawRectangle(FOpt,   FCpt);  
              FCpt   :=   Point(X,   Y);  
              DrawRectangle(FOpt,   FCpt);  
              exit;  
   
              MoveTo(FOpt.X,   FOpt.Y);  
              LineTo(FCpt.X,   FCpt.Y);  
              FCpt   :=   Point(X,   Y);  
              MoveTo(FOpt.X,   FOpt.Y);  
              LineTo(FCpt.X,   FCpt.Y)  
          end;  
      end;  
  end;  
   
  end.  
 

建议使用矢量图形组件TCAD  
  http://www.codeidea.com/cn/  
   
 

转载于:https://www.cnblogs.com/delphi2007/archive/2008/11/05/1326878.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值