Delphi提供的所有控件(Control,即能獲得輸入焦點的部件)都支持拖放操作,並有相應的拖放屬性、拖放事件和拖放方法。下面我們先介紹控件的拖放支持,而後再給出開發拖放操作的一般步驟和應用實例。
9.1 控件的拖放支持
拖放操作中控件可以分為源控件和目標控件兩類。絕大部分控件既可以作為源控件也可以作為目標控件。但也有一部分控件只能支持其中的一種。
9.1.1 拖放屬性
拖放屬性主要有兩個:
● DragMode : 拖動模式
● DragCursor : 拖動光標
它們都是在拖放的源控件中設置。DragMode控制用戶在運行時間內當在控件上按下鼠標時控件如何反應。如果DragMode置為dmAutomatic,那麼當用戶在控件上按下鼠標時拖動自動開始;如果DragMode置為dmManual(這是缺省值),則將通過處理鼠標事件來判斷一個拖動是否可以開始。
DragCursor用於選擇拖動時顯示的光標,缺省值是CrDrag,一般不要去修改它。在程序設計過程中通用的界面規范應該得到開發者的尊重。但有時候為了特定的目的,開發者也可以把自己設計的光標賦給DragCursor。
9.1.2 拖放事件
拖放事件主要有三個:
●OnDragOver:拖動經過時激發
●OnDragDrop:拖動放下時激發
●OnEndDrop :拖動結束時激發
前兩個事件由目標控件響應,後一個事件由源控件響應。
OnDragOver事件最主要的功能是確定當用戶就地放下拖動時控件是否可以接受。它的參數包括:
Source : TObject; {源控件}
X,Y : Integer; {光標位置}
State : TDragState; {拖動狀態}
var Accept : Boolean {能否接受}
TDragState是一個枚舉類型,表示拖放項目與目標控件的關系。
type
TDragState = (dsDragEnter, dsDragLeave, dsDragMove);
不同取值的意義如下表:
表9.1 DragState 的取值與意義
━━━━━━━━━━━━━━━━━━━━━━━━━━━
取 值 意