我知道拖动Button可以用下面的方法:
  ReleaseCapture;
  Button1.Perform(wm_syscommand,$F012,0);
不过如何拖动一个label呢?
上面拖动Button的方法具体原理是什么?
谢了!

解决方案 »

  1.   

    $F012其实是未归档的“sc_DragMove”标志的值,Button1.Perform就是向Button1发送wm_syscommand消息,因为只有从TWinControl继承的组件才接受该消息,所以对Label无效。拖动Label可以用如下方法实现:
    var oldPT: TPoint;
    procedure TForm1.Label1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      GetCursorPos(oldPT);
    end;procedure TForm1.Label1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    var
      pt: TPoint;
    begin
      GetCursorPos(pt);
      if ssLeft in Shift then begin
        Label1.Left := Label1.Left + pt.X - oldPT.X;
        Label1.Top := Label1.Top + pt.Y - oldPT.Y;
      end;
      oldPT := pt;
    end;