VCLフォームで使用する場合のIDropTargetの問題
-
05-07-2019 - |
質問
Codegearで開発されたVCL guiがあります。メインフォームのDropTargetを作成しました。DropTargetオブジェクトはIDropTargetインターフェイスを実装しており、エクスプローラーからファイルをドラッグアンドドロップできます。子コンポーネントの一部のみをドロップターゲットにする(フォーム全体ではない)ため、POINTL座標がコンポーネントの境界内にある場合にのみDragEnterメソッドがS_OKを返すようにします。
ただし、コンポーネントではなくフォームの境界にアイテムをゆっくりとドラッグすると、DragEnterはE_NOINTERFACEを返すため、ドロップできません。ドロップゾーンにドラッグし続けると、DragEnterが起動しません。なぜ起動しないのかがわかります。私の質問は、どうすればDragEnterイベントを手動で起動できますかですか?
解決
IDropTargetにはDragEnter()に加えて使用する必要があるDragOver()メソッドがあることを無視しているように聞こえます。 DragEnter()が許可された座標で始まらない場合は、pdwEffectパラメーターを DROPEFFECT_NONE
に設定して S_OK
を返してから、DragOver()でその処理を続行する必要がありますその後、独自の座標チェック。
さらに、特定のコントロールにのみドラッグするため、TForm自体ではなく、個々のコントロール(TWinControlの子孫であると想定)ごとにRegisterDragDrop()を呼び出す必要があります。
所属していません StackOverflow