Private
____FDragOffset:Tpoint; //オフセット
____FDraggingControl : TControl;//ドラッグしているコントロール

implementation
//マウスを移動
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
____FDraggingControl.Left := X-FDragOffset.X;
____FDraggingControl.top := Y-FDragOffset.Y;
end;

//マウスボタンを離したら
procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
____ReleaseCapture;
____FDraggingControl.Parent := Scrollbox1; //マウス離したら親をscrollbox1に変更
____FDraggingControl:=nil;
end;

//マウスボタンを押したら
procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
____FDraggingControl := Sender as TControl;
____FDragOffset :=point(x,y);
____SetCaptureControl(Form1);
____FDraggingControl.Parent := Form1; //マウス押したら親をForm1に変更
end;
end.