質問

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()を呼び出す必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top