procedure TForm1.MoveControl(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
  TempPanel : TPanel;
  Control : TControl;
begin
  //Release the MOUSEDOWN status
  ReleaseCapture;
  if Sender is TWinControl then
    //wincontrol具有句柄,可以直接拖动
    TWincontrol(Sender).Perform(WM_SYSCOMMAND,$f019,0)
  else
    //没有句柄的空间把它放在 TPanel上
    try
      Control := TControl(Sender);
      TempPanel := TPanel.Create(Self);
      with TempPanel do
      begin
     //用TempPanel替换控件
        Caption := '';
        BevelOuter := bvNone;
        SetBounds(Control.Left,Control.Top,
        Control.Width,Control.Height);
        Parent := Control.Parent;        //把控件放在TempPanel上
        Control.Parent := TempPanel;        //移动TempPanel,同时移动控件
        Perform(WM_SYSCOMMAND,$F019,0);        //把控件放在目的地
      Control.Parent := Parent;
        Control.Left := Left;
        Control.Top := Top;
      end;
    finally
      TempPanel.Free;//释放temppanel
    end;
end;