Simple, when the mouse moves, just update the window position according to the cursor position:Code: Pascal [Select][+][-]procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);const DragOffset: TPoint = (X:-1;Y:-1);var AbsPos: TPoint;begin if not (ssLeft in Shift) then Exit; if DragOffset.X<0 then begin DragOffset:=Point(X,Y); Exit; end; AbsPos := ClientToScreen(Point(X, Y)) - DragOffset; Left := AbsPos.X; Top := AbsPos.Y;end;If you want to have it a little less clunky, put the DragOffset as member into the TForm and set it in the MouseDown event instead of on the first drag.