Problema con IDropTarget durante l'utilizzo con un modulo VCL
-
05-07-2019 - |
Domanda
Ho una GUI VCL sviluppata in Codegear. Ho creato un DropTarget per il mainform e l'oggetto DropTarget implementa l'interfaccia IDropTarget che mi permette di trascinare e rilasciare i file da Explorer. Ora, poiché desidero solo alcuni dei componenti figlio come destinazioni di rilascio (non l'intero modulo), ho solo il metodo DragEnter che restituisce S_OK quando le coordinate POINTL rientrano nei limiti del componente.
Tuttavia, se trascino lentamente l'elemento nei limiti del modulo ma non nel componente, DragEnter restituisce E_NOINTERFACE, quindi non consento un rilascio. Se continuo a trascinare nel dropzone, DragEnter non si attiva, capisco perché non si attiva. Quindi la mia domanda è come posso attivare manualmente l'evento DragEnter ?
Soluzione
Sembra che tu stia ignorando che IDropTarget ha un metodo DragOver () che devi usare oltre a DragEnter (). Se DragEnter () non inizia con le coordinate consentite, devi restituire S_OK
con il parametro pdwEffect impostato su DROPEFFECT_NONE
, quindi lasciare che DragOver () continui a fare controllo delle coordinate in seguito.
Inoltre, poiché si desidera trascinare solo su un controllo specifico, è necessario chiamare RegisterDragDrop () per ciascuno di quei singoli controlli (supponendo che siano discendenti di TWinControl), non per il TForm stesso.