TrreView [Résolu]

Signaler
Messages postés
104
Date d'inscription
mardi 13 novembre 2007
Statut
Membre
Dernière intervention
13 août 2020
-
Messages postés
104
Date d'inscription
mardi 13 novembre 2007
Statut
Membre
Dernière intervention
13 août 2020
-
Bonjour
Soit un TreeView avec plusieurs noeuds dans la racine. Chaque noeud pouvant avoir ou pas des enfants. Suivant croquis ci dessous
| Parent_0 (sans enfant)
| Parent_1 (avec 2 enfants) 
          | Enfant_0 de parent_1
          | Enfant_1 de parent_1
| Parent_2 (sans enfant)
| Parent_3 (avec 1 enfant)
          | Enfant_0 du parent_3

Comment peut on récupérer le nom du noued parent d'un enfant lors d'un clic sur le nom de l'enfant.
Exemples
[list]
Clic sur Enfant_1 de parent_1 doit renvoyer Parent_1
Clic sur Parent_2 doit renvoyer Parent_2
Clic sur Enfant_0 de parent_3 doit renvoyer Parent_3
/list

En vous remerciant par avance de votre aide

pierrot

3 réponses

Messages postés
257
Date d'inscription
lundi 27 octobre 2003
Statut
Membre
Dernière intervention
20 août 2020
8
Salut
function TreeNodeParent(aTree: TTreeNode): string;
begin
    if aTree.Parent.Index = -1 then
        Result := aTree.Text
    else
        Result := aTree.Parent.Text;
end;

Exemple d'utilisation
Edit1.Text := TreeNodeParent(TreeView1.Selected);

@+
Messages postés
104
Date d'inscription
mardi 13 novembre 2007
Statut
Membre
Dernière intervention
13 août 2020
2
Bonjour,
Merci de ton aide.
C'est la 1ère fois que j'utilise le TTreeView et dans tous ces noeuds je m'en suis fait des sacs ......de noeuds
Dans mon TTreeView j'ai des parents qui ont des enfants , des petits enfants et des petits petits enfants. Il fallait donc remonter à la racine sans en oublier.
Voici la fonction que j'ai tiré de ton exemple.


Function GetRacine(aTV: TTreeView): string;
Var NoeudSelected, NoeudParent: TTreeNode;
n: Integer;
cRacine: String;
Begin
cRacine := '';
NoeudSelected := aTV.Selected;
n := NoeudSelected.Level;
if n = 0 then
Result := NoeudSelected.Text
else begin
cRacine := NoeudSelected.Text;
Repeat
NoeudParent := NoeudSelected.Parent;
cRacine := NoeudParent.Text + '\' + cRacine;
NoeudSelected := NoeudParent;
Dec(n);
until n = 0;
Result := cRacine;
end;
end;


Appelée par


procedure TForm1.TVClick(Sender: TObject);
begin
Edit1.Text := GetRacine(TV);
end;


Merci encore

pierrot
Messages postés
104
Date d'inscription
mardi 13 novembre 2007
Statut
Membre
Dernière intervention
13 août 2020
2
Bonjour,
J'étais trop heureux du résultat. Après réflexion j'ai optimisé cette fonction .


Function GetRacine(aTV: TTreeView): string;
Var NoeudSelected, NoeudParent: TTreeNode;
    n: Integer;
    cRacine: String;
Begin
   NoeudSelected := aTV.Selected;
   n := NoeudSelected.Level;
   cRacine := NoeudSelected.Text;
   While n <> 0 do begin
      NoeudParent := NoeudSelected.Parent;
      cRacine := NoeudParent.Text + '\' + cRacine;
      NoeudSelected := NoeudParent;
      Dec(n);
   end;
   Result := cRacine;
end;



pierrot