Delphi 拖动操作

  拖动操作的一般步骤:

  (1) 开始拖动操作

  (2) 接收拖动项目

(3)放下拖动项目

  (4) 终止拖动项目

SequenceDiagram1

   一、开始拖动

拖动模式(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 屏幕坐标

posted @ 2012-11-08 09:10  淡竹叶  阅读(1070)  评论(0编辑  收藏  举报