Alle Ordner in einer Inputbox anzeigen lassen

  • Hallo zusammen.

    Ich würde mir gerne in einer InputBox alle Ordner (ohne Unterordner) die sich z.B. auf C:\ befinden anzeigen lassen.

    Wie kann ich das umsetzen?

    Vielen Dank!

    Gruß Sirius

  • Schön ... dann fang mal an.

    Du brauchst u. a. _FileListToArray.
    Dazu noch deine InputBox.
    Schau mal in die Hilfe.

  • Hi Tweaky!

    Ich habe folgendes versucht:

    Spoiler anzeigen
    [autoit]


    #include <File.au3>
    #include <Array.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <TabConstants.au3>
    #include <WindowsConstants.au3>

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

    Global $sFilePath = @DesktopDir
    Global $iFlag = 2
    Global $ordnerl = _FileListToArray ( $sFilePath, "*" ,$iFlag)
    Global $iRows = UBound($ordnerl, $UBOUND_ROWS)

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

    For $i = 1 To $iRows

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

    $Form1_1 = GUICreate("Form1", 736, 545, 580, 104)
    $walle = GUICtrlCreateTab(0, 72, 753, 489)
    $Objekt = GUICtrlCreateTabItem("Objekt anlegen")
    $Input1 = GUICtrlCreateInput("", 24, 144, 273, 21)
    $Input2 = GUICtrlCreateInput($ordnerl[$i], 24, 168, 273, 340)

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

    GUISetState(@SW_SHOW)

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

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

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

    EndSwitch
    WEnd
    Next

    [/autoit]
    • Offizieller Beitrag

    gerne in einer InputBox alle Ordner


    Hier mal für ein Input (sinnvoll?).

    Spoiler anzeigen
    [autoit]

    #include <File.au3>
    #include <EditConstants.au3>

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

    Global $sPath, $aFolder, $index

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

    $hGui = GUICreate('Ordner', 414, 70)
    $inRoot = GUICtrlCreateInput('', 10, 10, 350, 20)
    GUICtrlSendMsg($inRoot, 0x1501, 0, "Bitte Ordner auswählen")
    $btSelect = GUICtrlCreateButton('...', 384, 10, 20, 20)
    $inFolder = GUICtrlCreateInput('', 10, 40, 350, 20, $ES_READONLY)
    GUICtrlSetBkColor(-1, 0xFFFFFF)
    $btPrev = GUICtrlCreateButton('<', 362, 40, 20, 20)
    $btNext = GUICtrlCreateButton('>', 384, 40, 20, 20)
    ControlFocus($hGui, '', $btSelect)

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

    GUISetState()

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

    While 1
    Switch GUIGetMsg()
    Case -3
    Exit
    Case $btSelect
    $sPath = FileSelectFolder('Bitte einen Ordner auswählen', '')
    If Not @error Then _ReadFolders($sPath)
    Case $btPrev
    _ShowPrevious()
    Case $btNext
    _ShowNext()
    EndSwitch
    WEnd

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

    Func _ReadFolders($path)
    $aFolder = _FileListToArray($path, '*', 2)
    GUICtrlSetData($inRoot, $path)
    If Not IsArray($aFolder) Then
    GUICtrlSetData($inFolder, 'Keine Unterordner!')
    Return WinSetTitle($hGui, '', '[ 0 von 0 ]')
    EndIf
    $index = 1
    GUICtrlSetData($inFolder, $aFolder[$index])
    WinSetTitle($hGui, '', '[ 1 von ' & $aFolder[0] & ' ]')
    EndFunc

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

    Func _ShowPrevious()
    If $index = 1 Then Return
    $index -= 1
    GUICtrlSetData($inFolder, $aFolder[$index])
    WinSetTitle($hGui, '', '[ ' & $index & ' von ' & $aFolder[0] & ' ]')
    EndFunc

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

    Func _ShowNext()
    If $index = $aFolder[0] Then Return
    $index += 1
    GUICtrlSetData($inFolder, $aFolder[$index])
    WinSetTitle($hGui, '', '[ ' & $index & ' von ' & $aFolder[0] & ' ]')
    EndFunc

    [/autoit]


    Nun kannst du dich mal selbst an der Combo versuchen.

  • Hi bugfix. Werde ich mir anschauen, obwohl ich mit combo schon erfolgreich war. Ging einfacher als ich gedacht habe. Wollte meine Version mit der Combo mal posten, bin aber zeitlich nicht mehr dazu gekommen. Das werde ich am Freitag nachholen, wenn es gewünscht ist!?

  • Hallo zusammen,
    und ein frohes neues Jahr wünsche ich Euch noch!

    Ich habe nochmal eine Frage zur ComboBox. Ich habe zwei Tab´s in meinem Tool, und möchte die Combobox nur auf dem ersten Tab angezeigt bekommen. Wie und wo muss ich das definieren?


    Spoiler anzeigen
    [autoit]


    #include <GuiComboBoxEx.au3>
    #include <ButtonConstants.au3>
    #include <ComboConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <TabConstants.au3>
    #include <WindowsConstants.au3>

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

    $test = GUICreate("test", 791, 640, 199, 119)
    $datei = GUICtrlCreateMenu("&Datei")
    $MenuItem3 = GUICtrlCreateMenuItem("Beenden Alt + F4", $datei)
    $ueber = GUICtrlCreateMenu("Ü&ber...")
    $Tab1 = GUICtrlCreateTab(-3, 34, 793, 585)
    $TabSheet1 = GUICtrlCreateTabItem("Objekte anlegen")
    $hCombo1 = _GUICtrlComboBoxEx_Create($test, "", 24, 135, 294, 400, BitOR($CBS_SIMPLE, $WS_VSCROLL, $WS_BORDER))
    $TabSheet2 = GUICtrlCreateTabItem("Projekte anlegen")

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

    GUICtrlCreateTabItem("")
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

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

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

    EndSwitch
    WEnd

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

    Vielen Dank!

    Gruß
    Sirius

    • Offizieller Beitrag

    und möchte die Combobox nur auf dem ersten Tab angezeigt bekommen.


    Die ..ComboBoxEx-Funtion erzeugt keine ID und passt somit nicht in die Struktur des Tab-Ctrl. Wenn du unbedingt mit dieser Funktion arbeiten willst (warum benutzt du nicht GUICtrlCreateCombo? ) , dann musst du die Combo verstecken, wenn nicht das dazugehörige Tabsheet aktiv ist.

  • Hi BugFix,

    und mit einer ComboboxEx ist das nicht machbar? Eigentlich brauche ich genau diese Box, weil ich nicht weiss, wie ich es anders umsetzen soll.

    Gruß
    Sirius

    • Offizieller Beitrag

    Eigentlich brauche ich genau diese Box


    Na und was ist an dieser Box sooo anders im Vergleich zu der mit GUICtrlCreateCombo erstellten? :huh:
    Falls du ein Handle benötigst, bekommst du das ebenso von der Box-ID (GuiCtrlGetHandle) und kannst mit diesem Handle dann die Funktionen der ..Ex ebenso nutzen.

    Aber ich habe doch auch beschrieben WIE es mit der ..Ex machbar ist:

    Zitat

    dann musst du die Combo verstecken, wenn nicht das dazugehörige Tabsheet aktiv ist.

    • Offizieller Beitrag

    Hier hast du ein Beispiel, wie man die ComboBox auf den Tabs aus-/einblendet:

    Spoiler anzeigen
    [autoit]

    #include <GuiComboBoxEx.au3>
    #include <ButtonConstants.au3>
    #include <ComboConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <TabConstants.au3>
    #include <WindowsConstants.au3>
    #include <GuiTab.au3>

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

    $test = GUICreate("test", 791, 640, 199, 119)
    $datei = GUICtrlCreateMenu("&Datei")
    $MenuItem3 = GUICtrlCreateMenuItem("Beenden Alt + F4", $datei)
    $ueber = GUICtrlCreateMenu("Ü&ber...")
    $g_hTab = GUICtrlCreateTab(-3, 34, 793, 585)

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

    $TabSheet1 = GUICtrlCreateTabItem("Objekte anlegen")
    $hCombo1 = _GUICtrlComboBoxEx_Create($test, "", 24, 135, 294, 400, BitOR($CBS_SIMPLE, $WS_VSCROLL, $WS_BORDER))
    $TabSheet2 = GUICtrlCreateTabItem("Projekte anlegen")
    GUICtrlCreateTabItem("")
    GUISetState(@SW_SHOW)
    GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY"); WM_NOTIFY registrieren um die Events vom Tab auszuwerten

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

    #EndRegion ### END Koda GUI section ###
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE, $MenuItem3
    Exit
    EndSwitch
    WEnd

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

    Func WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam)
    #forceref $hWnd, $iMsg, $wParam
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndTab
    $hWndTab = $g_hTab
    If Not IsHWnd($g_hTab) Then $hWndTab = GUICtrlGetHandle($g_hTab)
    $tNMHDR = DllStructCreate($tagNMHDR, $lParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")
    Switch $hWndFrom
    Case $hWndTab
    Switch $iCode
    Case $NM_CLICK ; The user has clicked the left mouse button within the control
    if _GUICtrlTab_GetCurSel($g_hTab)= 0 then _WinAPI_ShowWindow($hCombo1, @SW_SHOW); Tab 0 Combo sichtbar
    if _GUICtrlTab_GetCurSel($g_hTab)= 1 then _WinAPI_ShowWindow($hCombo1, @SW_HIDE); Tab 1 Combo unsichtbar
    EndSwitch

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

    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_NOTIFY

    [/autoit]