Проблема с IDropTarget при использовании с формой VCL - PullRequest
0 голосов
/ 30 июля 2009

У меня есть графический интерфейс VCL, разработанный в Codegear. Я создал DropTarget для основной формы, а объект DropTarget реализует интерфейс IDropTarget, который позволяет перетаскивать файлы из проводника. Теперь, поскольку я хочу, чтобы только некоторые дочерние компоненты были объектами удаления (а не всей формой), у меня есть метод DragEnter, возвращающий S_OK, только когда координаты POINTL находятся в пределах компонента.

Однако, если я медленно перетаскиваю элемент в границы формы, но не в компонент, DragEnter возвращает E_NOINTERFACE, поэтому не разрешает удаление. Если я продолжу перетаскивать в зону сброса, DragEnter не будет срабатывать, я понимаю, почему он не стреляет. Так что мой вопрос как я могу вручную запустить событие DragEnter ?

1 Ответ

3 голосов
/ 04 августа 2009

Похоже, вы игнорируете, что IDropTarget имеет метод DragOver (), который вам нужно использовать в дополнение к DragEnter ().Если DragEnter () не начинается с разрешенных вами координат, вы должны вернуть S_OK с параметром pdwEffect, установленным в DROPEFFECT_NONE, а затем позволить DragOver () продолжить выполнять свою собственную проверку координат впоследствии.

Кроме того, поскольку вы хотите перетащить только на определенный элемент управления, вы должны вызывать RegisterDragDrop () для каждого из этих отдельных элементов управления (при условии, что они являются потомками TWinControl), а не для самой TForm.

...