如何拖动 panel 、button、 memo、 等 组件? (50分)

  • 主题发起人 主题发起人 村长.net
  • 开始时间 开始时间

村长.net

Unregistered / Unconfirmed
GUEST, unregistred user!
我想在窗体上实现拖动 panel 、button、 memo应该如何实现?

谢谢。
 
以下两两行放在MouseDown过程中
ReleaseCapture;
(Sender as TWinControl).Perform(WM_SYSCOMMAND, $f012, 0);
只要是从TWinControl继承的都可以。
 
设置组件的位置随鼠标位置移动即可
 
[Delphi之未经证实的葵花宝典version 2.5]

procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
const
SC_DragMove = $F012; { a magic number }
begin
ReleaseCapture;
panel1.perform(WM_SysCommand, SC_DragMove, 0);
end;
/////////////////////////////////////////////
procedure TForm1.Button1MouseDown(Sender: TObject; Button:
TMouseButton; Shift: TShiftState; X, Y: Integer);
{$IFNDEF WIN32}
var
pt : TPoint;
{$ENDIF}
begin
if ssCtrl in Shift then begin
ReleaseCapture;
SendMessage(Button1.Handle, WM_SYSCOMMAND, 61458, 0);
{$IFNDEF WIN32}
GetCursorPos(pt);
SendMessage(Button1.Handle,
WM_LBUTTONUP,
MK_CONTROL,
Longint(pt));
{$ENDIF}
end;
end;
 
拖动就是DRAG 将要拖的控件的DragMode设为dmAutomatic

拖动的控件要所放置的控件的2个事件与DRAG有关
DragOver 拖到结束 这个事件一定要写
DragDrop 拖放松手

其他的自己慢慢琢磨吧
 
多人接受答案了。
 
后退
顶部