上一篇:拖动窗体的任意区域移动窗体
下一篇:Delphi图片按钮
Delphi拖动控件
发布于: 2012/12/15 15:38:32 | 发布在: Delphi文章 | 点击:
1. 新建一个Delphi工程
2. 在窗体上放置一个TPanel控件,在TPanel控件上放置一个TLabel控件,将Tlabel的DragMode属性设置成:dmAutomatic(默认为dmManual)
3. 添加两个全局变量
iMouseX, iMouseY: Integer; //用于保存鼠标在TLabel控件上的坐标。
4. 添加Label1的OnDragOver事件响应代码
//如果不响应该事件,则在Label1上按下鼠标而又还没拖动时,鼠标指针会变为crNoDrop
procedure TForm1.Label1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
Accept := True;
end;
5. 添加Label1的OnMouseMove事件响应代码
procedure TForm1.Label1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
iMouseX := X;
iMouseY := Y;
end;
6. 添加Panel1的OnDragOver事件响应代码
procedure TForm1.Panel1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
Label1.Left := X - iMouseX;
Label1.Top := Y - iMouseY;
end;
7. 编译并运行程序,就可以在Panel1范围内随意拖动Label1控件了。
注:如果需要让拖动结束后才把Label控件放到新位置,而不是让Label控件跟着鼠标一起移动,则需要做以下修改:
添加两个全局变量
iPanelX, iPanelY: Integer; //用于保存鼠标在Panel1控件上的坐标
将Panel1控件的OnDragOver事件响应代码改成:
procedure TForm1.Panel1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
iPanelX := X;
iPanelY := Y;
end;
添加Label1控件的OnEnDrag事件响应代码
procedure TForm1.Label1EndDrag(Sender, Target: TObject; X, Y: Integer);
begin
Label1.Left := iPanelX - iMouseX;
Label1.Top := iPanelY - iMouseY;
end;
全文完。