了解拖動(dòng)操作
To"拖動(dòng)"在鼠標(biāo)移動(dòng)時(shí)按住計(jì)算機(jī)鼠標(biāo)按鈕,然后釋放按鈕以放下對(duì)象。Delphi可以輕松編程拖動(dòng)和丟棄到應(yīng)用程序中。
您可以在您喜歡的任何地方拖動(dòng),例如從一種形式到另一種形式,或者從Windows Explorer到應(yīng)用程序。
拖動(dòng)示例
啟動(dòng)一個(gè)新項(xiàng)目并在一個(gè)表單上放置一個(gè)圖像控制。使用對(duì)象檢查器加載圖片(圖片屬性),然后將DragMode屬性設(shè)置為dmManual。我們'將創(chuàng)建一個(gè)程序,允許使用拖動(dòng)技術(shù)移動(dòng)TImage控制運(yùn)行時(shí)。
DragMode
組件允許兩種類型的拖動(dòng):自動(dòng)和手動(dòng)。Delphi使用DragMode屬性來(lái)控制用戶何時(shí)能夠拖動(dòng)控件。默認(rèn)值此屬性為dmManual,這意味著不允許在應(yīng)用程序周?chē)蟿?dòng)組件,除非在特殊情況下我們必須為其編寫(xiě)適當(dāng)?shù)拇a。無(wú)論DragMode屬性的設(shè)置如何,只有在寫(xiě)入正確的代碼重新定位它時(shí),組件才會(huì)移動(dòng)。
OnDragDrop
識(shí)別拖動(dòng)的事件稱為OnDragDrop事件。我們使用它來(lái)指定當(dāng)用戶丟棄對(duì)象時(shí)我們想要發(fā)生的事情。因此,如果我們想將組件(圖像)移動(dòng)到表單上的新位置,我們必須為表單's OnDragDrop事件處理器編寫(xiě)代碼。
OnDragDrop事件的源參數(shù)是正在丟棄的對(duì)象。源參數(shù)的類型是主題。要訪問(wèn)其屬性,我們必須將其轉(zhuǎn)換為正確的組件類型,在此示例中為T(mén)Image。
接受
我們必須使用表格's OnDragOver event來(lái)表明表格可以接受TImage控制我們想放在它上。盡管Accept參數(shù)默認(rèn)為T(mén)rue,但如果未提供OnDragOver事件處理程序,則控件將拒絕拖動(dòng)的對(duì)象(就好像Accept參數(shù)更改為False一樣)。
運(yùn)行您的項(xiàng)目,然后嘗試拖動(dòng)圖像。請(qǐng)注意,拖動(dòng)鼠標(biāo)指針移動(dòng)時(shí),圖像在其原始位置保持可見(jiàn)。在拖動(dòng)發(fā)生時(shí),我們不能使用OnDragDrop過(guò)程來(lái)使組件不可見(jiàn),因?yàn)橹挥性谟脩魜G棄對(duì)象(如果有的話)之后才調(diào)用此過(guò)程。
DragCursor
如果要更改拖動(dòng)控件時(shí)顯示的光標(biāo)圖像,請(qǐng)使用DragCursor屬性。DragCursor屬性的可能值與光標(biāo)屬性的值相同。您可以使用動(dòng)畫(huà)光標(biāo)或任何您喜歡的,如BMP圖像文件或CUR光標(biāo)文件。
BeginDrag
如果DragMode是dmAutomatic,則當(dāng)我們?cè)诳丶习聪鹿鈽?biāo)時(shí),拖動(dòng)會(huì)自動(dòng)開(kāi)始。如果您've將TImage's DragMode屬性的值保留為dmManual的默認(rèn)值,則必須使用BeginDrag/EndDrag方法來(lái)拖動(dòng)組件。拖動(dòng)的更常見(jiàn)方法是將拖動(dòng)模式設(shè)置為dmManual,并通過(guò)處理鼠標(biāo)放下事件來(lái)開(kāi)始拖動(dòng)。
現(xiàn)在,我們'將使用Ctrl+MouseDown鍵盤(pán)組合來(lái)進(jìn)行拖動(dòng)。將TImage's DragMode設(shè)置回dmManual,并像這樣編寫(xiě)MouseDown事件處理程序:
BeginDrag采用布爾參數(shù)。如果我們通過(guò)True(如本代碼),則拖動(dòng)立即開(kāi)始;如果為False,則不開(kāi)始'直到我們將鼠標(biāo)移動(dòng)短距離。請(qǐng)記住,它需要Ctrl鍵。