Drag&Drop sur un composant TTreeView

Il y a drag&drop et drag&drop...

Dans le cas d'un composant TTreeView qui permet de proposer une vue arborescente de données il est possible de faire des changements dans les éléments de la liste mais aussi de récupérer des éléments venant de l'extérieur.

Il se trouve que l'événement habituel onDragDrop n'est utilisé que dans le second cas : lorsqu'on déplace un élément extérieur vers le TTreeView. Si en plus on déplace cet élément vers un élément TTreeViewItem, c'est lui qui aura son onDragDrop déclenché et s'il n'est pas rempli c'est le TTreeView qui en hérite.

En revanche, quand on fait du Drag&Drop des éléments de la liste à l'intérieur de celle-ci (en mettant à True la propriété AllowDrag du TTreeView), ce n'est pas onDragDrop qui est appelé à la fin de l'opération mais l'événement onDragChange... qui permet d'indiquer au composant s'il doit déplacer les éléments mais aussi pour nous de faire les opérations de modification dans nos données comme un changement en base ou dans une liste.

Les événements onDragLeave et onDragOver sont en revanche bien utilisés dans les deux cas.

Un peu piégeux quand on ne s'y attend pas, mais maintenant vous saurez.

Reportez-vous à ce programme pour faire vos propres tests.


A lire aussi

Drag&Drop sur un composant TTreeView (05/04/2018)
Obtenir le nom de l'appareil sur lequel un programme Delphi s'exécute. (07/12/2017)
Installer les composants de JVESOFT dans Delphi (18/10/2017)
Saisir des textes avec mise en forme et les afficher tels quels grâce aux composants de TMS Software (14/10/2017)
Utilisation des fontes TrueType avec Firemonkey (10/08/2017)
La vérité ne sort pas toujours de la bouche des enfants... méfiez-vous en ! (06/08/2017)
Faire vibrer un smartphone sous iOS ou Android depuis une application développée avec Delphi (18/07/2017)
Afficher un catalogue d'images provenant d'Internet avec Delphi et Firemonkey (17/07/2017)
Ouvrir un site web dans le navigateur par défaut depuis une application Firemonkey (28/05/2017)

Membre du programme MVP.
Membre du programme MVP