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 ?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top