TreeViewToArray

Partagez vos scripts, et vos applications AutoIt.
Règles du forum
.
Répondre
Koudou
Niveau 1
Niveau 1
Messages : 8
Enregistré le : sam. 16 avr. 2016 22:43
Status : Hors ligne

TreeViewToArray

#1

Message par Koudou »

Bonjour,

Etrangement je n'ai pas trouvé une fonction TreeViewToArray, ni dans GUITreeview.au3 ni sur les forums. Je poste donc ici une version pour ceux qui, comme moi, pourraient en avoir l'utilité.

Cette fonction parcours une treeview et génère un tableau avec une ligne par item et une colonne par niveau.
Func TreeViewToArray($idTreeView)
   Local $count = _GUICtrlTreeView_GetCount($idTreeView)
   Local $level
   Local $item = _GUICtrlTreeView_GetFirstItem($idTreeView)
   Local $max = 1
   Local $result[$count][$max]
   For $i = 0 to $count-1
     $level = _GUICtrlTreeView_Level($idTreeView,$item) +1
     If $level > $max Then
       $max = $level
       ReDim $result[$count][$max]
     EndIf
     $tmp = StringSplit(_GUICtrlTreeView_GetTree($idTreeView,$item), "|")
     For $j = 1 to $tmp[0]
       $result[$i][$j-1] = $tmp[$j]
     Next
     $item = _GUICtrlTreeView_GetNext($idTreeView,$item)
   Next
   Return $result
EndFunc
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: TreeViewToArray

#2

Message par mikell »

En général il est de bonne pratique de poster un petit script d'exemple fonctionnel pour accompagner l'udf ... :wink:
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Koudou
Niveau 1
Niveau 1
Messages : 8
Enregistré le : sam. 16 avr. 2016 22:43
Status : Hors ligne

Re: TreeViewToArray

#3

Message par Koudou »

Et hop !
#include <GUIConstantsEx.au3>
#include <GuiTreeView.au3>
#include <Array.au3>

GUICreate("My GUI with treeview", 300, 400)
Opt("GUIOnEventMode", 1)
GUISetOnEvent($GUI_EVENT_CLOSE, "Quit")
GUISetState(@SW_SHOW)

Global $MyTree = GUICtrlCreateTreeView(25, 20, 250, 300, BitOR($TVS_EDITLABELS, $TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS))
Local $items[8][4][4]
For $i = 0 to 7
   $items[$i][0][0] = _GUICtrlTreeView_AddChild($MyTree, 0, $i)
   For $j = 1 to 3
     $items[$i][$j][0] = _GUICtrlTreeView_AddChild($MyTree, $items[$i][0][0], $i & "-" & $j)
     For $k = 1 to 3
       $items[$i][$j][$k] = _GUICtrlTreeView_AddChild($MyTree, $items[$i][$j][0], $i & "-" & $j & "-" & $k)
     Next
   Next
Next

GUICtrlCreateButton("Exporter sous forme de tableau...", 50, 350, 200, 25)
GUICtrlSetOnEvent(-1, "Display")


While 1
   Sleep(100)
WEnd

Func Quit()
   Exit
 EndFunc

Func Display()
   $array = TreeViewToArray($MyTree)
   _ArrayDisplay($array)
EndFunc

Func TreeViewToArray($idTreeView)
   Local $count = _GUICtrlTreeView_GetCount($idTreeView)
   Local $level
   Local $item = _GUICtrlTreeView_GetFirstItem($idTreeView)
   Local $max = 1
   Local $result[$count][$max]
   For $i = 0 to $count-1
     $level = _GUICtrlTreeView_Level($idTreeView,$item) +1
     If $level > $max Then
       $max = $level
       ReDim $result[$count][$max]
     EndIf
     $tmp = StringSplit(_GUICtrlTreeView_GetTree($idTreeView,$item), "|")
     For $j = 1 to $tmp[0]
       $result[$i][$j-1] = $tmp[$j]
     Next
     $item = _GUICtrlTreeView_GetNext($idTreeView,$item)
   Next
   Return $result
EndFunc
[/code]
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: TreeViewToArray

#4

Message par mikell »

C'est beaucoup mieux :mrgreen:
Bonne idée cette fonction. Idéalement il faudrait lui intégrer de la gestion d'erreur, et prévoir/anticiper d'éventuels petits soucis, par exemple dans ce cas :

Code : Tout sélectionner

       For $j = 1 to 3
          $items[$i][$j][0] = _GUICtrlTreeView_AddChild($MyTree, $items[$i][0][0], "|" & Chr(Random(65, 90, 1)))
où la treeview s'affiche correctement mais la fonction plante
Après ça tu pourrais la mettre dans 'Fonctions et udfs' :wink:
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Répondre