Pregunta

Tengo una gui VCL desarrollada en Codegear. He creado un DropTarget para la forma principal y el objeto DropTarget implementa la interfaz IDropTarget que me permite arrastrar y soltar archivos desde el explorador. Ahora, porque solo quiero que algunos de los componentes secundarios sean objetivos de colocación (no todo el formulario), solo tengo el método DragEnter que devuelve S_OK cuando las coordenadas POINTL están dentro de los límites del componente.

Sin embargo, si arrastro el elemento lentamente hacia los límites del formulario pero no el componente, DragEnter devuelve E_NOINTERFACE, por lo tanto, no permite una caída. Si continúo arrastrando hacia la zona de arrastre, DragEnter no disparará, entiendo por qué no está disparando. Así que mi pregunta es ¿cómo puedo activar manualmente el evento DragEnter ?

¿Fue útil?

Solución

Parece que está ignorando que IDropTarget tiene un método DragOver () que debe usar además de DragEnter (). Si DragEnter () no comienza con las coordenadas que permites, entonces debes devolver S_OK con el parámetro pdwEffect establecido en DROPEFFECT_NONE y luego dejar que DragOver () continúe haciendo su verificación de coordenadas propia después.

Además, como solo desea arrastrar a un control específico, debe llamar a RegisterDragDrop () para cada uno de esos controles individuales (suponiendo que son descendientes de TWinControl), no para el propio TForm.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top