本人时刚学习写控件的。有个问题没有解决。问题如下
我想让我的控件能够在运型期能够随鼠标脱拽。要求是功能必须是在控件代码中。

解决方案 »

  1.   

    .....
    implementationvar
      OldPt:TPoint;         //保存鼠标左键按下时的指针位置
      OldLeft,OldTop:Integer;  //保存拖动前的left&Top
      moving :boolean;
    {$R *.dfm}
    .....procedure MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
    var
     NewPt:TPoint;
    begin
      if (HIWORD(GetAsyncKeyState(VK_LBUTTON)) > 0) and moving then  //判断鼠标左键是否按下
      begin
         GetCursorPos(NewPt);
        (Sender as TControl).Left:=OldLeft
                                 +NewPt.X-OldPt.X;
        (Sender as TControl).Top:=OldTop
                                 +NewPt.Y-OldPt.Y;
      end;
    end;MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin  if moving then
      begin
        moving:=false;
      end;
    end;MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      if  Button=mbLeft then
      begin
         if not moving then
         begin
           moving:=true;
         end;
         GetCursorPos(OldPt);
         OldLeft:=(Sender as TControl).Left;
         OldTop:=(Sender as TControl).Top;
      end;end;