«Glisser-déposer», c'est maintenir enfoncé le bouton de la souris de l'ordinateur lorsque la souris est déplacée, puis relâcher le bouton pour déposer l'objet. Delphi facilite la programmation du glisser-déposer dans les applications.
Vous pouvez vraiment faire glisser et déposer de / vers où vous le souhaitez, comme d'un formulaire à un autre, ou de l'Explorateur Windows vers votre application.
Démarrez un nouveau projet et placez un contrôle d'image sur un formulaire. Utilisez l'inspecteur d'objets pour charger une image (propriété Image), puis définissez DragMode propriété à dmManual. Nous allons créer un programme qui permettra de déplacer un runtime de contrôle TImage en utilisant la technique du glisser-déposer.
Les composants permettent deux types de glissement: automatique et manuel. Delphi utilise la propriété DragMode pour contrôler le moment où l'utilisateur peut faire glisser le contrôle. La valeur par défaut de cette propriété est dmManual, ce qui signifie que le déplacement des composants autour de l'application n'est pas autorisé, sauf dans des circonstances spéciales, pour lesquelles nous devons écrire le code approprié. Quel que soit le paramètre de la propriété DragMode, le composant se déplacera uniquement si le code correct est écrit pour le repositionner.
L'événement qui reconnaît le glisser-déposer est appelé événement OnDragDrop. Nous l'utilisons pour spécifier ce que nous voulons faire lorsque l'utilisateur dépose un objet. Par conséquent, si nous voulons déplacer un composant (image) vers un nouvel emplacement sur une fiche, nous devons écrire du code pour le gestionnaire d'événement OnDragDrop de la fiche.
Le paramètre Source de l'événement OnDragDrop est l'objet en cours de suppression. Le type du paramètre source est TObject. Pour accéder à ses propriétés, nous devons le convertir dans le type de composant correct, qui dans cet exemple est TImage.
Nous devons utiliser l'événement OnDragOver du formulaire pour signaler que le formulaire peut accepter le contrôle TImage que nous voulons y déposer. Bien que le paramètre Accept ait la valeur par défaut True, si aucun gestionnaire d'événements OnDragOver n'est fourni, le contrôle rejette l'objet glissé (comme si le paramètre Accept était changé en False).
Exécutez votre projet et essayez de faire glisser et de déposer votre image. Notez que l'image reste visible à son emplacement d'origine pendant le déplacement du pointeur de la souris. Nous ne pouvons pas utiliser la procédure OnDragDrop pour rendre le composant invisible pendant le déplacement, car cette procédure n'est appelée qu'après que l'utilisateur a déposé l'objet (le cas échéant).
Si vous souhaitez modifier l'image du curseur présentée lors du déplacement du contrôle, utilisez la propriété DragCursor. Les valeurs possibles pour la propriété DragCursor sont les mêmes que celles de la propriété Cursor. Vous pouvez utiliser des curseurs animés ou tout ce que vous voulez, comme un fichier image BMP ou un fichier curseur CUR.
Si DragMode est automatique, le glissement commence automatiquement lorsque nous appuyons sur un bouton de la souris avec le curseur sur le contrôle. Si vous avez laissé la valeur de la propriété DragMode de TImage à sa valeur par défaut dmManual, vous devez utiliser les méthodes BeginDrag / EndDrag pour permettre le glissement du composant. Un moyen plus courant de glisser-déposer consiste à définir DragMode sur dmManual et à démarrer le glissement en gérant les événements de souris.
Maintenant, nous allons utiliser le Ctrl + SourisDown combinaison de touches pour permettre le glissement. Définissez DragMode de TImage sur dmManual et écrivez le gestionnaire d'événements MouseDown comme ceci:
BeginDrag prend un paramètre booléen. Si nous passons True (comme dans ce code), le glissement commence immédiatement; si False, il ne démarre que lorsque nous déplaçons la souris sur une courte distance. N'oubliez pas qu'il nécessite la touche Ctrl.