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.