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 21:43
Status : Hors ligne

TreeViewToArray

#1

Message par Koudou » dim. 15 mai 2016 07:50

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
Modérateur
Modérateur
Messages : 5740
Enregistré le : dim. 29 mai 2011 16:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: TreeViewToArray

#2

Message par mikell » lun. 16 mai 2016 18:44

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 21:43
Status : Hors ligne

Re: TreeViewToArray

#3

Message par Koudou » mar. 17 mai 2016 20:02

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
Modérateur
Modérateur
Messages : 5740
Enregistré le : dim. 29 mai 2011 16:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: TreeViewToArray

#4

Message par mikell » mar. 17 mai 2016 21:45

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