Différences
Ci-dessous, les différences entre deux révisions de la page.
Prochaine révision | Révision précédente | ||
prog:lazarus:classes:tcontrols:tcontrol_dragdrop [19/08/2024 11:11] thierry créée |
prog:lazarus:classes:tcontrols:tcontrol_dragdrop [19/08/2024 15:32] (Version actuelle) thierry [DragOver] |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | ====== Gestion du Drag & Drop avec un TControl ====== | + | ====== Drag & Drop avec un TControl ====== |
Le **Drag & Drop** est une fonctionnalité permettant de cliquer sur un élément, de le déplacer tout en maintenant le bouton de la souris enfoncé, puis de le déposer à un autre endroit. Dans Lazarus, cette fonctionnalité peut être implémentée sur des composants dérivés de **TControl**. Cet article explique comment gérer le Drag & Drop d'un **TControl**. | Le **Drag & Drop** est une fonctionnalité permettant de cliquer sur un élément, de le déplacer tout en maintenant le bouton de la souris enfoncé, puis de le déposer à un autre endroit. Dans Lazarus, cette fonctionnalité peut être implémentée sur des composants dérivés de **TControl**. Cet article explique comment gérer le Drag & Drop d'un **TControl**. | ||
Ligne 26: | Ligne 26: | ||
Voici un exemple de code montrant comment implémenter une fonctionnalité de **Drag & Drop** simple entre deux **TControl** : | Voici un exemple de code montrant comment implémenter une fonctionnalité de **Drag & Drop** simple entre deux **TControl** : | ||
- | ```pascal | + | <code delphi> |
procedure TForm1.FormCreate(Sender: TObject); | procedure TForm1.FormCreate(Sender: TObject); | ||
begin | begin | ||
Ligne 54: | Ligne 54: | ||
ShowMessage('Contrôle déposé avec succès !'); | ShowMessage('Contrôle déposé avec succès !'); | ||
end; | end; | ||
- | ``` | + | </code> |
===== Explication du Code ===== | ===== Explication du Code ===== | ||
* **FormCreate** : Dans cette méthode, nous configurons **SourceControl** pour qu'il commence automatiquement une opération de Drag & Drop lorsqu'il est déplacé (en définissant **DragMode** à **dmAutomatic**). Nous définissons également un curseur spécifique (**DragCursor**). | * **FormCreate** : Dans cette méthode, nous configurons **SourceControl** pour qu'il commence automatiquement une opération de Drag & Drop lorsqu'il est déplacé (en définissant **DragMode** à **dmAutomatic**). Nous définissons également un curseur spécifique (**DragCursor**). | ||
Ligne 71: | 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]] | ||
+ | |||