Ordnernamen mit _FileListToArray in ListBox

  • Hi,

    Ich möchte, das alle Ordner in einem bestimmten Ordern in einer Listbox angezeigt werden. Ich denke das geht mit "_FileListToArray" aber es klappt nicht... Ich hoffe mir kann jemand helfen ;)

    Hier der Code:

    [autoit]

    $ordner=_FileListToArray(@UserProfileDir & "\Dropbox\***\Games", "*.", 2) GUICtrlSetData($List1,$ordner)

    [/autoit]
  • Da die "_FileListToArray" Funktion einen Array wiedergibt, musst
    du es mit einer For-Schleife regeln.

    Spoiler anzeigen
    [autoit]

    #include <File.au3>
    #include <GUIConstantsEx.au3>
    #include <GUIListBox.au3>
    #include <WindowsConstants.au3>

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

    Global $Files = _FileListToArray(@ScriptDir) ;<- Files & Folders
    ;~ Global $Files = _FileListToArray(@ScriptDir,"*.*",1) ;<- Only Files
    ;~ Global $Files = _FileListToArray(@ScriptDir,"*.*",2) ;<- Only Folders

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

    #region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Test Form", 288, 182, 192, 164)
    $ListBox = GUICtrlCreateList("", 16, 16, 249, 149)
    GUISetState(@SW_SHOW)
    #endregion ### END Koda GUI section ###

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

    For $i = 1 To $Files[0]
    GUICtrlSetData($ListBox, $Files[$i])
    Next

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

    GUISetState(@SW_SHOW, $Form1)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    EndSwitch
    WEnd

    [/autoit]

    Hoffe es passt.

    MfG

  • _FileListToArray gibt, wie der Name schon sagt, ein Array zurück. GUICtrlSetData akzeptiert aber aus offensichtlichen Gründen keine Arrays. Wenn du zum Beispiel ein ListView Control o.Ä. hast, dann musst du das entweder mit der Funktion

    [autoit]

    _GUICtrlListView_AddArray

    [/autoit]

    oder einer anderen Funktion (je nachdem was für ein Control du verwendest) die Arrays akzeptiert machen.
    Sonst befüllst du die Liste einfach Element für Element.

  • Also so?

    [autoit]

    Func sync() $Files=_FileListToArray(@UserProfileDir & "\Dropbox\GameSync\Games") For $i = 1 To $Files[0] GUICtrlSetData($List1, $Files[$i]) Next Call("start")EndFunc

    [/autoit]


    bekomme aber ne Fehlermeldung: ==> Subscript used with non-Array variable.:

  • mit call wollte ich einfach die nächste Funktion aufrufen... geht das besser ? ?(

    EDIT: Und vorallem, wieso findet AutoIT das nichts? Im beschriebenen Verzeichniss liegen 4 .ini's und 2 Ordner?! Ich glaub ich verblöde langsam...

  • Du kannst auch direkt den Namen der Funktion mit den klammern hinschreiben.

    Schonmal mit ArrayDisplay angesehen?

  • Zitat

    EDIT: Und vorallem, wieso findet AutoIT das nichts?


    Kann ich dir nicht sagen, aber an der Funktion liegt es definitiv nicht. Überprüf mal den Pfad.

    Zitat

    mit call wollte ich einfach die nächste Funktion aufrufen... geht das besser ? ?(


    Funktionen ruft man so auf:

    [autoit]

    _TestFunction("Parameter 1", 5023) ;Funktionsaufruf

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

    Func _TestFunction($Param1, $Param2)
    ;Do stuff here
    EndFunc

    [/autoit]


    Wenn du das nicht kennst, solltest du dir definitiv mal die Tutorials anschauen die unter "Wichtige Links" links neben den Beiträgen zu finden sind... Das sind Grundlagen die du draufhaben solltest bevor du mit irgendwas komplizierterem anfängst.

  • Naja ich arbeite seit fast einem Jahr mit Autoit und rufe Functions seit beginn mit call("") auf... Das hat bisher auch immer geklappt?! ?(

  • Ok, es klappt wenn ich es aus der Func nehme... Gibts ne Möglichkeit das ganze als Function aufzurufen um die Liste zb. zu aktualisieren?

  • Naja ich arbeite seit fast einem Jahr mit Autoit und rufe Functions seit beginn mit call("") auf... Das hat bisher auch immer geklappt?! ?(

    Das klappt natürlich. Ist aber nicht wirklich sinnvoll.
    Erstens ist es mehr "Schreibarbeit" und zweitens dauert die Ausführung viel länger.

    Hier mal ein Script zur Verdeutlichung:

    Spoiler anzeigen
    [autoit]

    Global $i_Timer

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

    $i_Timer = TimerInit ()
    For $i = 1 To 100000
    _foo ()
    Next
    $i_Timer = TimerDiff ($i_Timer)
    ConsoleWrite ("Normal:" &@TAB& $i_Timer &@CRLF)

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

    $i_Timer = TimerInit ()
    For $i = 1 To 100000
    Call ("_foo")
    Next
    $i_Timer = TimerDiff ($i_Timer)
    ConsoleWrite ("Call:" &@TAB& $i_Timer &@CRLF)

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

    Func _foo ()
    EndFunc

    [/autoit]
  • Ok, bin schon wieder auf ein kleines Problem gestoßen: Wie kann ich hinter jeden möglichen Eintrag der "ListBox" noch folgendes anhängen:

    [autoit]

    & " | " & $Game)

    [/autoit]

    ?

    Der Code sieht momentan so aus:

    [autoit]

    $markiert_index = _GUICtrlListBox_GetCurSel($List1) $markiert_name = _GUICtrlListBox_GetText($List1, $markiert_index) $Files=_FileListToArray(@UserProfileDir & "\Dropbox\GameSync\Games") $Game = IniRead(@UserProfileDir & "\Dropbox\***\DATA\" & $markiert_name & ".ini","***", $markiert_name, "") For $i = 1 To $Files[0] GUICtrlSetData($List1, $Files[$i] & " | " & $Game) Next

    [/autoit]


    So klappt es nur leider nicht :D

    Danke schonmal!


    EDIT: Ich schreibe den Code Natürlich nicht nur in eine Zeile, irgendwie spinnt Chrome da bei der Syntax... Sorry!

    Hier mal ohne Autoit Quellcode:

    $markiert_index = _GUICtrlListBox_GetCurSel($List1)

    $markiert_name = _GUICtrlListBox_GetText($List1, $markiert_index)

    $Files=_FileListToArray(@UserProfileDir & "\Dropbox\GameSync\Games")

    $Game = IniRead(@UserProfileDir & "\Dropbox\***\DATA\" & $markiert_name & ".ini","***", $markiert_name, "")

    For $i = 1 To $Files[0]

    GUICtrlSetData($List1, $Files[$i] & " | " & $Game)

    Next

    Einmal editiert, zuletzt von iFreak95 (3. Juni 2012 um 14:02)

  • Der andere, das hier war ja eine andere Frage aus der sich dann diese ergab....