Treeview: rekursiv erstellt - Kann man nun die Pfade noch ermitteln?

  • Hallo zusammen,

    ich baue mir grad eine Treeview die rekursiv erstellt wird. Ich gebe einen Ordner mit beliebig vielen Unterordnern und Dateien vor und es wird eine passende Treeview erzeugt.

    Ich müssste nun die Möglichkeit haben, dass bei einem Doppelklick auf eine Datei ich quasi den Pfad ermitteln kann, sprich alle vorherigen Knotenpunkte mit „/“ aneinander verkettet. Leider komme ich auf keinen grünen Zweig.
    Ich habe auch schon daran gedacht die Informationen in ein Array zu schreiben aber auch ohne Erfolg.

    Jemand von euch diesem Thema ein wenig mehr bewandelt, der mir helfen könnte?
    Das ist die rekursive Funktion zum auslesen eines Ordners:
    [spoiler=Funktion]

    [autoit]

    #include <GUIConstants.au3>
    $rootdir = "Quellordner\"
    GUICreate("GUI")
    $hTree = GUICtrlCreateTreeView(5, 5, 300, 200)
    _LoadTree($rootdir, "*.*", $hTree)

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

    GUISetState()

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

    While 1
    $nMsg = GUIGetMsg()
    If $nMsg = -3 Then Exit
    Wend

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

    Func _LoadTree($sRoot, $sMask, $hParent)
    Local $aFile[1], $nCnt = 1, $newParent
    Local $hSearch = FileFindFirstFile($sRoot & $sMask)
    If $hSearch >= 0 Then
    $sFile = FileFindNextFile($hSearch)
    While not @error
    ReDim $aFile[$nCnt]
    $aFile[$nCnt-1] = $sFile
    $nCnt = $nCnt + 1
    $sFile = FileFindNextFile($hSearch)
    Wend
    FileClose($hSearch)
    EndIf
    For $i = 0 To UBound($aFile) - 1
    If $aFile[$i] == "." or $aFile[$i] == ".." Then ContinueLoop
    If StringInStr(FileGetAttrib($sRoot & "\" & $aFile[$i]), "D") Then
    $newParent = GUICtrlCreateTreeViewItem($aFile[$i], $hParent)
    _LoadTree($sRoot & $aFile[$i] & "\", $sMask, $newParent)
    ContinueLoop
    Endif
    GUICtrlCreateTreeViewItem($aFile[$i], $hParent)
    Next
    EndFunc

    [/autoit]

    [/spoiler ]

    Grüße Yaerox

    Grüne Hölle

    Einmal editiert, zuletzt von Yaerox (3. Mai 2013 um 13:30)

  • Hab es doch selber geschafft mit Hilfe von WM_NOTIFY und einer weiteren Funktion:

    Skript
    [autoit]

    Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    #forceref $hWnd, $iMsg, $iwParam

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

    Local $hWndFrom, $idFrom, $iCode, $tNMHDR, $hSelected
    $tNMHDR = DllStructCreate("int;int;int", $ilParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, 1))
    $idFrom = DllStructGetData($tNMHDR, 2)
    $iCode = DllStructGetData($tNMHDR, 3)
    Switch $hWndFrom
    Case GUICtrlGetHandle($hTreeviewFile)
    Switch $iCode
    Case $NM_DBLCLK; Get selected item
    $hSelected = _GUICtrlTreeView_GetSelection($hTreeviewFile)
    ; Is it checked?
    If _GUICtrlTreeView_GetSelected($hTreeviewFile, $hSelected) Then
    ; If so check its parent
    _Check_Parents($hSelected)
    ConsoleWrite(_GUICtrlTreeView_GetText($hTreeviewFile, _GUICtrlTreeView_GetSelection($hTreeviewFile)) & @CR)
    EndIf
    EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_NOTIFY

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

    Func _Check_Parents($hHandle)
    ; Get the handle of the parent
    Local $hParent = _GUICtrlTreeView_GetParentHandle($hTreeviewFile, $hHandle)
    ; If there is no parent
    If $hParent = 0 Then
    Return
    EndIf
    ; Check the parent
    ConsoleWrite(_GUICtrlTreeView_GetText($hTreeviewFile, $hParent) & "/")
    ; And look for the grandparent and so on
    _Check_Parents($hParent)
    EndFunc

    [/autoit]

    Grüße Yaerox

    Grüne Hölle