Voilou ma question : comment on fait un drag and drop dans un TreeView ?
En gros, mon treeview réprésente des fichiers, et je voudrais les déplacer, voir les mettre les uns dans les autres.
Merki d'avance pour toute aide![]()
Voilou ma question : comment on fait un drag and drop dans un TreeView ?
En gros, mon treeview réprésente des fichiers, et je voudrais les déplacer, voir les mettre les uns dans les autres.
Merki d'avance pour toute aide![]()
Il y a plein d'exemples dans l'aide :
Ici, c'est avec une ListBox, mais le principe reste le même avec un TreeView.OnDragOver, OnDragDrop, exemple
Ce code provient d'une application qui contient une boîte liste et trois libellés, chacun avec une couleur et fonte différentes. La propriété DragMode de chacun de ces libellés est dmAutomatic. L'utilisateur peut sélectionner un libellé et le glisser vers une boîte liste. Lorsque le libellé est déplacé, les éléments de la boîte liste ont la fonte et la couleur de ce dernier.
Ce gestionnaire d'événement OnDragOver permet à la boîte liste d'accepter un libellé déplacé :
void __fastcall TForm1::ListBox1DragOver(TObject *Sender, TObject *Source, int X, int Y, TDragState State, bool &Accept)
{
Accept = Source->ClassNameIs("TLabel");
}
Ce gestionnaire d'événement OnDragDrop implémente le comportement d'un objet "déplacé".
void __fastcall TForm1::ListBox1DragDrop(TObject *Sender, TObject *Source, int X, int Y)
{
if (Sender->ClassNameIs("TListBox") && Source->ClassNameIs("TLabel"))
{
TListBox *DestList = (TListBox *)Sender;
DestList->Font = ((TLabel *)Source)->Font;
DestList->Color = ((TLabel *)Source)->Color;
}
}
Salut,
Voila un bout de code bricolé pour un test similaire avec deux treeview, ils contiennent tout deux deux racines 'A' et 'B' (par ex) avec la possibilité de déplacer un enfant du treeview1 en A, dans la racine B du treeview2 en ayant un message demandant la validation a l'utilisateur.
Rien d'exceptionnel donc, en espérant que cela te serve...
@ +
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42 void __fastcall TForm2::TreeDestDragDrop(TObject *Sender, TObject *Source, int X, int Y) { if (Source->ClassNameIs("TTreeView")) { TTreeView *pView = dynamic_cast < TTreeView * > (Source); TTreeNode *pNode = pView->Selected->Parent; TTreeNode *pNodeDest = Form2->TreeDest->DropTarget; TTreeNode *pNodeExport = pView->Selected; pNodeExport->ImageIndex = 1; if (pNode->Text.operator ==(pNodeDest->Text)) { Form2->TreeDest->Items->AddChild(pNodeDest, pView->Selected->Text); pNodeExport->ImageIndex = 2; pNode = pView->Selected; delete (pNode); } else { if (MessageDlg(AnsiString("Voulez vous changer de catégorie : ") + pView->Selected->Text + (" cat : ") + pNode->Text + (" en cat : ") + pNodeDest->Text + (" ?"), mtConfirmation, TMsgDlgButtons()<<mbYes<<mbNo, 0) == mrYes) { int i = pNode->Text.Length(); pView->Selected->Text.Delete(1, i); pView->Selected->Text.Insert(pNodeDest->Text, 1); Form2->TreeDest->Items->AddChild(pNodeDest, pView->Selected->Text); pNodeExport->ImageIndex = 2; pNode = pView->Selected; delete (pNode); } } } } //--------------------------------------------------------------------------- void __fastcall TForm2::TreeDestDragOver(TObject *Sender, TObject *Source, int X, int Y, TDragState State, bool &Accept) { Accept = Source->ClassNameIs("TTreeView"); } //---------------------------------------------------------------------------
NB : ces évènements sont ceux du 'treeview2', celui qui reçoit les items en qqsorte.
Super Cantrelle ! ca va bien m'aider !
Merci quand même 10_GOTO_10, mais les listbox et treeview ca marche po pareil pour le drag and drop.
![]()
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager