2009-07-30 70 views
0

我有一個在Codegear開發的VCL gui。我爲mainform創建了一個DropTarget,而DropTarget對象實現了IDropTarget接口,該接口允許我從資源管理器拖放文件。現在,因爲我只希望某些子組件是放置目標(而不是整個窗體),所以當POINTL座標位於組件邊界內時,我只有DragEnter方法返回S_OK。但是,如果將項目緩慢拖到窗體的邊界而不是組件中,DragEnter會返回E_NOINTERFACE,因此不允許拖放。如果我繼續拖入拖放區,DragEnter不會觸發,我明白爲什麼它不會觸發。所以我的問題是我該如何手動觸發DragEnter事件使用VCL表格時IDropTarget的問題

回答

3

聽起來就像你忽略了那樣,IDropTarget有一個DragEnter()方法,除了需要使用DragEnter()方法。如果DragEnter()不以您允許的座標開頭,那麼必須返回S_OK且pdwEffect參數設置爲DROPEFFECT_NONE,然後讓DragOver()繼續執行其自己的座標檢查。另外,由於你只想拖到特定的控件上,你應該爲每個單獨的控件(假設它們是TWinControl後裔)調用RegisterDragDrop(),而不是TForm本身。