Anfrage Listview und Dateienanzeige

  • Guten Morgen,

    habe mal wieder eine Frage.

    Ich will ein Listview erstellen, wo mir alle ini datein in einem ordner anzeigt.
    Danach muss eine ausgewählt werden.
    Mit der auswahl und dem drücken eines buttons sollte dann dieser Datename also zb test.ini in eine variable übernommen werden so das ich sie im Script weiter verarbeiten kann.

    Ich habe e snun so getestet wie im beispiel jedoch komme ich nicht wirklich auf ne lösungsansatz

    [autoit]

    #include <File.au3>
    #include <Array.au3>

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

    $sPath= @ScriptDir
    Local $FileList[2]
    $FileList = _FileListToArray($sPath , "*.ini", 1)
    If @error = 1 Then
    MsgBox(0, "", "Keine Ordner gefunden.")
    Exit
    EndIf
    If @Error=4 Then
    MsgBox (0,"","Keine Dateien gefunden.")
    Exit
    EndIf
    _ArrayDisplay($FileList , "test")

    [/autoit]

    Hoffe ihr bringt mich auf den richtigen weg

    Einmal editiert, zuletzt von JaySini (1. Juni 2011 um 12:43)

    • Offizieller Beitrag

    Der Weg über _FileListToArray() und anschließendes Einlesen der Arrayitem in ein Listview ist zwar problemlos machbar, ich würde aber trotzdem hier auf das ListBox-Control zurückgreifen, da es speziell auf das Bearbeiten von Dateiauflistungen orientiert ist. Schau dir mal die Funktionen dazu in der Hilfe an, speziell "_GUICtrlListBox_Dir". Als 2.ten Parameter kannst du dort z.B. "\Pfad\*.ini" übergeben.

  • Du meinst praktisch so:

    [autoit]

    #AutoIt3Wrapper_Au3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6
    #include <GUIListBox.au3>
    #include <GuiConstantsEx.au3>
    #include <Constants.au3>

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

    Opt('MustDeclareVars', 1)

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

    $Debug_LB = False ; Prüft den Klassennamen (ClassName), der an die ListBox-Funktion übergeben wird. Setze dies versuchsweise auf True und verwende dann ein Handle zu einem anderen Control, um die Funktionsweise zu verstehen.
    _Main()

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

    Func _Main()
    Local $hListBox

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

    ; Erstellt eine GUI
    GUICreate("ListBox: Verzeichnis einlesen", 400, 296)
    $hListBox = GUICtrlCreateList("", 2, 2, 396, 296)
    GUISetState()

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

    ; Fügt Dateien hinzu
    _GUICtrlListBox_BeginUpdate($hListBox)
    _GUICtrlListBox_ResetContent($hListBox)
    _GUICtrlListBox_InitStorage($hListBox, 100, 4096)
    _GUICtrlListBox_Dir($hListBox, "*.ini")
    _GUICtrlListBox_AddFile($hListBox, @Scriptdir & "*.ini")
    _GUICtrlListBox_EndUpdate($hListBox)

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

    ; Die Schleife wiederholt sich, bis der Benutzer die Beenden-Aktion der GUI auslöst
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE
    GUIDelete()
    EndFunc ;==>_Main

    [/autoit]

    Um das beispiel dort mal zu nutzen.
    Nun aber die frage, wie ich hier ein File anwählenkann und dieses spezielle dann übergeben kann.
    Wenn ich mir nen Button rein mache, gibt es ne funktion wie ich hier das übergeben kann zb in $var1 als beispiel.

    Und muss ich die Schleife unterbrechen zum weiterverarbeiten oder kann ich diese weiterlaufen lassen?
    Sorry für die dummen fragen heute, aber irgendwie bekommt mir das wetter nicht und denken ist heute glücksache.

  • Du kannst deine Schleife etwas erweitern/ändern. Ich persönlich mache das mit den Buttons immer so:

    [autoit]

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    _DeineFunktion()
    Case $Button2
    _DeineAndereFunktion()
    EndSwitch
    WEnd

    [/autoit]

    Damit kannst du in der Schleife alle Button-Eingaben in der GUI abfangen

    UNPLEASANT SPOILER

    You just lost the game!

  • Hmm ne das ist klar :)
    Ev habe ich mich falsch ausgedrückt.
    Ich muss die Datei also den dateinamen den man in diesem Listview auswählt auswerten.
    Also den Dateinamen weiterverarbeiten.

    Wie ich buttons nutze weiß ich auch wie ich dann weiterverarbeiten kann oder sollte.
    Aktuell gehts mir rein, wie ich aus dem Listview die Ausgewählte datei "Dateinamen" in eine Variable bekomme

  • Okay also heute habe ich geistig wohl mein Minimum erreicht.

    [autoit]

    #AutoIt3Wrapper_Au3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6
    #include <GUIListBox.au3>
    #include <GuiConstantsEx.au3>
    #include <Constants.au3>

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

    Opt('MustDeclareVars', 1)

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

    $Debug_LB = False ; Prüft den Klassennamen (ClassName), der an die ListBox-Funktion übergeben wird. Setze dies versuchsweise auf True und verwende dann ein Handle zu einem anderen Control, um die Funktionsweise zu verstehen.
    Local $hListBox

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

    ; Erstellt eine GUI
    GUICreate("ListBox: Verzeichnis einlesen", 400, 296)
    $hListBox = GUICtrlCreateList("", 2, 2, 200, 296)
    $Button1 = GUICtrlCreateButton("test", 10, 320, 110, 20, $WS_GROUP)
    GUISetState()

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

    ; Fügt Dateien hinzu
    _GUICtrlListBox_BeginUpdate($hListBox)
    _GUICtrlListBox_ResetContent($hListBox)
    _GUICtrlListBox_InitStorage($hListBox, 100, 4096)
    _GUICtrlListBox_Dir($hListBox, "*.ini")
    _GUICtrlListBox_AddFile($hListBox, @Scriptdir & "*.ini")
    _GUICtrlListBox_EndUpdate($hListBox)

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

    ; Die Schleife wiederholt sich, bis der Benutzer die Beenden-Aktion der GUI auslöst
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE
    GUIDelete()

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

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    Button1()

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

    EndSwitch
    WEnd

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

    Func Button1()
    MsgBox(0, GUICtrlRead($hListBox), "Keine Ordner gefunden.")

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

    EndFunc

    [/autoit]


    Ich weiß es ist absolut falsch, aber ich finde den richtigen weg nicht.
    Langsam wirds mir peinlich :(

  • [quote='JaySini','index.php?page=Thread&postID=221885#post221885']

    [autoit]

    Func Button1()
    MsgBox(0, GUICtrlRead($hListBox), "Keine Ordner gefunden.")

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

    EndFunc

    [/autoit]

    Damit erstellst du dir 'ne MsgBox, welche in der Titelleiste die Nummer deiner ListView-Auswahl anzeigt und den Text "Keine Ordner gefunden" im Fenster.
    Wenn du im Fenster deinen markierten ListView-Eintrag haben willst, dann so:

    [autoit]

    MsgBox(0,"Ausgewählter Eintrag", GUICtrlRead(GUICtrlRead($hListBox)))

    [/autoit]

    Achte auf das doppelte GUICtrlRead

    UNPLEASANT SPOILER

    You just lost the game!

  • Okay das prob ist, das er mir bei dem Script so wie ich es gepostet habe nen fehler zeigt.
    Beim Button.

    Variable used without being declared.:
    $Button1 = GUICtrlCreateButton("test", 10, 320, 110, 20, $WS_GROUP)
    ^ ERROR

    Nachtrag Error:

    C:\Users\test\Documents\Scripts autotit\asd.au3(9,7) : WARNING: 'Local' specifier in global scope.
    Local $hListBox
    ~~~~~~^
    C:\Users\test\Documents\Scripts autotit\asd.au3(15,71) : WARNING: $WS_GROUP: possibly used before declaration.
    $Button1 = GUICtrlCreateButton("test", 10, 320, 110, 20, $WS_GROUP)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    C:\Users\test\Documents\Scripts autotit\asd.au3(15,72) : WARNING: $Button1 possibly not declared/created yet
    $Button1 = GUICtrlCreateButton("test", 10, 320, 110, 20, $WS_GROUP)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    C:\Users\test\Documents\Scripts autotit\asd.au3(15,71) : ERROR: $WS_GROUP: undeclared global variable.
    $Button1 = GUICtrlCreateButton("test", 10, 320, 110, 20, $WS_GROUP)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    C:\Users\test\Documents\Scripts autotit\asd.au3(37,16) : ERROR: Button1(): undefined function.
    Button1()
    ~~~~~~~~~~~~~~~^
    C:\Users\test\Documents\Scripts autotit\asd.au3 - 2 error(s), 3 warning(s)

  • Änder mal

    [autoit]

    $Button1 = GUICtrlCreateButton("test", 10, 320, 110, 20, $WS_GROUP)

    [/autoit]


    nach

    [autoit]

    Global $Button1 = GUICtrlCreateButton("test", 10, 320, 110, 20, $WS_GROUP)

    [/autoit]

    Edit: Für $WS_GROUP musst du noch

    [autoit]

    #include <WindowsConstants.au3>

    [/autoit]


    mit einfügen

    Und setz doch mal $hListBox statt Local Global

    UNPLEASANT SPOILER

    You just lost the game!

  • Erledigt folgende fehler kommen:

    C:\Users\test\Documents\Scripts autotit\asd.au3(9,7) : WARNING: 'Local' specifier in global scope.
    Local $hListBox
    ~~~~~~^
    C:\Users\test\Documents\Scripts autotit\asd.au3(15,78) : WARNING: $WS_GROUP: possibly used before declaration.
    Global $Button1 = GUICtrlCreateButton("test", 10, 320, 110, 20, $WS_GROUP)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    C:\Users\test\Documents\Scripts autotit\asd.au3(15,78) : ERROR: $WS_GROUP: undeclared global variable.
    Global $Button1 = GUICtrlCreateButton("test", 10, 320, 110, 20, $WS_GROUP)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    C:\Users\test\Documents\Scripts autotit\asd.au3 - 1 error(s), 2 warning(s)

    Okay geht

    Sry hatt
    #include <WindowsConstants.au3> vergessen

  • [autoit]

    #AutoIt3Wrapper_Au3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6
    #include <GUIListBox.au3>
    #include <GuiConstantsEx.au3>
    #include <Constants.au3>
    #include <WindowsConstants.au3>

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

    Opt('MustDeclareVars', 1)

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

    $Debug_LB = False ; Prüft den Klassennamen (ClassName), der an die ListBox-Funktion übergeben wird. Setze dies versuchsweise auf True und verwende dann ein Handle zu einem anderen Control, um die Funktionsweise zu verstehen.
    Local $hListBox

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

    ; Erstellt eine GUI
    GUICreate("ListBox: Verzeichnis einlesen", 400, 400)
    $hListBox = GUICtrlCreateList("", 2, 2, 200, 296)
    Global $Button1 = GUICtrlCreateButton("test", 10, 320, 320, 20, $WS_GROUP)
    GUISetState()

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

    ; Fügt Dateien hinzu
    _GUICtrlListBox_BeginUpdate($hListBox)
    _GUICtrlListBox_ResetContent($hListBox)
    _GUICtrlListBox_InitStorage($hListBox, 100, 4096)
    _GUICtrlListBox_Dir($hListBox, "*.ini")
    _GUICtrlListBox_AddFile($hListBox, @Scriptdir & "*.ini")
    _GUICtrlListBox_EndUpdate($hListBox)

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

    ; Die Schleife wiederholt sich, bis der Benutzer die Beenden-Aktion der GUI auslöst
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE
    GUIDelete()

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

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    Button1()

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

    EndSwitch
    WEnd

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

    Func Button1()
    MsgBox(0,"Ausgewählter Eintrag", GUICtrlRead(GUICtrlRead($hListBox)))

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

    EndFunc

    [/autoit]

    So startet er ohne fehler, jedoch it button ohne funktion

  • Ja Ne is klar :D

    Schließlicht bleibt dein Script ja in deiner Do...Until-Schleife hängen, noch bevor es in die While-Schleife kommt

    UNPLEASANT SPOILER

    You just lost the game!

  • LoL ja okay denken denken denken.
    Naja habe das nun mal schnell nach oben in die schleife gepackt.
    Geht nun auch jedoch zeigt er egal was ich wähle eine 0 an in der MSG box.

    Ev hast noch nen tip?
    Jedoch kann ich es erst in 45 min testen

  • Bin ja auch doof... manchmal sollte man die angebotenen Scripte auch lesen :huh:
    Ich hatte die ganze zeit ein ListView im Kopf
    Bei GUICtrlCreateList reicht beim Auslesen natürlich ein GUICtrlRead($hListBox)

    Und so funktioniert's dann auch:

    [autoit]

    #AutoIt3Wrapper_Au3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6
    #include <GUIListBox.au3>
    #include <GuiConstantsEx.au3>
    #include <Constants.au3>
    #include <WindowsConstants.au3>

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

    Opt('MustDeclareVars', 1)

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

    $Debug_LB = False ; Prüft den Klassennamen (ClassName), der an die ListBox-Funktion übergeben wird. Setze dies versuchsweise auf True und verwende dann ein Handle zu einem anderen Control, um die Funktionsweise zu verstehen.
    Global $hListBox

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

    ; Erstellt eine GUI
    GUICreate("ListBox: Verzeichnis einlesen", 400, 400)
    $hListBox = GUICtrlCreateList("", 2, 2, 200, 296)
    Global $Button1 = GUICtrlCreateButton("test", 10, 320, 320, 20, $WS_GROUP)
    GUISetState()

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

    ; Fügt Dateien hinzu
    _GUICtrlListBox_BeginUpdate($hListBox)
    _GUICtrlListBox_ResetContent($hListBox)
    _GUICtrlListBox_InitStorage($hListBox, 100, 4096)
    _GUICtrlListBox_Dir($hListBox, "*.ini")
    _GUICtrlListBox_AddFile($hListBox, @Scriptdir & "*.ini")
    _GUICtrlListBox_EndUpdate($hListBox)

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

    ; Die Schleife wiederholt sich, bis der Benutzer die Beenden-Aktion der GUI auslöst

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

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    Button1()

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

    EndSwitch
    WEnd

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

    Func Button1()
    MsgBox(0,"Ausgewählter Eintrag", GUICtrlRead($hListBox))

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

    EndFunc

    [/autoit]
    UNPLEASANT SPOILER

    You just lost the game!

  • Hallo JaySini,

    hier ein kleines Beispiel:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <File.au3>
    ;
    Global $sIniFile

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

    $idGUI = GUICreate("Ini-Verwaltung", 300, 160)
    $idList = GUICtrlCreateList("", 10, 10, 180, 80)
    $aInis = _FileListToArray(@ScriptDir, "*.ini", 1)
    If IsArray($aInis) Then
    For $i = 1 To $aInis[0]
    GUICtrlSetData($idList, $aInis[$i])
    Next
    EndIf
    $idLabel = GUICtrlCreateLabel("", 10, 100, 290, 22)
    $idBtnMsgBox = GUICtrlCreateButton("MsgBox", 10, 130, 290, 22)
    GUICtrlSetState($idBtnMsgBox,$GUI_DISABLE)
    GUISetState()

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $idList
    $sIniFile = @ScriptDir & "\Daten\" & GUICtrlRead($idList)
    GUICtrlSetData($idLabel, $sIniFile)
    GUICtrlSetState($idBtnMsgBox,$GUI_ENABLE)
    Case $idBtnMsgBox
    MsgBox(0,"ausgewählt:",$sIniFile)
    EndSwitch
    WEnd

    [/autoit]

    Edit: shadow667 hat es ja zwischenzeitlich gelöst, da war ich wohl zu langsam

    mfg autoBert

  • Die Sache, daß direkt beim klicken der Liste eine Aktion ausgeführt wird gefällt mir! Kannte ich so bislang noch nicht...
    Aber man lernt ja nie aus :D

    UNPLEASANT SPOILER

    You just lost the game!

  • Tausend dank an euch 2
    Ihr habt mir den tag echt gerettet.
    Das mist regenwetter bringt mich total aus der spur.

    Nun muss ich kuken wie ich es einbinde. Aber da warte ich bis freitag ev ist mien Kopf da freier.

    Tausend dank nochmal