FileSelectFolder in GUI

  • Hallo Leute,

    habe da eine Frage, ist es möglich direkt in der GUI einen Ordner auszuwählen, in einer Baumstruktur (siehe Bild)?
    Das man die Funktion "FileSelectFolder" so in der Art in die GUI einbindet.

    MfG

    MehmeX

    3 Mal editiert, zuletzt von MehmeX (17. Mai 2009 um 23:46)

  • Danke für den Link. Gibt es da aber dafür keine Alternative? Denn man kann mit dieser UDF keine Breite sowie Höhe einstellen.
    kann man sowas nicht selber machen, so das dieser dann ein Pfad zurück gibt?

  • Also bei dem Script von Oscar meine ich paßt sicht die Größe sich an der des GUI an.
    Ansonsten Oscar einfach mal fragen. Er beißt nicht und wenn bei seiner Frau. ;)

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • Hallol leute,

    ich weiß das Thema liegt einwenig zurück, aber ich möchte gerne ein eigenes FileSelectFolder das in einer GUI integriert ist schreiben. Gibt es dazu vielleicht ein Object oder ähnliches? Ich wäre für jede Hilfe dankbar.

    MfG

    MehmeX

  • Evtl. hilft das in der Anlage. Nennst sich ein "Tree-Menü".

    Ist zwar noch in Dänisch, aber sollte dennoch verständlich sein. Ansonsten sag bescheid und ich übersetze es noch da wo es nötig ist.

    Download: autoit.de/wcf/attachment/4781/

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • Hmm, ... danke Alina. Gibt es kein "Object" (von Microsoft) womit man es dann mit der ObjCreate() aufrufen kann.

    • Offizieller Beitrag

    Ich dachte, dass hätten wir per EMail geklärt?
    Wenn Du mit meiner Funktion nicht weiter gekommen bist, warum hast Du nicht nochmal gefragt?

    Also hier mal ein anderes Beispiel zu meiner Funktion:

    Spoiler anzeigen
    [autoit]


    #include <WindowsConstants.au3>
    #include <GuiTreeView.au3>
    #include <GUIConstantsEx.au3>
    $hGui = GUICreate('SelectFolder', 800, 600)
    $hTreeView = GUICtrlCreateTreeView(10, 10, 380, 580, Default, $WS_EX_STATICEDGE)
    GUISetState()
    ToolTip('Please wait...')
    _GUICtrlTreeView_CreateDirectory($hTreeView, @UserProfileDir)
    ToolTip('')
    Do
    Until GUIGetMsg() = -3

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

    ;===============================================================================
    ; Function Name: _GUICtrlTreeView_CreateDirectory($hTreeView, $sPath, $bFiles)
    ; Description:: erstellt ein TreeView mit Verzeichnissen (+Dateien)
    ; Parameter(s): $hTreeView = ControlID/Handle des TreeViews
    ; $sPath = Verzeichnispfad, der dargestellt werden soll
    ; $bFiles = True = auch Dateien anzeigen, False = nur Verzeichnisse
    ; Requirement(s): #include<GuiTreeView.au3>
    ; Return Value(s): Array mit Anzahl der Verzeichnisse=[0] und Dateien=[1]
    ; 0 und @error = 1, wenn der Pfad nicht existiert bzw. kein Verzeichnis ist
    ; 0 und @error = 2, wenn das FileSystemObject nicht erstellt werden konnte
    ; Author(s): Oscar (http://www.autoit.de)
    ;===============================================================================
    Func _GUICtrlTreeView_CreateDirectory($hTreeView, $sPath, $bFiles = False)
    Local $hFileItem, $FolderColor = 0x0000FF, $Folder, $aCount[2] = [0, 0]
    If Not StringInStr(FileGetAttrib($sPath), 'D') Then Return SetError(1, 0, 0)
    $sPath = FileGetLongName($sPath)
    Local $oFSO = ObjCreate('Scripting.FileSystemObject')
    If @error Then Return SetError(2, 0, 0)
    _GUICtrlTreeView_BeginUpdate($hTreeView)
    _GUICtrlTreeView_DeleteAll(GUICtrlGetHandle($hTreeView))
    Local $hTreeViewItem = GUICtrlCreateTreeViewItem($sPath, $hTreeView)
    GUICtrlSetColor(-1, $FolderColor)
    _GUICtrlTreeView_SetIcon($hTreeView, $hTreeViewItem, 'shell32.dll', 0)
    $Folder = $oFSO.GetFolder($sPath)
    _CreateDirectoryRecursive($hTreeView, $Folder, $hTreeViewItem, $bFiles, $aCount)
    If $bFiles Then
    For $Files In $Folder.Files
    $hFileItem = GUICtrlCreateTreeViewItem($Files.Name, $hTreeViewItem)
    $aCount[1] += 1
    Next
    EndIf
    _GUICtrlTreeView_SetIcon($hTreeView, $hTreeViewItem, 'shell32.dll', 3, 2)
    _GUICtrlTreeView_SetIcon($hTreeView, $hTreeViewItem, 'shell32.dll', 110, 4)
    _GUICtrlTreeView_EndUpdate($hTreeView)
    GUICtrlSetState($hTreeViewItem, $GUI_EXPAND)
    $oFSO = ''
    Return $aCount
    EndFunc ;==>_GUICtrlTreeView_CreateDirectory

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

    Func _CreateDirectoryRecursive($hTreeView, $Folder, $ItemOld, $bFiles, ByRef $aCount)
    Local $hFolderItem, $hFileItem, $FolderColor = 0x0000FF
    For $Subfolder In $Folder.SubFolders
    $hFolderItem = GUICtrlCreateTreeViewItem($Subfolder.Name, $ItemOld)
    GUICtrlSetColor(-1, $FolderColor)
    _GUICtrlTreeView_SetIcon($hTreeView, $hFolderItem, 'shell32.dll', 3, 2)
    _GUICtrlTreeView_SetIcon($hTreeView, $hFolderItem, 'shell32.dll', 110, 4)
    $aCount[0] += 1
    _CreateDirectoryRecursive($hTreeView, $Subfolder, $hFolderItem, $bFiles, $aCount)
    If $bFiles Then
    For $Files In $Subfolder.Files
    $hFileItem = GUICtrlCreateTreeViewItem($Files.Name, $hFolderItem)
    $aCount[1] += 1
    Next
    EndIf
    Next
    EndFunc ;==>_CreateDirectoryRecursive

    [/autoit]
  • Ich hatte gedacht, dass es vielleicht eine Funktion bzw. ein Control von Microsoft gibt, mit dem ich das ganze dann mit ObjCreate() benutzen kann.
    Bei deiner Funktion hatte ich nur einen Einwand und zwar das die TreeViewItems "Checkboxen" hatten. Nicht das du mich jetzt falsch verstehst Oscar . Aber so wie ich das jetzt sehe, ist diese Funktion einwenig anderst. Besser. Diese Funktion werde ich jetzt von dir verwenden, danke. :thumbup:

    4 Mal editiert, zuletzt von MehmeX (17. Mai 2009 um 21:41)

  • Eine Frage noch: Wie bekomme ich den Pfad des aktuell markierten Item zurück?

    Einmal editiert, zuletzt von MehmeX (17. Mai 2009 um 22:22)

  • Hallo Mehmex,

    schau die in der Hilfe folgendes an:

    Zitat

    _GUICtrlTreeView_GetTree
    --------------------------------------------------------------------------------

    Ermittelt den kompletten Pfad bis hin zum gewünschten Item


    #Include <GuiTreeView.au3>
    _GUICtrlTreeView_GetTree($hWnd, $hItem)

    das liefert dein gewünschtes Ergebnis , wenn du vorher noch das Separatorzeichen auf "\" einstellst hast du die korrekte Pfadangabe


    mfg (Auto)Bert

    • Offizieller Beitrag

    Bei deiner Funktion hatte ich nur einen Einwand und zwar das die TreeViewItems "Checkboxen" hatten. Nicht das du mich jetzt falsch verstehst Oscar . Aber so wie ich das jetzt sehe, ist diese Funktion einwenig anderst. Besser. Diese Funktion werde ich jetzt von dir verwenden, danke. :thumbup:

    Die Funktion ist immer noch die Gleiche, nur das Beispiel dazu ist anders. :)
    Du hattest ja noch geschrieben, dass Du ein Resizing haben willst. Bekommst Du das hin? Ansonsten frag ruhig.