缩放 移动控件

 
//缩放 移动控件
//任意摆布一个控件   (   拖动、放大、缩小   ) (2008-07-24 23:42:11) [编辑][删除]
//标签:杂谈   分类:编程

//  第一步,  先写出下面的函数
//==============================================================================
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;

//第二步,在mouseMove事件中调用上述函数
procedure TFormBing_Li.Image1MouseMove(Sender: TObject; Shift: TShiftState;
  X, Y: Integer);
begin                //    (Sender   as   TControl).Parent
  ManipulateControl( self.Panel_Image,Shift, X, Y, 10);//10为精度
end;

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值