Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Pages: 1
Le parcours d'un treevuew de manière à récupérer toutes les références des items enfants d'un item est assez fastidieux à mettre au point compte tenu d'un double appel recursif.
Pour tous ceux qui seraient confronté à ce problème :
Notez que chaque item doit se déployer afin que l'on puise acceder à ses enfants, il conviendra si besoin de "reployer" le treeVieuw en fin de traitement
//--------------------------------------------------------------------------------------------------------------------------------------------- // Nom de la routine of_scanTreeVieuw() //---------------------------------- // Objet : A partir d'un item d'un treeVieuw aliment un tabeau de tous ses fils //--------------------------------- // Déclencheur : routine de services //-------------------------------- // Arguments : atv, référence à un treeVieuw // atv_itemCurrent, référence à l'item du treeVieuw dont on soihaite récupérer tous les enfants // atv_item[], tableau qui sera retourne par référence avec tous les fils de l'item atv_item, le tableau // lors du premier appel contient la référence à l'item dont on souhaite obtenir les enfants //------------------------------------------------------------------------------------------------------------------------------------------------ Long ltvi_handleItem // Identifiant d'un item de treeVieuw Long ltvi_handleItemChild // Identifiant d'un enfant de ltvi_handleItem TreeViewItem ltv_itemScan // Item du treeVieuw en cours de balayage Int li_dimItem // Dimension du tableau atv_item[] afin d'insérer à un niveau supérieur les items li_dimItem = upperBound(atv_item[]) + 1 atv_item[li_dimItem] = atv_itemCurrent // Insertion de l'item passé en argument ltvi_handleItem = atv_itemCurrent.itemhandle // Récupération du pointeur de l'item atv.ExpandItem (ltvi_handleItem) // Déploie un niveau de l'item ltvi_handleItemChild = atv.FindItem(ChildTreeItem!,ltvi_handleItem) // Recherche des enfants pour l'item courant If ltvi_handleItemChild <> - 1 then // L'item courant possède t'il des enfants ? atv.GetItem(ltvi_handleItemChild,ltv_itemScan) // Récupération de la référence of_scanTreeVieuw(atv,ltv_itemScan,atv_item[]) // Ré-appel récursive End if // Une fois l'appel des enfants terminé, on parcours ses voisins ltvi_handleItem = atv.FindItem(nextTreeItem!,ltvi_handleItem) // Recherche des voisins pour l'item Do while ltvi_handleItem <> -1 // Balayage tant qui il y a des voisins li_dimItem = upperBound(atv_item[]) + 1 atv.getItem(ltvi_handleItem ,atv_item[li_dimItem]) // Enregistrement de l'item courant dans le tableau atv.ExpandItem (ltvi_handleItem) // Déploie un niveau de l'item ltvi_handleItemChild = atv.FindItem(ChildTreeItem!,ltvi_handleItem) // If ltvi_handleItemChild <> - 1 then // Le voisin a t'il des enfants ? atv.GetItem(ltvi_handleItemChild,ltv_itemScan) // Récupération de la référence of_scanTreeVieuw(atv,ltv_itemScan,atv_item[]) // Ré-appel récursive End if ltvi_handleItem = atv.FindItem(nextTreeItem!,ltvi_handleItem) // Puis tant qu'il y a des voisins, on les parcours Loop
Dernière modification par Dadone (14-11-2008 21:09:21)
Hors ligne
à toi
Hors ligne
Pages: 1