拖动操作的一般步骤:
(1) 开始拖动操作
(2) 接收拖动项目
(3)放下拖动项目
(4) 终止拖动项目
一、开始拖动
拖动模式(DragMode)设置为dmAutomatic时,用户在源控件上按下鼠标时拖动自动开始;
设置为dmManual时通过调用BeginDrag方法开始拖动
二 、接收拖动
当一个拖动窗体(控件)拖动一接受窗体(控件)上是,触发onDrawOver事件。接受窗件是否接受拖动窗体。在onDragOver事件判定.
onDragOver事件原型
type
TDragOverEvent = procedure(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean) of object;
property OnDragOver: TDragOverEvent;
参数
Sender 接收窗体。即触发事件的窗体
Source 拖动窗体,即开始拖动的窗体
x,y 屏幕坐标
state: (dsDragEnter, dsDragLeave, dsDragMove) 拖动状态
Accept: 默认为true,为Accept表示,接受拖动,为false 表示不接受拖动
三、放下拖动
当OnDragOver事件处理过程中Accept参数设置为True且窗体放下时,由onDragDrop事件处理过程来完成拖动放下后的响应。
OnDragDrop原型
type TDragDropEvent = procedure(Sender, Source: TObject; X, Y: Integer) of object;
property OnDragDrop: TDragDropEvent;
参数
Sender: 接收窗体
Source:拖动窗体
x,y 屏幕坐标
四 结束拖动
结束拖动操作有两个:
(1) 用户释放了鼠标键
(2) 用EndDrag方法强行中止拖动
结束两种:
(1) 放下被 接受
(2) 放下被忽略
拖动操作结束后源控件都要收到一条消息响应拖动结束事件 OnEndDrag
OnEndDrag原型
type TEndDragEvent = procedure(Sender, Target: TObject; X, Y: Integer) of object;
property OnEndDrag: TEndDragEvent;
Sender 拖动的窗体
Target 接受的窗体
x,y 屏幕坐标
请发表评论