dateilister mit GUICtrlCreateListView

  • Hat hier vielleicht schon jemand ein Script gebastelt mit dem man wie im Explorer in einem ListView navigieren kann und auch Auswählen und die Auswahl mit einer Datei verknüpft?

    Ich habe zwar einige Scripts gefunden die einen Ordnerinhalt auslesen aber nicht mehr.

    • Offizieller Beitrag

    Ich denke mit einem ListView liegst du falsch. Die Dateianzeige/Auswahl ist meinst ein TreeView.
    Hier mal ein Beispiel dazu von Oscar: Treeview FileExplorer

  • Danke euch.

    Ja und Ja.

    Eigentlich brauche ich nur was ganz simples:

    In einem INPUT-Feld wird der Ordnerpfad eingegeben und in einer Liste dann die darin enthaltenen Dateien nur mit der Endung .txt angezeigt.

    Und in der Liste sollte es dann möglich sein die gewünschte Datei zu markieren und mittels Button zb. nach D:\ zu kopieren.

    • Offizieller Beitrag

    Ich hatte gerade Langeweile:

    Spoiler anzeigen
    [autoit]


    #include <EditConstants.au3>
    #include <File.au3>
    #include <GUIConstantsEx.au3>
    #include <GuiListView.au3>
    #include <ListViewConstants.au3>

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

    Opt('GUIOnEventMode', 1)

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

    $hGui = GUICreate('Txt-Copy', 800, 600)
    GUISetOnEvent($GUI_EVENT_CLOSE, '_CloseGui')
    GUICtrlCreateLabel('Suchpfad', 10, 12, 60, 20)
    $hSearchPath = GUICtrlCreateInput('', 70, 10, 680, 20, BitOR($ES_LEFT, $ES_AUTOHSCROLL, $ES_READONLY))
    GUICtrlSetBkColor(-1, 0xFFFFBB)
    $hSelectSearch = GUICtrlCreateButton('...', 752, 9, 30, 22)
    GUICtrlSetOnEvent(-1, '_SelectPath')
    $hStartSearch = GUICtrlCreateButton('Suche starten...', 120, 40, 120, 25)
    GUICtrlSetOnEvent(-1, '_StartSearch')
    $hFilelist = GUICtrlCreateListView('Dateiname', 10, 80, 780, 400, $LVS_SHOWSELALWAYS)
    GUICtrlCreateLabel('Zielpfad', 10, 512, 60, 20)
    $hTargetPath = GUICtrlCreateInput('', 70, 510, 680, 20, BitOR($ES_LEFT, $ES_AUTOHSCROLL, $ES_READONLY))
    GUICtrlSetBkColor(-1, 0xAAFFAA)
    $hSelectTarget = GUICtrlCreateButton('...', 752, 509, 30, 22)
    GUICtrlSetOnEvent(-1, '_SelectPath')
    $hStartCopy = GUICtrlCreateButton('Kopieren starten...', 120, 540, 120, 25)
    GUICtrlSetOnEvent(-1, '_StartCopy')
    GUISetState()
    WinWaitClose($hGui)
    Exit

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

    Func _CloseGui()
    GUIDelete($hGui)
    EndFunc

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

    Func _SelectPath()
    Local $sPath
    $sPath = FileSelectFolder('Ordner auswählen', '', 2, '', $hGui)
    If Not FileExists($sPath) Then Return
    Switch @GUI_CtrlId
    Case $hSelectSearch
    GUICtrlSetData($hSearchPath, $sPath)
    Case $hSelectTarget
    GUICtrlSetData($hTargetPath, $sPath)
    EndSwitch
    EndFunc

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

    Func _StartSearch()
    Local $aFilelist, $sPath = GUICtrlRead($hSearchPath)
    If $sPath = '' Then Return MsgBox(16, 'Fehler', 'Bitte erst einen Suchpfad auswählen!', 0, $hGui)
    If StringRight($sPath, 1) <> '\' Then $sPath &= '\'
    $aFilelist = _FileListToArray($sPath, '*.txt', 1)
    If @error Then Return
    For $i = 1 To $aFilelist[0]
    GUICtrlCreateListViewItem($sPath & $aFilelist[$i], $hFilelist)
    Next
    _GUICtrlListView_SetColumnWidth(GUICtrlGetHandle($hFilelist), 0, $LVSCW_AUTOSIZE)
    EndFunc

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

    Func _StartCopy()
    Local $aSelectedItems, $sPath = GUICtrlRead($hTargetPath)
    If $sPath = '' Then Return MsgBox(16, 'Fehler', 'Bitte erst einen Zielpfad auswählen!', 0, $hGui)
    $aSelectedItems = _GUICtrlListView_GetSelectedIndices($hFilelist, True)
    If $aSelectedItems[0] = 0 Then Return MsgBox(16, 'Fehler', 'Bitte erst die Dateien markieren!', 0, $hGui)
    For $i = 1 To $aSelectedItems[0]
    ConsoleWrite('Copy "' & _GUICtrlListView_GetItemTextString($hFilelist, $aSelectedItems[$i]) & '" -> "' & $sPath & '"' & @CR)
    FileCopy(_GUICtrlListView_GetItemTextString($hFilelist, $aSelectedItems[$i]), $sPath, 0)
    Next
    EndFunc

    [/autoit]
  • Wow! Das Lob ich mir!

    Du bist mein Held! Vielen, vielen dank!

    Hübsch wäre noch, wenn gleich nach Auswahl des Suchpfades das Verzeichnis angezeigt wird.

    Einmal editiert, zuletzt von DerSchatten (27. Juli 2011 um 00:06)

    • Offizieller Beitrag

    Dazu musst Du nur die Funktion "_StartSearch" direkt nach dem eintragen des Pfades aufrufen:

    Spoiler anzeigen
    [autoit]


    #include <EditConstants.au3>
    #include <File.au3>
    #include <GUIConstantsEx.au3>
    #include <GuiListView.au3>
    #include <ListViewConstants.au3>

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

    Opt('GUIOnEventMode', 1)

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

    $hGui = GUICreate('Txt-Copy', 800, 600)
    GUISetOnEvent($GUI_EVENT_CLOSE, '_CloseGui')
    GUICtrlCreateLabel('Suchpfad', 10, 12, 60, 20)
    $hSearchPath = GUICtrlCreateInput('', 70, 10, 680, 20, BitOR($ES_LEFT, $ES_AUTOHSCROLL, $ES_READONLY))
    GUICtrlSetBkColor(-1, 0xFFFFBB)
    $hSelectSearch = GUICtrlCreateButton('...', 752, 9, 30, 22)
    GUICtrlSetOnEvent(-1, '_SelectPath')
    $hStartSearch = GUICtrlCreateButton('Suche starten...', 120, 40, 120, 25)
    GUICtrlSetOnEvent(-1, '_StartSearch')
    $hFilelist = GUICtrlCreateListView('Dateiname', 10, 80, 780, 400, $LVS_SHOWSELALWAYS)
    GUICtrlCreateLabel('Zielpfad', 10, 512, 60, 20)
    $hTargetPath = GUICtrlCreateInput('', 70, 510, 680, 20, BitOR($ES_LEFT, $ES_AUTOHSCROLL, $ES_READONLY))
    GUICtrlSetBkColor(-1, 0xAAFFAA)
    $hSelectTarget = GUICtrlCreateButton('...', 752, 509, 30, 22)
    GUICtrlSetOnEvent(-1, '_SelectPath')
    $hStartCopy = GUICtrlCreateButton('Kopieren starten...', 120, 540, 120, 25)
    GUICtrlSetOnEvent(-1, '_StartCopy')
    GUISetState()
    WinWaitClose($hGui)
    Exit

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

    Func _CloseGui()
    GUIDelete($hGui)
    EndFunc

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

    Func _SelectPath()
    Local $sPath
    $sPath = FileSelectFolder('Ordner auswählen', '', 2, '', $hGui)
    If Not FileExists($sPath) Then Return
    Switch @GUI_CtrlId
    Case $hSelectSearch
    GUICtrlSetData($hSearchPath, $sPath)
    _StartSearch()
    Case $hSelectTarget
    GUICtrlSetData($hTargetPath, $sPath)
    EndSwitch
    EndFunc

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

    Func _StartSearch()
    Local $aFilelist, $sPath = GUICtrlRead($hSearchPath)
    If $sPath = '' Then Return MsgBox(16, 'Fehler', 'Bitte erst einen Suchpfad auswählen!', 0, $hGui)
    If StringRight($sPath, 1) <> '\' Then $sPath &= '\'
    $aFilelist = _FileListToArray($sPath, '*.txt', 1)
    If @error Then Return
    For $i = 1 To $aFilelist[0]
    GUICtrlCreateListViewItem($sPath & $aFilelist[$i], $hFilelist)
    Next
    _GUICtrlListView_SetColumnWidth(GUICtrlGetHandle($hFilelist), 0, $LVSCW_AUTOSIZE)
    EndFunc

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

    Func _StartCopy()
    Local $aSelectedItems, $sPath = GUICtrlRead($hTargetPath)
    If $sPath = '' Then Return MsgBox(16, 'Fehler', 'Bitte erst einen Zielpfad auswählen!', 0, $hGui)
    $aSelectedItems = _GUICtrlListView_GetSelectedIndices($hFilelist, True)
    If $aSelectedItems[0] = 0 Then Return MsgBox(16, 'Fehler', 'Bitte erst die Dateien markieren!', 0, $hGui)
    For $i = 1 To $aSelectedItems[0]
    ConsoleWrite('Copy "' & _GUICtrlListView_GetItemTextString($hFilelist, $aSelectedItems[$i]) & '" -> "' & $sPath & '"' & @CR)
    FileCopy(_GUICtrlListView_GetItemTextString($hFilelist, $aSelectedItems[$i]), $sPath, 0)
    Next
    EndFunc

    [/autoit]