Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
prog:lazarus:classes:tcontrols:tcontrol_dragdrop [19/08/2024 11:13]
thierry [Gestion du Drag & Drop avec un TControl]
prog:lazarus:classes:tcontrols:tcontrol_dragdrop [19/08/2024 15:32] (Version actuelle)
thierry [DragOver]
Ligne 70: Ligne 70:
   * **Déplacement d'​objets dans une interface graphique** : Utiliser le **Drag & Drop** pour permettre aux utilisateurs de réorganiser des objets visuels (comme des icônes ou des composants) dans une application.   * **Déplacement d'​objets dans une interface graphique** : Utiliser le **Drag & Drop** pour permettre aux utilisateurs de réorganiser des objets visuels (comme des icônes ou des composants) dans une application.
   * **Transfert de données** : Implémenter le **Drag & Drop** pour permettre le transfert de données d'un contrôle à un autre, par exemple, en faisant glisser des éléments d'une liste vers une autre.   * **Transfert de données** : Implémenter le **Drag & Drop** pour permettre le transfert de données d'un contrôle à un autre, par exemple, en faisant glisser des éléments d'une liste vers une autre.
 +
 +==== DragOver ====
 +La méthode ''​DragOver''​ est un événement déclenché lorsque l'​utilisateur fait glisser un objet sur une autre zone de l'​interface utilisateur qui peut potentiellement accepter le dépôt de l'​objet.
 +
 +Voici une explication des paramètres de l'​événement ''​DragOver''​ :
 +
 +  * **Source: TObject**  ​
 +Ce paramètre fait référence à l'​objet qui est en cours de glisser.\\
 +Il peut s'agir de n'​importe quel composant ou objet que l'​utilisateur a commencé à déplacer.
 +    ​
 +Source peut aussi faire référence a un ''​TDragObject''​ si un ''​TDragObject''​ (ou descendant) a été créé lors de l'​appel de ''​OnStartDrag''​. ([[prog:​lazarus:​cas:​draganddrop#​creer_et_initialiser_le_tdragobject_dans_l_evenement_onstartdrag|Voir exemple ici]])
 +  * **X, Y: integer**  ​
 +Ces paramètres représentent les coordonnées X et Y du curseur de la souris au moment où l'​événement **DragOver** est déclenché. Les coordonnées sont données par rapport au composant qui reçoit l'​événement.
 +  * **State: TDragState**  ​
 +    Ce paramètre indique l'​état actuel de l'​opération de glisser-déposer. **TDragState** peut avoir plusieurs valeurs, telles que :
 +    * **dsDragEnter** : l'​objet vient d'​entrer dans la zone réceptrice.
 +    * **dsDragLeave** : l'​objet est en train de quitter la zone réceptrice.
 +    * **dsDragMove** : l'​objet est en train de se déplacer au-dessus de la zone réceptrice.
 +
 +
 +  * **Accept: boolean**\\ ​
 + Ce paramètre est passé par référence et est utilisé pour indiquer si la zone réceptrice accepte ou non l'​objet qui est en cours de glisser. Si vous définissez **Accept** sur `True`, cela signifie que la zone réceptrice accepte le dépôt de l'​objet. Si **Accept** est `False`, cela signifie que le dépôt n'est pas autorisé.
 +
 +**Exemple d'​utilisation :**
 +
 +Supposons que vous ayez une liste (ListBox) et que vous souhaitiez permettre aux utilisateurs de déposer des éléments dans cette liste uniquement si l'​élément provient d'une autre liste. Vous pourriez écrire un gestionnaire **DragOver** comme suit :
 +<code pascal>
 +procedure TForm1.ListBox1DragOver(Sender,​ Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
 +begin
 +  // On accepte seulement les objets provenant de ListBox2
 +  if Source is TListBox then
 +    Accept := (Source = ListBox2)
 +  else
 +    Accept := False;
 +    ​
 +    Case State of
 +      dsDragEnter : // Le drag viens d'​entrer sur ce Control
 +      dsDragLeave : // Le drag viens de sortir du Control
 +      dsDragMove : // Le drag bouge sur le Control
 +    end;
 +end;
 +</​code>​
 +Dans cet exemple, le code vérifie si l'​objet source est une **TListBox** et s'il s'agit de **ListBox2**. Si c'est le cas, le dépôt est accepté (**Accept := True**), sinon il est rejeté (**Accept := False**).
 +
  
 ===== En résumé ===== ===== En résumé =====
 Le **Drag & Drop** dans Lazarus est une fonctionnalité puissante et flexible, permettant aux développeurs de créer des interfaces utilisateur interactives et intuitives. En maîtrisant les propriétés et événements associés à **TControl**,​ vous pouvez implémenter des opérations de **Drag & Drop** simples ou complexes adaptées aux besoins de votre application. Le **Drag & Drop** dans Lazarus est une fonctionnalité puissante et flexible, permettant aux développeurs de créer des interfaces utilisateur interactives et intuitives. En maîtrisant les propriétés et événements associés à **TControl**,​ vous pouvez implémenter des opérations de **Drag & Drop** simples ou complexes adaptées aux besoins de votre application.
 +====== Sources & Ressources ======
 +  * [[prog:​lazarus:​cas:​draganddrop|Drag & Drop dans Lazarus]]
 +