Introduction

La fonctionnalité Glisser-Déposer consiste à transférer des données entre deux composants graphiques (Liste, Arbre-Liste, Arborescence et Image) à l’aide de la souris.
Plus précisément, l’utilisateur clique sur le composant source et déplace la souris au-dessus du composant cible en conservant le bouton appuyé, puis relâche le bouton.
Il peut aussi annuler l’opération en appuyant sur la touche Echap.


Les composants peuvent appartenir à des applications ou à des fenêtres différentes.

Scénario usuel

  • Lorsque l’utilisateur clique sur un objet source avec le bouton gauche ou droit de la souris, l’objet reçoit l’évènement GD_DebutGlissement.
    Les propriétés GD_ETAT_CLAVIER et GD_ETAT_SOURIS permettent de savoir quels sont les boutons et les touches enfoncés.
     
  • Sur cet événement, le développeur utilise les méthodes GD_ECRIRE_DONNEES et GD_EXECUTER_GLISSEMENT pour indiquer les données à transférer et démarrer le mécanisme de glisser-déposer.
    Ces données peuvent être déplacées ou copiées dans l’objet cible.

    Il faut noter que les instructions placées après la méthode GD_EXECUTER_GLISSEMENT ne s’exécutent pas tant que l’action de glisser-déposer n’est pas terminée.
  • Lorsque l’utilisateur déplace la souris en maintenant le bouton appuyé, il peut survoler un objet qui peut être une cible. Un tel objet doit avoir la propriété GD_DEPOSE_AUTORISEE à *VRAI. Si ce n’est pas le cas, ou si l’objet survolé ne gère pas le glisser-déposer, le système affiche un panneau d'interdiction comme curseur de souris. Dans un objet cible, les événements suivants sont déclenchés:

    • Lorsque la souris entre dans la zone de l’objet cible, ce dernier reçoit un évènement GD_EntreeGlissement.
      Sur cet évènement, le développeur peut indiquer à travers la propriété GD_ACTION_DEPOSE de l’objet cible quel serait le résultat de l’opération si l’utilisateur relâchait la souris à ce moment. 
      Le développeur peut utiliser éventuellement les propriétés GD_ETAT_CLAVIER et GD_ETAT_SOURIS, ainsi que la méthode GD_DONNEES_DISPONIBLES pour déterminer si l’objet cible accepte une copie, un déplacement ou refuse les données.
      Il doit aussi prendre en compte la propriété GD_ACTIONS_PERMISES, qui contient les actions autorisées par l’objet source (paramètre de la méthode GD_EXECUTER_GLISSEMENT).

      Il n’est pas indispensable de programmer cet événement.
    • Lorsque la souris survole la zone de l’objet cible, ce dernier reçoit continuellement des événements GD_SurvolGlissement
      De même que ci-dessus, le développeur peut indiquer à travers la propriété GD_ACTION_DEPOSE de l’objet cible quel serait le résultat de l’opération si l’utilisateur relâchait la souris à ce moment.
      Le développeur peut utiliser éventuellement les propriétés GD_ETAT_CLAVIER et GD_ETAT_SOURIS, et la méthode GD_DONNEES_DISPONIBLES pour déterminer si l’objet cible accepte une copie, un déplacement ou refuse les données.
      Il doit aussi prendre en compte la propriété GD_ACTIONS_PERMISES, qui contient les actions autorisées par l’objet source (paramètre de la méthode GD_EXECUTER_GLISSEMENT).

    • Lorsque la souris sort de la zone de l’objet cible, ce dernier reçoit un événement GD_SortieGlissement. Il n’est pas indispensable de programmer cet évènement.

La propriété GD_ACTION_DEPOSE contient l’action indiquée lors de l’événement GD_SurvolGlissement (_GD_ACTION_COPIE ou _GD_ACTION_DEPLACEMENT).
Le développeur utilise la méthode GD_LIRE_DONNEES pour récupérer les données transférées.

  • Dans l’événement GD_DebutGlissement, la méthode GD_EXECUTER_GLISSEMENT se termine et le développeur doit supprimer les données transférées de l’objet source dans le cas où l’action a été un déplacement.