TreeviewOrder.au3 -- Treeview Inhalt in Datei speichern und aus Datei laden

    • Offizieller Beitrag

    Eine aktuelle Fragestellung im Forum hat mich dazu angeregt, diese Erweiterung für die Treeview Funktionen zu erstellen.

    • _GUICtrlTreeView_CreateItemFromOrderFile
    Erstellt Treeview Item aus einer Datei gemäß der gespeicherten Ordnung.
    Root hat die Ornungsnummer "0". Childs unter Root bekommen "0.1", "0.2" ...
    Deren Childs erhalten dann "0.1.1", "0.1.2", "0.2.1", "0.2.2" ... usw.

    • _GUICtrlTreeView_GetItemOrder
    Liest die Ordnungsreihenfolge der Einträge eines Treeview in einen speicherbaren String (Standard), aus dem mit der vorigen Funktion ein Treeview wieder befüllt werden kann, oder in ein Array.

    Das ergibt dan z.B. folgenden String:

    Spoiler anzeigen


    OrdnungsNummer|Item-Text


    Edit 04.12.2013:
    2 Bugs gefixed
    • Schreiben von nur 1 Item schlug fehl
    • Item können jetzt folgende Zeichen enthalten: a-zA-Z0-9ßäöüÄÖÜ _,.+-|µ€§%$&

    Beispiel
    [autoit]


    #include <GuiTreeView.au3>
    #include <TreeViewConstants.au3>
    #include <WindowsConstants.au3>
    #include "TreeviewOrder.au3"

    [/autoit] [autoit][/autoit] [autoit]

    Global $aTreeview
    Global $File = @ScriptDir & '\OrderTree.txt'
    If Not FileExists($File) Then FileWrite($File, _
    "0|Autos" & @CRLF & _
    "0.1|Oldies" & @CRLF & _
    "0.1.1|Ford" & @CRLF & _
    "0.1.1.1|Capri" & @CRLF & _
    "0.1.2|Opel" & @CRLF & _
    "0.1.2.1|Manta" & @CRLF & _
    "0.2|Neu" & @CRLF & _
    "0.2.1|Ford" & @CRLF & _
    "0.2.1.1|Fiesta" & @CRLF & _
    "0.2.1.2|Mondeo" & @CRLF & _
    "0.2.2|Opel" & @CRLF & _
    "0.2.2.1|Insignia" & @CRLF & _
    "0.2.3|BMW" & @CRLF & _
    "0.2.3.1|3er" & @CRLF & _
    "0.2.3.1.1|blau" & @CRLF & _
    "0.2.3.1.2|silber" & @CRLF & _
    "0.2.3.2|8er" & @CRLF)

    [/autoit] [autoit][/autoit] [autoit]

    $hGUI = GUICreate("Test", 350, 215)
    $hTV = GUICtrlCreateTreeView(5, 5, 180, 200, BitOR($TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS), $WS_EX_CLIENTEDGE)
    $btFile = GUICtrlCreateButton('Load From File', 245, 45, 100, 20)
    $btWrite = GUICtrlCreateButton('Write To File', 245, 85, 100, 20)
    GUISetState()

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    While 1
    Switch GUIGetMsg()
    Case -3
    Exit
    Case $btFile
    _GUICtrlTreeView_BeginUpdate($hTV)
    $aTreeview = _GUICtrlTreeView_CreateItemFromOrderFile($File, $hTV)
    _GUICtrlTreeView_Expand($hTV)
    $hItem = _GUICtrlTreeView_GetFirstChild($hTV, $aTreeview[0][0])
    _GUICtrlTreeView_Expand($hTV, $hItem, False)
    While 1
    $hItem = _GUICtrlTreeView_GetNextSibling($hTV, $hItem)
    If $hItem = 0 Then ExitLoop
    _GUICtrlTreeView_Expand($hTV, $hItem, False)
    WEnd
    _GUICtrlTreeView_EndUpdate($hTV)
    Case $btWrite
    Local $sWrite = _GUICtrlTreeView_GetItemOrder($hTV)
    ;~ ConsoleWrite($sWrite & @LF)
    Local $fH = FileOpen($File, 2)
    FileWrite($fH, $sWrite)
    FileClose($fH)
    EndSwitch
    WEnd

    [/autoit]


    Die Funktion zum Speichern des Treeview-Inhalts arbeitet rekursiv und ist somit in der Anzahl der lesbaren Treeview-Ebenen nur begrenzt durch das Rekursionsmaximum. ;)

    TreeviewOrder.au3 (v0.3)
    [autoit]


    #Region - TimeStamp
    ; 2013-12-04 09:05:03 v 0.3
    #EndRegion - TimeStamp

    [/autoit] [autoit][/autoit] [autoit]

    #include-once
    #include <GuiTreeView.au3>
    #include <Array.au3>
    #cs ============================================================================= F U N C T I O N S =============================

    [/autoit] [autoit][/autoit] [autoit]

    • _GUICtrlTreeView_CreateItemFromOrderFile
    Erstellt Treeview Item aus einer Datei gemäß der gespeicherten Ordnung

    [/autoit] [autoit][/autoit] [autoit]

    • _GUICtrlTreeView_GetItemOrder
    Liest die Ordnungsreihenfolge der Einträge eines Treeview in einen speicherbaren String (Standard) oder in ein Array

    [/autoit] [autoit][/autoit] [autoit]

    #ce =============================================================================================================================

    [/autoit] [autoit][/autoit] [autoit]

    ; #FUNCTION# ====================================================================================================================
    ; Name ..........: _GUICtrlTreeView_CreateItemFromOrderFile
    ; Description ...: Erstellt Treeview Item aus einer Datei gemäß der gespeicherten Ordnung
    ; Syntax ........: _GUICtrlTreeView_CreateItemFromOrderFile($_sFile, $_hWnd[, $_sDelim = -1])
    ; Parameters ....: $_sFile - Dateipfad.
    ; ...............: $_hWnd - Treeview Handle.
    ; ...............: $_sDelim - [optional] Trenner. Standard ist -1 = Opt("GUIDataSeparatorChar")
    ; ...............: $_sDelim trennt Ordnungsnummer von Itemtext
    ; Return values .: Erfolg Array [[Handle-Item, Ordnungsnummer, Item-Text]]
    ; ...............: Fehler 0 @error = 1: Datei lesen fehlgeschlagen
    ; ...............: = 2: Datei enthält keine Einträge
    ; Author ........: BugFix ( [email='bugfix@autoit.de'][/email] )
    ; ===============================================================================================================================
    Func _GUICtrlTreeView_CreateItemFromOrderFile($_sFile, $_hWnd, $_sDelim=-1)
    If $_sDelim = -1 Then $_sDelim = Opt("GUIDataSeparatorChar")
    Local $sRead = FileRead($_sFile)
    If @error Then Return SetError(1,0,0)
    Local $aItem = StringRegExp($sRead, "([\d\.]*)" & $_sDelim & "([a-zA-Z0-9ßäöüÄÖÜ _,.+-|µ€§%$&]+)", 3)
    If Not IsArray($aItem) Then Return SetError(2,0,0)
    Local $n = 0, $aTree[UBound($aItem)/2][3] ; == [[Handle-Item, sOrder, Item-Text]]
    Local $sOrderParent
    For $i = 0 To UBound($aItem) -2 Step 2
    $sOrderParent = __OrderNumber($aItem[$i], False)
    Switch $sOrderParent
    Case ''
    $aTree[$n][0] = _GUICtrlTreeView_Add($_hWnd, 0, $aItem[$i+1])
    Case Else
    For $j = 0 To $n
    If $aTree[$j][1] = $sOrderParent Then
    $aTree[$n][0] = _GUICtrlTreeView_AddChild($_hWnd, $aTree[$j][0], $aItem[$i+1])
    EndIf
    Next
    EndSwitch
    $aTree[$n][1] = $aItem[$i] ; == sOrder
    $aTree[$n][2] = $aItem[$i+1] ; == Item-Name
    $n += 1
    Next
    Return $aTree
    EndFunc ;==>_GUICtrlTreeView_CreateItemFromOrderFile

    [/autoit] [autoit][/autoit] [autoit]

    ; #FUNCTION# ====================================================================================================================
    ; Name ..........: _GUICtrlTreeView_GetItemOrder
    ; Description ...: Liest die Ordnungsreihenfolge der Einträge eines Treeview in einen speicherbaren String (Standard)
    ; ...............: oder in ein Array
    ; ...............: Root hat die Ornungsnummer "0". Childs unter Root bekommen "0.1", "0.2" ...
    ; ...............: Deren Childs erhalten dann "0.1.1", "0.1.2", "0.2.1", "0.2.2" ... usw.
    ; Syntax ........: _GUICtrlTreeView_GetItemOrder($_hWnd[, $_fString = 1[, $_sDelim = -1]])
    ; Parameters ....: $_hWnd Handle des Treeview
    ; ...............: $_fString 1 (Standard): Ausgabe als String "OrdnungsNr TRENNER ItemText CRLF", 0 gibt Array zurück
    ; ...............: $_sDelim -1 (Standard): Trennzeichen von Opt(GUIDataSeparatorChar)
    ; Return values .: Erfolg String um Inhalte mit Ordnungsreihenfolge in Datei zu speichern oder
    ; ...............: Array [[Item-Handle, Ordnungsnummer, Item-Text]]
    ; Author ........: BugFix ( [email='bugfix@autoit.de'][/email] )
    ;================================================================================================================================
    Func _GUICtrlTreeView_GetItemOrder($_hWnd, $_fString=1, $_sDelim=-1)
    If $_sDelim = -1 Then $_sDelim = Opt("GUIDataSeparatorChar")
    Local $iCount = _GUICtrlTreeView_GetCount($_hWnd)
    If $iCount = 0 Then Return SetError(1,0,0)
    Local $hItem = _GUICtrlTreeView_GetFirstItem($_hWnd), $sOrder = '0'
    Local $aItem[$iCount][3] = [[$hItem, $sOrder, _GUICtrlTreeView_GetText($_hWnd, $hItem)]], $iCurrIndex = 1
    If $iCount > 1 Then __GetItemArray($_hWnd, $hItem, $aItem, $iCurrIndex, $sOrder)
    If Not $_fString Then Return $aItem
    Local $sRet = ''
    For $i = 0 To UBound($aItem) -1
    $sRet &= $aItem[$i][1] & $_sDelim & $aItem[$i][2] & @CRLF
    Next
    Return $sRet
    EndFunc ;==>_GUICtrlTreeView_GetItemOrder

    [/autoit] [autoit][/autoit] [autoit]

    #Region - Helper Functions
    Func __GetItemArray($_hWnd, $_hParent, ByRef $_aItem, ByRef $_iIndex, $_sOrderParent)
    Local $sOrder = __OrderNumber($_sOrderParent, True, True)
    Local $hItem = _GUICtrlTreeView_GetFirstChild($_hWnd, $_hParent)
    $_aItem[$_iIndex][0] = $hItem
    $_aItem[$_iIndex][1] = $sOrder
    $_aItem[$_iIndex][2] = _GUICtrlTreeView_GetText($_hWnd, $hItem)
    $_iIndex += 1
    If _GUICtrlTreeView_GetChildCount($_hWnd, $hItem) > 0 Then
    __GetItemArray($_hWnd, $hItem, $_aItem, $_iIndex, $sOrder)
    EndIf
    While 1
    $hItem = _GUICtrlTreeView_GetNextSibling($_hWnd, $hItem)
    If $hItem = 0 Then ExitLoop
    $sOrder = __OrderNumber($sOrder)
    $_aItem[$_iIndex][0] = $hItem
    $_aItem[$_iIndex][1] = $sOrder
    $_aItem[$_iIndex][2] = _GUICtrlTreeView_GetText($_hWnd, $hItem)
    $_iIndex += 1
    If _GUICtrlTreeView_GetChildCount($_hWnd, $hItem) > 0 Then
    __GetItemArray($_hWnd, $hItem, $_aItem, $_iIndex, $sOrder)
    EndIf
    WEnd
    EndFunc ;==>__GetItemArray

    [/autoit] [autoit][/autoit] [autoit]

    Func __OrderNumber($_sOrder, $_fIncrease=True, $_fNextSub=False)
    If $_fIncrease Then ; == increase order number
    If $_fNextSub Then Return $_sOrder & '.1'
    Local $sLeft, $sRight, $iPos
    $iPos = StringInStr($_sOrder, '.', 1, -1)
    $sLeft = StringLeft($_sOrder, $iPos)
    $sRight = StringTrimLeft($_sOrder, $iPos)
    Return $sLeft & ($sRight +1)
    Else ; == get parent order number
    If $_sOrder = '0' Then Return ''
    Local $iPos = StringInStr($_sOrder, '.', 1, -1)
    Return StringLeft($_sOrder, $iPos -1)
    EndIf
    EndFunc ;==>__OrderNumber
    #EndRegion - Helper Functions

    [/autoit]


    DL bisher: 34

  • Super Helferlein
    aber wenn man nur 1 Item im Treeview hat, bricht das Script ohne Fehlermeldung ab.(ok nur 1 item macht nicht viel Sinn^^)

    Dann hab ich noch ein Problem mit Umlauten beim wieder einlesen aus einer Txt datei. Der Text dahinter fehlt. (boom ist drin)

    vg

    Edit: Und Leerzeichen im Item-Namen sind auch nicht möglich.

    Einmal editiert, zuletzt von morpuvec (5. November 2013 um 18:00)

    • Offizieller Beitrag

    aber wenn man nur 1 Item im Treeview hat, bricht das Script ohne Fehlermeldung ab.(ok nur 1 item macht nicht viel Sinn)

    Gefixed

    Dann hab ich noch ein Problem mit Umlauten beim wieder einlesen aus einer Txt datei. Der Text dahinter fehlt. (boom ist drin)

    Habe ich jetzt behoben. Folgende Zeichen plus Leerzeichen sind für die Item zulässig:
    a-z A-Z 0-9 ß ä ö ü Ä Ö Ü _ , + - | µ € § % $ &

  • Moin,

    kann es sein. des es mit den Sonderzeichen noch nicht so ganz klappt?

    Bei mir stellt sich der Treeview nach dem Klick auf "Load from File" so dar.

    Oder mache ich einen Fehler? Ich nutze die AutoItversion 3.3.8.1

    MfG Jescho

    Jeder hat mal klein angefangen - aber nicht jeder kommt groß raus!

    • Offizieller Beitrag

    Ich habe folgendes Bsp. verwendet:

    Spoiler anzeigen
    [autoit]

    #include <GuiTreeView.au3>
    #include <TreeViewConstants.au3>
    #include <WindowsConstants.au3>
    #include "TreeviewOrder.au3"

    [/autoit] [autoit][/autoit] [autoit]

    Global $aTreeview
    Global $File = @ScriptDir & '\OrderTree.txt'

    [/autoit] [autoit][/autoit] [autoit]

    $hGUI = GUICreate("Test", 350, 215)
    $hTV = GUICtrlCreateTreeView(5, 5, 180, 200, BitOR($TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS), $WS_EX_CLIENTEDGE)
    $btFile = GUICtrlCreateButton('Load From File', 245, 45, 100, 20)
    $btWrite = GUICtrlCreateButton('Write To File', 245, 85, 100, 20)
    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    Switch GUIGetMsg()
    Case -3
    Exit
    Case $btFile
    _GUICtrlTreeView_BeginUpdate($hTV)
    $aTreeview = _GUICtrlTreeView_CreateItemFromOrderFile($File, $hTV)
    _GUICtrlTreeView_Expand($hTV)
    $hItem = _GUICtrlTreeView_GetFirstChild($hTV, $aTreeview[0][0])
    _GUICtrlTreeView_Expand($hTV, $hItem, False)
    While 1
    $hItem = _GUICtrlTreeView_GetNextSibling($hTV, $hItem)
    If $hItem = 0 Then ExitLoop
    _GUICtrlTreeView_Expand($hTV, $hItem, False)
    WEnd
    _GUICtrlTreeView_EndUpdate($hTV)
    Case $btWrite
    Local $sWrite = _GUICtrlTreeView_GetItemOrder($hTV)
    Local $fH = FileOpen($File, 2)
    FileWrite($fH, $sWrite)
    FileClose($fH)
    EndSwitch
    WEnd

    [/autoit]


    In der "OrderTree.txt" steht:

    Code
    0|a-zA-Z0-9 _,.+-|µ€§%$&
    0.1|äöü-ÄÖÜ-ß-&%$§


    und das wird angezeigt:
    autoit.de/wcf/attachment/23735/

    In deinem Post sehe ich kein Bild (bei mir wird nix angezeigt). Code ebenfalls nicht, somit ist es schwer darauf einzugehen.

  • Hallo, lieder besteht der Fehler bei mir immer noch. Ich habe es mit deinem Bsp. probiert, das selbe Ergebnis.

    warum es mit dem Bild nicht gefunzt hat ??? Aber hier noch einmal ein Abbild.

    Ich habe es jetzt mal als Dateianhang hinzufügt.

    ie macht ihr denn das mit dem URL-Link um Bilder direkt darzustellen? Geht das wirklich nur über Webspace?

    • Offizieller Beitrag

    DIe UDF kann nur alle Einträge des 1. Hauptitems abspeichern, da mir das für mein Projekt nicht paßt, habe ich die UDF erweitert.

    Spoiler anzeigen
    [autoit]

    #include-once
    #include <GuiTreeView.au3>

    [/autoit] [autoit][/autoit] [autoit]

    #cs ============================================================================= F U N C T I O N S =============================

    [/autoit] [autoit][/autoit] [autoit]

    • _GUICtrlTreeView_CreateItemFromOrderFile
    Erstellt Treeview Item aus einer Datei gemäß der gespeicherten Ordnung

    [/autoit] [autoit][/autoit] [autoit]

    • _GUICtrlTreeView_GetItemOrder
    Liest die Ordnungsreihenfolge der Einträge eines Treeview in einen speicherbaren String (Standard) oder in ein Array

    [/autoit] [autoit][/autoit] [autoit]

    #ce =============================================================================================================================

    [/autoit] [autoit][/autoit] [autoit]

    ; #FUNCTION# ====================================================================================================================
    ; Name ..........: _GUICtrlTreeView_GetItemOrder
    ; Description ...: Liest die Ordnungsreihenfolge der Einträge eines Treeview in einen speicherbaren String (Standard)
    ; ...............: oder in ein Array
    ; ...............: Root hat die Ornungsnummer "0". Childs unter Root bekommen "0.1", "0.2" ...
    ; ...............: Deren Childs erhalten dann "0.1.1", "0.1.2", "0.2.1", "0.2.2" ... usw.
    ; Syntax ........: _GUICtrlTreeView_GetItemOrder($_hWnd[, $_fString = 1[, $_sDelim = -1]])
    ; Parameters ....: $_hWnd Handle des Treeview
    ; ...............: $_fString 1 (Standard): Ausgabe als String "OrdnungsNr TRENNER ItemText CRLF", 0 gibt Array zurück
    ; ...............: $_sDelim -1 (Standard): Trennzeichen von Opt(GUIDataSeparatorChar)
    ; Return values .: Erfolg String um Inhalte mit Ordnungsreihenfolge in Datei zu speichern oder
    ; ...............: Array [[Item-Handle, Ordnungsnummer, Item-Text]]
    ; Author ........: BugFix ( [email='bugfix@autoit.de'][/email] )
    ;================================================================================================================================
    Func _GUICtrlTreeView_CreateItemFromOrderFile($_sFile, $_hWnd, $_sDelim = -1)
    If $_sDelim = -1 Then $_sDelim = Opt("GUIDataSeparatorChar")
    Local $sRead = FileRead($_sFile)
    If @error Then Return SetError(1, 0, 0)
    Local $aItem = StringRegExp($sRead, "([\d\.]*)\" & $_sDelim & "([a-zA-Z0-9ßäöüÄÖÜ _,.+-|µ€§%$&]+)", 3)
    If Not IsArray($aItem) Then Return SetError(2, 0, 0)
    Local $n = 0, $aTree[UBound($aItem) / 2][3] ; == [[Handle-Item, sOrder, Item-Text]]
    Local $sOrderParent
    For $i = 0 To UBound($aItem) - 2 Step 2
    $sOrderParent = __OrderNumber($aItem[$i], False)
    Switch $sOrderParent
    Case ''
    $aTree[$n][0] = _GUICtrlTreeView_Add($_hWnd, 0, $aItem[$i + 1])
    Case Else
    For $j = 0 To $n
    If $aTree[$j][1] = $sOrderParent Then
    $aTree[$n][0] = _GUICtrlTreeView_AddChild($_hWnd, $aTree[$j][0], $aItem[$i + 1])
    EndIf
    Next
    EndSwitch
    $aTree[$n][1] = $aItem[$i] ; == sOrder
    $aTree[$n][2] = $aItem[$i + 1] ; == Item-Name
    $n += 1
    Next
    Return $aTree
    EndFunc ;==>_GUICtrlTreeView_CreateItemFromOrderFile

    [/autoit] [autoit][/autoit] [autoit]

    ; #FUNCTION# ====================================================================================================================
    ; Name ..........: _GUICtrlTreeView_GetItemOrder
    ; Description ...: Liest die Ordnungsreihenfolge der Einträge eines Treeview in einen speicherbaren String (Standard)
    ; ...............: oder in ein Array
    ; ...............: Root hat die Ornungsnummer "0". Childs unter Root bekommen "0.1", "0.2" ...
    ; ...............: Deren Childs erhalten dann "0.1.1", "0.1.2", "0.2.1", "0.2.2" ... usw.
    ; ...............:
    ; Syntax ........: _GUICtrlTreeView_GetItemOrder($_hWnd[, $_fString = 1[, $_sDelim = -1]])
    ; Parameters ....: $_hWnd Handle des Treeview
    ; ...............: $_fString 1 (Standard): Ausgabe als String "OrdnungsNr TRENNER ItemText CRLF", 0 gibt Array zurück
    ; ...............: $_sDelim -1 (Standard): Trennzeichen von Opt(GUIDataSeparatorChar)
    ; Return values .: Erfolg String um Inhalte mit Ordnungsreihenfolge in Datei zu speichern oder
    ; ...............: Array [[Item-Handle, Ordnungsnummer, Item-Text]]
    ; Author ........: BugFix,Raupi ( [email='bugfix@autoit.de'][/email] )([email='raupi@autoit.de'][/email])
    ;================================================================================================================================
    Func _GUICtrlTreeView_GetItemOrder($_hWnd, $_fString = 1, $_sDelim = -1)
    If $_sDelim = -1 Then $_sDelim = Opt("GUIDataSeparatorChar")
    Local $iCount = _GUICtrlTreeView_GetCount($_hWnd); Anzahl der TreeView Items
    If $iCount = 0 Then Return SetError(1, 0, 0); Keine Items Return
    Local $aItem[$iCount][3], $sOrder = '0', $iCurrIndex = 0
    Local $hItem
    ;=============================================== Erst alle Hauptitems aus dem TreeView auslesen, dann Subitems auslesen ======
    Local $aMainItem = _GUICtrlTreeView_GetMainItems($_hWnd) ; Array einlesen
    For $i = 0 To UBound($aMainItem) - 1
    $hItem = $aMainItem[$i][0]
    $aItem[$iCurrIndex][0] = $hItem
    $aItem[$iCurrIndex][1] = String($i)
    $aItem[$iCurrIndex][2] = _GUICtrlTreeView_GetText($_hWnd, $hItem)
    $iCurrIndex += 1
    $sOrder = String($i); Order nach dem Wechsel des Hauptitems neu setzen
    If _GUICtrlTreeView_GetChildCount($_hWnd, $hItem) > 0 Then __GetItemArray($_hWnd, $hItem, $aItem, $iCurrIndex, $sOrder)
    Next
    ;============================================== /Erst alle Hauptitems aus dem TreeView auslesen, dann Subitems auslesen ======
    If Not $_fString Then Return $aItem
    Local $sRet = ''
    For $i = 0 To UBound($aItem) - 1
    $sRet &= $aItem[$i][1] & $_sDelim & $aItem[$i][2] & @CRLF
    Next
    Return $sRet
    EndFunc ;==>_GUICtrlTreeView_GetItemOrder
    #Region - Helper Functions

    [/autoit] [autoit][/autoit] [autoit]

    Func __GetItemArray($_hWnd, $_hParent, ByRef $_aItem, ByRef $_iIndex, $_sOrderParent)
    Local $sOrder = __OrderNumber($_sOrderParent, True, True)
    Local $hItem = _GUICtrlTreeView_GetFirstChild($_hWnd, $_hParent)
    $_aItem[$_iIndex][0] = $hItem
    $_aItem[$_iIndex][1] = $sOrder
    $_aItem[$_iIndex][2] = _GUICtrlTreeView_GetText($_hWnd, $hItem)
    $_iIndex += 1
    If _GUICtrlTreeView_GetChildCount($_hWnd, $hItem) > 0 Then
    __GetItemArray($_hWnd, $hItem, $_aItem, $_iIndex, $sOrder)
    EndIf
    While 1
    $hItem = _GUICtrlTreeView_GetNextSibling($_hWnd, $hItem)
    If $hItem = 0 Then ExitLoop
    $sOrder = __OrderNumber($sOrder)
    $_aItem[$_iIndex][0] = $hItem
    $_aItem[$_iIndex][1] = $sOrder
    $_aItem[$_iIndex][2] = _GUICtrlTreeView_GetText($_hWnd, $hItem)
    $_iIndex += 1
    If _GUICtrlTreeView_GetChildCount($_hWnd, $hItem) > 0 Then
    __GetItemArray($_hWnd, $hItem, $_aItem, $_iIndex, $sOrder)
    EndIf
    WEnd
    EndFunc ;==>__GetItemArray

    [/autoit] [autoit][/autoit] [autoit]

    Func __OrderNumber($_sOrder, $_fIncrease = True, $_fNextSub = False)
    If $_fIncrease Then ; == increase order number
    If $_fNextSub Then Return $_sOrder & '.1'
    Local $sLeft, $sRight, $iPos
    $iPos = StringInStr($_sOrder, '.', 1, -1)
    $sLeft = StringLeft($_sOrder, $iPos)
    $sRight = StringTrimLeft($_sOrder, $iPos)
    Return $sLeft & ($sRight + 1)
    Else ; == get parent order number
    If $_sOrder = '0' Then Return ''
    Local $iPos = StringInStr($_sOrder, '.', 1, -1)
    Return StringLeft($_sOrder, $iPos - 1)
    EndIf
    EndFunc ;==>__OrderNumber
    #EndRegion - Helper Functions

    [/autoit] [autoit][/autoit] [autoit]

    ; #FUNCTION# ====================================================================================================================
    ; Name ..........: _GUICtrlTreeView_GetMainItems
    ; Description ...: Liest alle Hauptitems aus dem TreeView aus
    ; ...............: Gibt ein 2D Array zurück
    ; ...............: Col 0 = TreeViewItem Handle
    ; ...............: Col 1 = TreeviewItem Text
    ; Syntax ........:
    ; Parameters ....: $_hWnd Handle des Treeview
    ; ...............:
    ; ...............:
    ; Return values .: Array [[Item-Handle, Item-Text]]
    ; ...............:
    ; Author ........: Raupi ([email='raupi@autoit.de'][/email])
    ;================================================================================================================================
    Func _GUICtrlTreeView_GetMainItems($_hWnd)
    Local $iCount = _GUICtrlTreeView_GetCount($_hWnd), $iTmpCount = 1
    Local $aMainItem[$iCount][2]
    Local $hItem = _GUICtrlTreeView_GetFirstItem($_hWnd)
    $aMainItem[0][0] = $hItem
    $aMainItem[0][1] = _GUICtrlTreeView_GetText($_hWnd, $hItem)
    For $i = 2 To $iCount
    $hItem = _GUICtrlTreeView_GetNext($_hWnd, $hItem)
    If _GUICtrlTreeView_GetParentHandle($_hWnd, $hItem) = False Then
    $aMainItem[$iTmpCount][0] = $hItem
    $aMainItem[$iTmpCount][1] = _GUICtrlTreeView_GetText($_hWnd, $hItem)
    $iTmpCount += 1
    EndIf
    Next
    ReDim $aMainItem[$iTmpCount][2]
    Return $aMainItem
    EndFunc ;==>_GUICtrlTreeView_GetMainItems

    [/autoit]

    Nur werden alle Items abgespeichert. Die Datei ist als Zip im Anhang, da man keine au3 Dateien hochladen kann :thumbdown:

    Das Highlighting des Forums ist zum kotzen.