Utilisation des treeviews

gilore Messages postés 15 Date d'inscription mardi 27 juin 2006 Statut Membre Dernière intervention 26 novembre 2006 - 8 nov. 2006 à 08:16
cs_Loda Messages postés 814 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 30 juillet 2009 - 9 nov. 2006 à 09:09
bonjour tout le monde,

j'utilise un treeview pour ouvrir divers documents, mais pour mieux fonctionner, j'ai quelques problèmes à résoudre:

- je voudrais savoir comment récuperer le nom d'un noeud principale (nil) à partir de la selection d'un noeud enfant
- je n'ai pas trouvé également si il était possible de limiter le nombre de niveau d'un treeview, ou d'imposer le niveau du treeview.
- enfin, uniquement pour les derniers niveaux de mon treeview je dois ouvrir une fiche qui me permettra d'enregistrer de nouvelles données, mais comment réaliser cette événement uniquement sur le dernier niveau ...

pour être plus explicite, voici les niveaux de mon treeview :

niv 1 . root : "nom du lot" ... ouverture d'un fichier texte
niv 2 . enfant de root : "description des ouvrages "... ouverture d'un fichier texte
niv 3. enfant de niv 2 : "nature d'ouvrage" ... ouverture d'un fichier texte
niv 4 : enfant de niv 3 :"article de classement" ...... ouverture d'un fichier texte
niv 5 :  enfant de niv 4 :"article d'ouvrage" ... ouverture d'un fichier texte
niv 6 : enfant de niv 5 : article de classement ... ouverture d'un fichier texte
niv7 : enfant de niv 6 : "ouvrages" ... ouverture d'un fichier texte + ouverture d'une fiche "détails PU"

seules le niveau 7 doit déclencher d'ouverture de la fiche détails PU... je crée chaque niveau par l'intermédiaire d'un bouton sans pour autant controlé le nombre de niveau, et leurs ordres...

quelqu'un peut il me venir en aide ... ?
merci d'avance
gilroe

3 réponses

cs_Loda Messages postés 814 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 30 juillet 2009 3
8 nov. 2006 à 09:08
salut,

"je voudrais savoir comment récuperer le nom d'un noeud principale (nil) à partir de la selection d'un noeud enfant"

si il est nil, c'est qu'il n'exist pas. mais si tu veux le parent dans la hierachie: NoeudEnfant.Parent

"Je n'ai pas trouvé également si il était possible de limiter le nombre de niveau d'un treeview, ou d'imposer le niveau du treeview."
Bin lors que tu crée ton tree view, tu peux faire des test et ne créer qu'un nombre de niveau limité. (je vois pas bien ou est le problème)

UnNoeud.Level indique le niveau.

"enfin, uniquement pour les derniers niveaux de mon treeview je dois ouvrir une fiche qui me permettra d'enregistrer de nouvelles données, mais comment réaliser cette événement uniquement sur le dernier niveau ..."

dans le treeview.OnChange:
if assigned(treeview.Selected) then
if not treeview.Selected.HasChildren then TraiterDernireNiveau(treeview.Selected);

"je crée chaque niveau par l'intermédiaire d'un bouton sans pour autant controlé le nombre de niveau, et leurs ordres..." bin le problème vient peut-être de là non?
fait des test sur .Level et .HasChildren

bon code,
0
gilore Messages postés 15 Date d'inscription mardi 27 juin 2006 Statut Membre Dernière intervention 26 novembre 2006
9 nov. 2006 à 05:59
tu n'as pas bien compris, il faut dire que j'ai utilisé le terme "je" et "je" n'aurais pas du, en effet, l'objectif est que l'utilisateur final crée son treeview, d'ou le fait de vouloir bloqué délimité les possibilités.

mais je vais essayé tes propositions...
merci

Gilore
0
cs_Loda Messages postés 814 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 30 juillet 2009 3
9 nov. 2006 à 09:09
tu fais bien un truc du genre:

procedure BtnAddANodeClick...
begin
treeview1.selected.addChild(...);
end;

il suffit d'ajouter une condition avant, genre
if assigned(treeview1.selected) then
if treeview1.selected.Level < 4 then
treeview1.selected.addChild(...);


et dans le OnChange tu peux lire les info du noeud selectionné, et donc changer l'affichage.

astuce:
les noeud peuvent contenir un pointeur (.data) Ca peut être très utile. Si tu t'en sert, n'oublier pas de détruire à la main ce que tu crée à la main.

Aussi, utilise des panels pour changer facilement l'affichage. tu regroupes des compo sur un panel, comme ça tu peux affecter .visible/.enabled au panel directement. c'est plus facile :)

si t'as une question plus précise, fait un post.

bon code,
0
Rejoignez-nous