Dateien-Auflister (FileViewer)

  • Hallo Leute ;)

    Ich habe gerade einen FileViewer geschrieben, der euch die Dateien und Unterordner eines selbst gewählten Verzeichnisses anzeigt. Das hier vorgestellte Skript kann einzeln benutzt werden, ich arbeite aber ab jetzt an einer Fassung, mit der ich ihn in meinem Programm, dem "Copy Manager ", einbinden kann.

    Bis das allerdings klappt freue ich mich über jede Unterstützung die ich kriegen kann!!

    Ich bräuchte vor allen Dingen Hilfe bei der Erstellung einer ImageList, da vor allem bei der Suche nach den Icons z.B. von Games oder VLC-Dateien. Außerdem bei dem im Skript vermerkten Arraygrößen-Problem^^ Ich werde mich damit selbst weiter beschäftigen, wenn ich dieses Tool in meinen Copy Manager eingebaut habe aber bis dahin ;)

    So hier ist das Skript, ist egtl auch dann selbsterklärend wie es funktioniert ;) Wie gesagt, ich habe es gerade erst zum Laufen bekommen, also noch nicht viel Verbeserungszeit investiert!!

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <TreeViewConstants.au3>
    #include <WindowsConstants.au3>
    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIListBox.au3>
    #include <StaticConstants.au3>
    #Include <GuiTreeView.au3>
    #include <File.au3>
    #include <Array.au3>

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Index-Baum", 428, 364, 192, 124)
    $TreeView1 = GUICtrlCreateTreeView(24, 16, 369, 265, BitOR($TVS_HASBUTTONS,$TVS_HASLINES,$TVS_LINESATROOT,$TVS_DISABLEDRAGDROP,$TVS_SHOWSELALWAYS,$WS_GROUP,$WS_TABSTOP))
    $Input1 = GUICtrlCreateInput("", 32, 312, 153, 21)
    $Button1 = GUICtrlCreateButton("...", 192, 304, 100, 30, $BS_FLAT)
    $Button2 = GUICtrlCreateButton("Laden", 304, 304, 100, 30, $BS_FLAT)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###
    #cs Script-Code-Schnipsel von Oscar!! Auf jedenfall brauch ich mehr Icons :/ (weiß aber noch nicht woher ich die kriegen soll (brauche VLC usw.)
    $hImage = _GUIImageList_Create(16, 16, 5, 1)
    _GUIImageList_AddIcon($hImage, 'shell32.dll', 3) ; Verzeichnis-Icon
    _GUIImageList_AddIcon($hImage, 'shell32.dll', 110) ; Verzeichnis-Icon mit Haken
    _GUIImageList_AddIcon($hImage, 'shell32.dll', 1) ; Datei-Icon
    _GUIImageList_AddIcon($hImage, 'shell32.dll', 5) ; Diskette
    _GUIImageList_AddIcon($hImage, 'shell32.dll', 7) ; Wechseldatenträger
    _GUIImageList_AddIcon($hImage, 'shell32.dll', 8) ; Festplatte
    _GUIImageList_AddIcon($hImage, 'shell32.dll', 11) ; CDROM
    _GUIImageList_AddIcon($hImage, 'shell32.dll', 12) ; Netzwerklaufwerk
    _GUIImageList_AddIcon($hImage, 'shell32.dll', 53) ; Unbekannt
    _GUICtrlTreeView_SetNormalImageList($TreeView1, $hImage)
    #ce

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

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

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

    Case $Button1
    $TreeStartPath = FileSelectFolder("Bitte wählen sie das Startverzeichnis aus:", @DesktopDir, 1, "", $Form1)
    GUICtrlSetData($Input1, $TreeStartPath)

    Case $Button2
    GUICtrlSetState($Button1, $GUI_DISABLE)
    GUICtrlSetState($Button2, $GUI_DISABLE)
    _CreateFolderView()

    EndSwitch
    WEnd

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

    Func _CreateFolderView()
    Dim $ChildItem[15999999] ;wusste nicht welche Größe ich nehmen sollte^^ vlt kann man das ja auch schöner lösen, könnte mir das mit _ArrayCreate und _ArrayAdd vorstellen^^
    $StartPathSplit = StringSplit($TreeStartPath, "\")
    $IndexItem = $StartPathSplit[$StartPathSplit[0]]
    $ParentItem = _GUICtrlTreeView_Add($TreeView1, 0, $IndexItem)
    Do
    $FileList = _FileListToArray($TreeStartPath)
    if IsArray($FileList) = 0 Then
    _ShowSelected()
    ExitLoop
    endif
    For $i = 1 to $FileList[0]
    $ChildItem[$i] = _GUICtrlTreeView_AddChild($TreeView1, $ParentItem, $FileList[$i])
    next
    While 1
    For $j = 1 to _GUICtrlTreeView_GetChildCount($TreeView1, $ParentItem)
    $ItemSelected = _GUICtrlTreeView_GetSelected($TreeView1, $ChildItem[$j])
    If $ItemSelected = True Then
    $TreeStartPath = $TreeStartPath&"\"&_GUICtrlTreeView_GetText($TreeView1, $ChildItem[$j])
    $ParentItem = $ChildItem[$j]
    ExitLoop 2
    endif
    Next
    WEnd
    Until GUIGetMsg() = $GUI_EVENT_CLOSE
    endfunc

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

    func _ShowSelected()
    MsgBox(0, "Kommt bald", "Diese Funktion ist in Arbeit!")
    Return
    endfunc

    [/autoit]

    Ich bitte darum dieses Skript nicht als eures auszugeben!!

    beste Grüße, sondaschuela69

    Einmal editiert, zuletzt von sondaschuela69 (20. August 2010 um 15:07)

  • Hi sondaschuela69!


    Nette Idee!

    Ich habe da ein paar anregungen für dich!
    1.) bau mehr fehler prüfungen ein wie zB. bei $TreeStartPath wenn die Variable leer ist kommt ein Error.
    2.) hängt sich deine funktion bei mir auf weil ich auf win7 alle rechte auf dem rechner habe schau dir zu diesem thema meine _File_List_S_Rekursiv an!
    _File_List_S_Rekursiv
    3.) Oscar hat die Idee von dir in seinem Treeview FileExplorer umgesetzt schau dir zu deisem thema den anderen link an!
    Treeview FileExplorer

    Ansonsten weiter so! ;)

    LG Keiner

  • Hallo.
    Ich finds auch ne gute Idee, jedoch scheit es zu früh released worden zu sein.
    Wenn ich auf einen Unterordner um Ordner Klicke, dann steht da "Diese Funktion ist in Arbeit!" in einer MsgBox,
    danach kommt ein Error.

    Spoiler anzeigen
    Code
    C:\Dokumente und Einstellungen\Pride\Desktop\Neu AutoIt v3 Script.au3 (65) : ==> Subscript used with non-Array variable.:
    For $i = 1 to $FileList[0]
    For $i = 1 to $FileList^ ERROR


    Du hast folgendes Array Handling

    [autoit]

    if IsArray($FileList) = 0 Then
    _ShowSelected()
    endif

    [/autoit]


    Das solltest du ändern in

    [autoit]

    if not IsArray($FileList) Then
    _ShowSelected()
    ExitLoop
    endif

    [/autoit]


    Da du nach dieser Abfrage trotzdem mit nem Array arbeitest obwohl er keiner ist.
    Dann klappts einwandfrei.
    MfG. PrideRage

    Meine Projekte:
    ClipBoard Manager (beendet)
    Gutes ClipBoard Verwaltungs Programm mit nützlichen Funktionen.

    HTML Creator (beendet)
    Nützliches Tool um schnell ein eigenes HTML Dokument zu erstellen.

  • dankeschön für eure Lobe und Tipps ;)

    Ich weiß es ist noch nicht ausgereift, vor allem bei den Fehlerprüfungen ;) Aber ich habe mich damit schon länger beschäftigt und war einfach nur so froh das es endlich funktioniert, dass ich das gleich mal posten wollte^^

    PrideRage
    Das exitloop werde ich noch hinzufügen danke ;) Dann sollte zumindest der Fehler nicht mehr kommen!

    Das bei dem Klick auf den Unterordner nichts passiert ausser dem Error liegt daran, das dein Unterordner eine Datei ist und somit keine weiteren Unterverzeichnisse besitzt ;) Die Funktion _ShowSelected() (ist in Arbeit), soll das nun erkennen und die entsprechende Datei ausführen/öffnen!! Hoffe ist jetzt ein wenig klarer ^^

    Kleiner

    1. Die Fehlerüberprüfungen kommen noch wie gesagt ich war vielleicht etwas zu voreilig XD
    2. Sehr schöne funktion aber wie soll ich die hier mit einbinden? ;) Wieso hängt sich die Funktion auf? hab das net so ganz verstanden^^
    3. Ok von ihm habe ich das mit der ImageList ;) werde ich gleich mal editieren als Quellenangabe XD Ich habe mir das auch schonmal angeschaut und musste feststellen, das ich das ganz schwer in meinen Copy Manager einbauen könnte und hab mich deshalb nochmal selber dran gesetzt!