转载:任意移动一个控件

/==============================================================================  
  //任意摆布一个控件(拖动、放大、缩小)******************************************  
  //==============================================================================  
  procedure   ManipulateControl(Control:   TControl;   Shift:   TShiftState;   X,   Y,   Precision:   integer);  
  var  
        SC_MANIPULATE:   Word;  
  begin  
      //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  
      //光标在控件的最左侧**********************************************************  
      //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  
                if   (X<=Precision)   and   (Y>Precision)   and   (Y<Control.Height-Precision)  
      then   begin  
                    SC_MANIPULATE     :=   $F001;  
                    Control.Cursor   :=   crSizeWE;  
                end  
      //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  
      //光标在控件的最右侧**********************************************************  
      //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  
      else   if   (X>=Control.Width-Precision)   and   (Y>Precision)   and   (Y<Control.Height-Precision)  
      then   begin  
                    SC_MANIPULATE     :=   $F002;  
                    Control.Cursor   :=   crSizeWE;  
                end  
      //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  
      //光标在控件的最上侧**********************************************************  
      //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  
      else   if   (X>Precision)   and   (X<Control.Width-Precision)   and   (Y<=Precision)  
      then   begin  
                    SC_MANIPULATE     :=   $F003;  
                    Control.Cursor   :=   crSizeNS;  
                end  
      //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  
      //光标在控件的左上角**********************************************************  
      //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  
      else   if   (X<=Precision)   and   (Y<=Precision)  
      then   begin  
                    SC_MANIPULATE     :=   $F004;  
                    Control.Cursor   :=   crSizeNWSE;  
                end  
      //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  
      //光标在控件的右上角**********************************************************  
      //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  
      else   if   (X>=Control.Width-Precision)   and   (Y<=Precision)  
      then   begin  
                    SC_MANIPULATE     :=   $F005;  
                    Control.Cursor   :=   crSizeNESW         ;  
                end  
      //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  
      //光标在控件的最下侧**********************************************************  
      //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  
      else   if   (X>Precision)   and   (X<Control.Width-Precision)   and   (Y>=Control.Height-Precision)  
      then   begin  
                    SC_MANIPULATE     :=   $F006;  
                    Control.Cursor   :=   crSizeNS;  
                end  
      //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  
      //光标在控件的左下角**********************************************************  
      //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  
      else   if   (X<=Precision)   and   (Y>=Control.Height-Precision)  
      then   begin  
                    SC_MANIPULATE     :=   $F007;  
                    Control.Cursor   :=   crSizeNESW;  
                end  
      //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  
      //光标在控件的右下角**********************************************************  
      //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  
      else   if   (X>=Control.Width-Precision)   and   (Y>=Control.Height-Precision)  
      then   begin  
                    SC_MANIPULATE     :=   $F008;  
                    Control.Cursor   :=   crSizeNWSE;  
                end  
      //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  
      //光标在控件的客户区(移动整个控件)******************************************  
      //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  
      else   if   (X>5)   and   (Y>5)   and   (X<Control.Width-5)   and   (Y<Control.Height-5)  
      then   begin  
                    SC_MANIPULATE     :=   $F009;  
                    Control.Cursor   :=   crSizeAll;  
                end  
      else   begin  
                    SC_MANIPULATE   :=   $F000;  
                    Control.Cursor   :=   crDefault;  
                end;  
      //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  
      if   Shift=[ssLeft]   then  
      begin  
          ReleaseCapture;  
          Control.Perform(WM_SYSCOMMAND,   SC_MANIPULATE,   0);  
      end;      
  end;  
   
  procedure   MyMouseMove(Sender:   TObject;   Shift:   TShiftState;  
      X,   Y:   Integer);  
  begin  
        Caption   :=   IntToStr(X)   +   '/'   +   IntToStr(Y);  
        ManipulateControl((Sender   as   TControl),   Shift,   X,   Y,   10);  
  end;  
   
  实现步骤  
  1.拖放到窗体是动态创建一个控件,并使窗体成为该控件的父母  
       
  var  
          Temp:   TButton;  
  begin  
          Temp   :=   TButton.Create(Self);  
          Temp.Parent   :=   panel2;  
          Temp.Left   :=   150;  
          Temp.Width   :=   Button1.Width;  
          Temp.Top   :=   100;  
          Temp.Height   :=   Button1.Height;  
          Temp.Caption   :=   '动态创建!';  
          end;  
   
  2。使该控件可以移动和伸缩,在上面的代码代码中添加一句;  
   
  Temp.OnMouseMove   :=     Button1MouseMove;  
   
 
Top

3 楼Liusp(夜深千帐灯)回复于 2002-04-25 22:14:27 得分 0 应该是  
  Temp.OnMouseMove   :=     MyMouseMove;
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值