一、拖放的要素
鼠标拖放的二个操作对象:源对象(source)和目标对象(Target)。鼠标左键在源控件(source)上按下拖动,直至可接收目标控件(Target)上放下,即完成一次拖放操作。有四个事件拖放事件依序发生:OnStartDrag,OnDragOver,OnDragDrop,OnEndDrag。按事件名的字义理解这四个事件就对了,OnDragOver和OnDragDrop由目标对象(Target)激发,OnStartDrag和OnEndDrag由源对象(source)激发,下面简单的讲解下四个事件。
二、事件流程
1、OnStartDrag(Sender: TObject; var DragObject: TDragObject);
大多数的组件具有DragMode属性, 表示拖放操作的开始方式。DragMode 属性的默认值为dmManual,也就是要在源对象的OnMouseDown 事件的处理过程中调用BeginDrag过程才开始拖放操作,因此属性值为dmManual时,不需要处理OnStartDrag事件,而代之以OnMouseDown事件(当然此情形下OnStartDrag事件还会发生)。如果将DragMode 属性设置为dmAutomatic,则鼠标左键在源对象上按下后就自动开始拖放操作,这时就可在OnStartDrag事件中进行处理。
procedure TControl.BeginDrag(Immediate: Boolean; Threshold: Integer=-1);
鼠标拖放的二个操作对象:源对象(source)和目标对象(Target)。鼠标左键在源控件(source)上按下拖动,直至可接收目标控件(Target)上放下,即完成一次拖放操作。有四个事件拖放事件依序发生:OnStartDrag,OnDragOver,OnDragDrop,OnEndDrag。按事件名的字义理解这四个事件就对了,OnDragOver和OnDragDrop由目标对象(Target)激发,OnStartDrag和OnEndDrag由源对象(source)激发,下面简单的讲解下四个事件。
注:下文中的拖放对象,指在拖放状态的鼠标,而非TDragObject对象。
二、事件流程
1、OnStartDrag(Sender: TObject; var DragObject: TDragObject);
大多数的组件具有DragMode属性, 表示拖放操作的开始方式。DragMode 属性的默认值为dmManual,也就是要在源对象的OnMouseDown 事件的处理过程中调用BeginDrag过程才开始拖放操作,因此属性值为dmManual时,不需要处理OnStartDrag事件,而代之以OnMouseDown事件(当然此情形下OnStartDrag事件还会发生)。如果将DragMode 属性设置为dmAutomatic,则鼠标左键在源对象上按下后就自动开始拖放操作,这时就可在OnStartDrag事件中进行处理。
procedure TControl.BeginDrag(Immediate: Boolean; Threshold: Integer=-1);