C++ Builder 實現控制項拖放操作

來源:互聯網
上載者:User

5.1 實現控制項拖放操作
拖放是使用者操縱對象的常用的方法。使用者可拖動整個控制項,或將某一個控制項(如列表框或樹狀檢視)中的項拖動到另一個控制項中。
· 開始拖動操作。
· 接受被拖動的項。
· 放下項。
· 終止拖動操作。
· 通過拖動對象定製拖放操作。
· 改變拖動滑鼠指標。

5.1.1開始拖動操作
每個控制項都有DragMode屬性用以確定如何初始化。若DragMode值為dmAutomatic,那麼當使用者將游標置於控制項上並按下滑鼠鍵時拖動操
作自動開始。因為dmAutomatic可能會影響通常的滑鼠活動,所以可把DragMode設為dmManual(預設值),通過處理滑鼠按下事件開始
拖動操作。

為手動開始控制項拖動操作,可調用該控制項
BeginDrag方法。BeginDrag需要一個布爾型參數Immediate。若其為true,拖動操作立即開始;若其為false,則拖動操作在
使用者將滑鼠拖動一段短距離之前不會開始。調用BeginDrag(false)允許控制項接受按一下滑鼠而不開始拖動操作。

可設定其他狀態時開始控制項拖動操作,如在調用BeginDrag方法之前通過檢查其參數確定使用者按下的是哪一個滑鼠鍵。例如,下列代碼通過將拖動操作初始化為只當滑鼠左鍵被按下時才開始在處理檔案清單框的滑鼠按下事件。

5.1.2接受拖動項
當使用者拖動某項經過一個控制項上方時,該控制項收到OnDragOver事件,這時必須指示出,若使用者將拖動項放在此處,控制項是否能接受拖動項。拖動游標的更
改指示出控制項是否能接受該拖動項。為接受經過控制項上方的拖動項,應為控制項的OnDragOver事件編寫事件處理常式。
drag-over事件有一參數Accept,若需接受拖動項,可在事件處理常式中將其設為true。若Accept為true,應用程式將向控制項發送一
個drag-drop事件。drag-over事件還有其他的參數,包括拖動項的源及滑鼠游標的當前位置,這些參數也可供事件處理常式確定是否接受放下操
作。下例中,一個分類樹視圖只當拖動項來自檔案清單框時才接受它們。

5.1.3放下項
若一個控制項指示它能接受拖動項,它也應處理要被放下的項。為處理被放下的項,可為接受放下操作的控制項的OnDragDrop事件編寫事件處理常式。與
drag-over事件相似,drag-drop事件指示拖動項的源及在接受控制項上方的滑鼠游標的座標。後者允許監視項被拖動的路徑;例如,可使用這個信
息來改變有其他控制項經過的組件的顏色。

下例中,一分類樹視圖接受來自檔案清單框的拖動項,對應於移動檔案到某個目錄中並放下檔案。

5.1.4 終止拖動操作
當拖動項被成功地放下或在不能接受它的控制項上方被釋放時,拖動操作結束。此時end-drag事件被發給拖動項的原始檔控制。為使原始檔控制響應拖動結束,應為控制項的OnEndDrag事件編寫事件處理常式。
OnEndDrag事件中最重要的參數是Target,它指出哪一個控制項(若存在)接受了放下操作。若
Target為null,則意味著沒有控制項接受拖動項。OnEndDrag事件還包含接受控制項的座標。在下例中,檔案清單框通過重新整理其檔案清單處理end-drag事件。

5.1.5通過拖動對象定製拖放操作


用TDragObject的衍生類別來定製對象的拖放操作。標準的drag-over和drag-drop事件指出拖動項的源及接受控制項上方滑鼠游標的坐
標。要得到附加的狀態資訊,可從TDragObject派生一個定製的拖動對象並覆蓋其虛擬方法。可在OnStartDrag事件中建立這個定製對象。
通常,drag-over和drag-drop事件中的源參數是指拖動操作開始的控制項。若不同類型的控制項需開始相同的資料的拖動操作,則源需要支援各類控
件。當使用TDragObject的派生對象時,源即是拖動對象本身;若每個控制項都在其OnStartDrag事件中建立相同類型的拖動對象,則目標只需
處理一種類型的對象。

drag-over和drag-drop事件能通過調用IsDragObject函數得知源是拖動對象還是控制項。拖動對象可使你在應用程式主EXE檔案實現的表單和DLL實現的表單之間拖動項,或在不同的DLL實現的表單之間拖動項。

5.1.6 改變拖動滑鼠指標

通過設定源組件的DragCursor屬性可定製拖動操作期間滑鼠指標的外觀。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.