熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Delphi編程 >> 正文

DELPHI基礎教程:Delphi拖放編程[1]

2013-11-23 17:51:10  來源: Delphi編程 

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

  Delphi提供的所有控件(Control即能獲得輸入焦點的部件)都支持拖放操作並有相應的拖放屬性拖放事件和拖放方法下面我們先介紹控件的拖放支持而後再給出開發拖放操作的一般步驟和應用實例

   控件的拖放支持

  拖放操作中控件可以分為源控件和目標控件兩類絕大部分控件既可以作為源控件也可以作為目標控件但也有一部分控件只能支持其中的一種

   拖放屬性

  拖放屬性主要有兩個

  ● DragMode : 拖動模式

  ● DragCursor : 拖動光標

  它們都是在拖放的源控件中設置DragMode控制用戶在運行時間內當在控件上按下鼠標時控件如何反應如果DragMode置為dmAutomatic那麼當用戶在控件上按下鼠標時拖動自動開始如果DragMode置為dmManual(這是缺省值)則將通過處理鼠標事件來判斷一個拖動是否可以開始

  DragCursor用於選擇拖動時顯示的光標缺省值是CrDrag一般不要去修改它在程序設計過程中通用的界面規范應該得到開發者的尊重但有時候為了特定的目的開發者也可以把自己設計的光標賦給DragCursor

   拖放事件

  拖放事件主要有三個

  ●OnDragOver:拖動經過時激發

  ●OnDragDrop:拖動放下時激發

  ●OnEndDrop :拖動結束時激發

  前兩個事件由目標控件響應後一個事件由源控件響應

  OnDragOver事件最主要的功能是確定當用戶就地放下拖動時控件是否可以接受它的參數包括

  Source : TObject;  {源控件}

  XY : Integer; {光標位置}

  State : TDragState; {拖動狀態}

  var Accept : Boolean {能否接受}

  TDragState是一個枚舉類型表示拖放項目與目標控件的關系

  type

  TDragState = (dsDragEnter dsDragLeave dsDragMove)

  不同取值的意義如下表

  表 DragState 的取值與意義

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

      取 值                             意 義

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

  dsDragEnter 拖動對象進入一個允許拖動對象放下的控件中為缺省狀態

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

  dsDragMove 拖動對象在一個允許拖動對象放下的控件內移動

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

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

  ● 判斷源控件類型

  Accept := Source is TLabel;

  ● 判斷源控件對象

  Accept := (Source = TabSet

  ● 判斷光標位置

  見()中的例程

  ● 判斷拖動狀態

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

  begin

  sourceDragIcon := NewIco ;

  Accept := True;

  end

  else

  Accept := False;

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

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

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

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

  procedure TFMFormFileListEndDrag(Sender Target: TObject; X Y: Integer)

  begin

  if Target <> nil then FileListUpdate;

  end;

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

[]  []  []  []  


From:http://tw.wingwit.com/Article/program/Delphi/201311/25213.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.