0

Codegearで開発されたVCLGUIがあります。メインフォーム用のDropTargetを作成し、DropTargetオブジェクトはIDropTargetインターフェイスを実装しており、エクスプローラーからファイルをドラッグアンドドロップできます。子コンポーネントの一部(フォーム全体ではなく)のみをドロップターゲットにしたいので、POINTL座標がコンポーネントの境界内にある場合にのみ、DragEnterメソッドがS_OKを返すようにします。

ただし、アイテムをフォームの境界にゆっくりとドラッグし、コンポーネントをドラッグしない場合、DragEnterはE_NOINTERFACEを返すため、ドロップは許可されません。ドロップゾーンにドラッグし続けると、DragEnterが起動しません。なぜ、起動しないのか理解できます。だから私の質問は、DragEnterイベントを手動で発生させるにはどうすればよいですか?

4

1 に答える 1

3

IDropTargetにDragEnter()に加えて使用する必要のあるDragOver()メソッドがあることを無視しているように聞こえます。DragEnter()が許可された座標で始まらない場合はS_OK、pdwEffectパラメーターをに設定して戻りDROPEFFECT_NONE、その後、DragOver()に独自の座標チェックを続行させる必要があります。

さらに、特定のコントロールにのみドラッグする必要があるため、TForm自体ではなく、個々のコントロール(TWinControlの子孫であると想定)ごとにRegisterDragDrop()を呼び出す必要があります。

于 2009-08-03T23:11:22.983 に答える