下面这2种方法都能实现对控件和窗体的拖拽
方法1
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin ReleaseCapture; SendMessage(Handle,WM_NCLBUTTONDOWN,HTCAPTION,0); end;
方法2
public { public declarations } posX, posY: Integer; procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin posX := Mouse.CursorPos.X - Form1.Left; posY := Mouse.CursorPos.Y - Form1.Top; end; procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if Shift =[ssLeft] then begin Form1.Left := Mouse.CursorPos.X - posX; // 新的位置 Form1.Top := Mouse.CursorPos.Y - posY; end; end;
参考:http://www.cnblogs.com/xe2011/p/3426281.html