Проблема с IDropTarget при использовании с формой VCL

StackOverflow https://stackoverflow.com/questions/1204935

  •  05-07-2019
  •  | 
  •  

Вопрос

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

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

Это было полезно?

Решение

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top