程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 第九章-Delphi拖放編程(1)

第九章-Delphi拖放編程(1)

編輯:Delphi

拖放(DragDrop)是Windows提供的一種快捷的操作方式。作為基於Windows的開發工具,Delphi同樣支持拖放操作,而且開發應用系統的拖放功能十分方便,真正體現了Delphi的強大功能和方便性。

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 的取值與意義

━━━━━━━━━━━━━━━━━━━━━━━━━━━

取 值 意 義

───────────────────────────

dsDragEnter 拖動對象進入一個允許拖動對象放下

的控件中。為缺省狀態。

dsDragLeave 拖動對象離開一個允許拖動對象放下

的控件。

dsDragMove 拖動對象在一個允許拖動對象放下的

控件內移動。

━━━━━━━━━━━━━━━━━━━━━━━━━━━  

用戶可以利用提供的參數來確定放下的拖動是否可被接受,如:

● 判斷源控件類型: 

Accept := Source is TLabel;

● 判斷源控件對象: 

Accept := (Source = TabSet1);

● 判斷光標位置:

見(9.2),(9.3)中的例程。 

● 判斷拖動狀態: 

If (Source is TLabel) and (State = dsDragMove) then

begin

source.DragIcon := ' New.Ico ';

Accept := True;

end

else

Accept := False;

當Accept=True時,目標控件可以響應OnDragDrop事件,用於確定拖動被放下後程序如何進行處理。

OnDragDrop事件處理過程的參數包括源控件和光標位置。這些信息可用於處理方式的確定。

OnEndDrag事件是在拖動操作結束後由源控件來進行響應的,用於源控件進行相應的處理。拖動操作結束既包括拖動放下被接受,也包括用戶在一個不能接受放下的控件上釋放了鼠標。該事件處理過程的參數包括目標控件(Target)和放下位置的坐標。如果Target=nil, 表示拖動項目沒有被任何控件接受。

在第3節將介紹的文件拖放移動、拖放拷貝操作中,如果操作成功,則文件列表框應更新顯示內容。下面這段程序用於實現這一功能。 

procedure TFMForm.FileListEndDrag(Sender, Target: TObject; X, Y: Integer);

begin

if Target <> nil then FileList.Update;

end;

除以上介紹的三個事件外,還有一個事件OnMouseDown 也常用於拖放操作的響應。OnMouseDown雖然不是一個專門的拖放事件,但在人工模式下拖動的開始是在這一事件的處理過程中實現的。 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved