Question

J'ai une interface graphique VCL développée dans Codegear. J'ai créé un DropTarget pour le mainform et l'objet DropTarget implémente l'interface IDropTarget qui me permet de glisser-déposer des fichiers depuis l'explorateur. Maintenant, parce que je veux seulement que certains composants enfants soient des cibles de dépôt (pas la forme entière), je n’ai que la méthode DragEnter qui retourne S_OK lorsque les coordonnées POINTL sont dans les limites du composant.

Toutefois, si je déplace lentement l'élément dans les limites de la fiche mais pas dans le composant, DragEnter renvoie E_NOINTERFACE et n'autorise donc pas de suppression. Si je continue à glisser dans la zone de dépôt, DragEnter ne se déclenche pas, je comprends pourquoi il ne se déclenche pas. Ma question est donc comment puis-je déclencher manuellement l'événement DragEnter ?

Était-ce utile?

La solution

On dirait que vous ignorez qu'IDropTarget a une méthode DragOver () que vous devez utiliser en plus de DragEnter (). Si DragEnter () ne commence pas par les coordonnées que vous autorisez, vous devez renvoyer S_OK avec le paramètre pdwEffect défini sur DROPEFFECT_NONE , puis laisser DragOver () poursuivre son exécution. vérification des coordonnées par la suite.

De plus, comme vous souhaitez uniquement faire glisser un contrôle sur un contrôle spécifique, vous devez appeler RegisterDragDrop () pour chacun de ces contrôles (en supposant qu'il s'agisse de descendants de TWinControl), et non pour TForm lui-même.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top