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.
La gestion du Drag & Drop dans Lazarus repose sur plusieurs événements et propriétés définis dans TControl. En comprenant et en manipulant ces événements, il est possible de permettre à un contrôle de devenir une source ou une destination de Drag & Drop.
Les propriétés suivantes de TControl sont essentielles pour implémenter le Drag & Drop :
Plusieurs événements de TControl permettent de gérer le Drag & Drop de manière personnalisée :
Voici un exemple de code montrant comment implémenter une fonctionnalité de Drag & Drop simple entre deux TControl :
procedure TForm1.FormCreate(Sender: TObject); begin // Configuration initiale du contrôle source SourceControl.DragMode := dmAutomatic; SourceControl.DragCursor := crDrag; // Configuration du contrôle cible pour accepter le Drag & Drop TargetControl.OnDragOver := @TargetControlDragOver; TargetControl.OnDragDrop := @TargetControlDragDrop; end; procedure TForm1.SourceControlStartDrag(Sender: TObject; var DragObject: TDragObject); begin // Logique personnalisée au début du drag end; procedure TForm1.TargetControlDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); begin // Vérifier si la cible accepte le contrôle source Accept := Source is TControl; // Accepte le drag si la source est un TControl end; procedure TForm1.TargetControlDragDrop(Sender, Source: TObject; X, Y: Integer); begin // Logique lorsque le contrôle est déposé sur la cible ShowMessage('Contrôle déposé avec succès !'); end;
Le Drag & Drop dans Lazarus peut être personnalisé de plusieurs façons :
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
:
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
. (Voir exemple ici)
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.
Ce paramètre indique l'état actuel de l'opération de glisser-déposer. TDragState peut avoir plusieurs valeurs, telles que :
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 :
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;
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).
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.