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;
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;
Shift: TShiftState; X, Y: Integer);
begin
inherited mousedown(button,shift,x,y);
if button=mbleft then
begin
ReleaseCapture;
(self as TWinControl).Perform (
wm_SysCommand, sc_DragMove, 0);
end;
end;
//移动控件的代码