procedure TForm1.Button1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
(Sender as TWinControl).Tag:=X shl 16+Y;
end;
procedure TForm1.Button1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
(Sender as TWinControl).Tag:=0;
end;
procedure TForm1.Button1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
with (Sender as TWinControl) do
if Tag<>0 then
begin
Left:=Left+x-(Tag shr 16);
Top:=Top+Y-(Tag and $FFFF);
end;
end;