国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Delphi > 正文

DELPHI中拖放的操作

2019-11-18 18:10:27
字體:
來源:轉載
供稿:網友
 

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

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

  9.1 控件的拖放支持

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

  9.1.1拖放屬性

  拖放屬性主要有兩個:

  ●DragMode:拖動模式

  它們都是在拖放的源控件中設置。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雖然不是一個專門的拖放事件,但在人工模式下拖動的開始是在這一
事件的處理過程中實現的。

  9.1.3拖放方法

  拖放方法有三個:

  ●BeginDrag:人工方式下開始一個拖動

  ●EndDrag:

  結束一個拖動

  ●Dragging:判斷一個控件是否正被拖動

  這三個方法都被源控件使用。

  當DragMode置為dmManual時,拖動必須調用控件的BeginDrag方法才能開始。

  BeginDrag有一個布爾參數Immediate。如果輸入參數為True,拖動立即開始,光標
改變到DragCursor的設置。如果輸入參數為False,直到用戶將光標移動了一定的距離
(5個象素點)后才改變光標,開始拖動。這就允許控件接受一個OnClick事件而并不開始
拖動操作。

  EndDrag方法中止一個對象的被拖動狀態。它有一個布爾參數Drop。如果Drop設置
為True,被拖動的對象在當前位置放下(能否被接受由目標控件決定);如果Drop設置
為False,則拖動就地被取消。

  下面一段程序表明當拖動進入一控制面板時拖動被取消。


procedure TForm1.Panel1DragOver(Sender, Source: TObject; X, Y: Integer;

State: TDragState; var Accept: Boolean);

begin

Accept := False;

if (Source is TLabel) and (State = dsDragEnter) then

(Source as TLabel).EndDrag(False);

end;


  Draging方法判斷一個控件是否正被拖動。在下面的例子中當用戶拖動不同的檢查框
時窗口改變為不同的顏色。


procedure TForm1.FormActivate(Sender: TObject);

begin

CheckBox1.DragMode := dmAutomatic;

CheckBox2.DragMode := dmAutomatic;

CheckBox3.DragMode := dmAutomatic;

end;


procedure TForm1.FormDragOver(Sender, Source: TObject; X, Y: Integer;

State: TDragState; var Accept: Boolean);

begin

if CheckBox1.Dragging then

Color := clAqua;

if CheckBox2.Dragging then


Color := clYellow;

if CheckBox3.Dragging then

Color := clLime;

end;


上一篇:DELPHI中的拖動開發(2)

下一篇:兩個delphi下遍歷指定目錄下指定類型文件的函數

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
學習交流
熱門圖片

新聞熱點

疑難解答

圖片精選

網友關注

主站蜘蛛池模板: 德江县| 衡阳县| 巴南区| 武宁县| 当雄县| 吴旗县| 广灵县| 遵义县| 肇州县| 萍乡市| 天台县| 廉江市| 钟祥市| 青神县| 莱西市| 江孜县| 察隅县| 达日县| 琼中| 湘潭县| 博爱县| 南郑县| 西乌珠穆沁旗| 咸阳市| 伊吾县| 察哈| 平湖市| 文昌市| 上思县| 民权县| 南昌县| 晋州市| 综艺| 昭苏县| 丰顺县| 海兴县| 双桥区| 鲁甸县| 尖扎县| 罗甸县| 广南县|