Ordner durch Array erstellen

  • Hallo alle zusammeln,

    derzeit bastel ich gerade ein kleines Tool für einen Arbeitskollegen, der sich folgendes wünschte:

    Er gibt in der GUI einen Projektnamen in ein Inputfeld, wählt dann über eine Browsefunktion einen Hauptordner an und kann dann noch auswählen ob bzw wieviele Unterordner er dazu haben möchte.

    Das läuft bisher auch soweit. Nur jetzt habe ich das Problem, dass ich gerne Namen für die Unterordner individuell angeben kann.

    Als Beispiel ich wähle 3 Unterordner, dann soll er mich fragen "Wie lautet Ordner 1?" und "Wie lautet Ordner 2" usw. Derzeit werden die Unterordner in einem Array einfach durchnummeriert erstellt.

    Mit AutoIt komm ich schon ganz gut klar - jedoch ist das Thema Array für mich absolut schwer zu verstehen und daher hab ich da doch arge Probleme mit.

    Hier mal das aktuelle Script:

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    Opt("GUIResizeMode",$GUI_DOCKALL)

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

    Global $subfolder[30]

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

    $version = "1.0"
    $mainframe = GUICreate("Project Creator " & $version, 300, 200)

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

    GUICtrlCreateLabel("Projektname:", 20, 10)
    $project = GUICtrlCreateInput("", 20, 30, 200, 20)

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

    GUICtrlCreateLabel("Projektpfad:", 20, 60)
    $folder = GUICtrlCreateInput("", 20, 80, 200, 20)
    $browse = GUICtrlCreateButton("Browse", 230, 80, 50, 18)

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

    GUICtrlCreateLabel("Anzahl Unterordner:", 20, 110, 220, 15)
    $subfolder_count = GUICtrlCreateInput("", 20, 130, 20, 20)

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

    $start = GUICtrlCreateButton("", 100, 155, 23, 23, 0x0040)
    GUICtrlSetTip(-1, "Projekt anlegen")
    GUICtrlSetImage(-1, @SystemDir & '\shell32.dll', -138, 0)
    $label1 = GUICtrlCreateLabel("Projekt anlegen", 130, 160)

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

    GUIsetstate(@SW_SHOW, $mainframe)

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

    $read_subfolder_count = GUICtrlRead($subfolder_count)

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

    While 1
    Switch (GUIGetMsg())
    Case $GUI_EVENT_CLOSE
    Exit
    Case $browse
    $var = FileSelectFolder("Wähle einen Ordner wo das Projekt erstellt werden soll:", "", 1)

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

    If @error Then
    MsgBox(4096,"","Kein Ordner ausgewählt!")
    Else
    GUICtrlSetData($folder, $var & "\")
    EndIf
    Case $start
    $read_project = GUICtrlRead($project)
    $read_folder = GUICtrlRead($folder)
    $read_subfolder_count = GUICtrlRead($subfolder_count)
    If $read_folder = "" Then
    MsgBox(0,"ALERT", "Es wurde kein Projektpfad angegeben")
    ElseIf $read_project = "" Then
    MsgBox(0,"ALERT", "Es wurde kein Projektname angegeben")
    ElseIf $read_subfolder_count = "" Then
    $read_project = GUICtrlRead($project)
    $read_folder = GUICtrlRead($folder)
    DirCreate($read_folder & $read_project)
    $label2 = GUICtrlCreateLabel("Projekt erstellt", 130, 160)
    GUICtrlSetColor($label2, 0x33CC33)
    Sleep(3000)
    GUICtrlSetState(-1, $GUI_HIDE)
    Else
    DirCreate($read_folder & $read_project)
    Local $arTest[$read_subfolder_count]
    For $i = 0 To UBound($arTest) -1
    $arTest[$i] = $i +1
    DirCreate($read_folder & $read_project & "\" & $arTest[$i])
    Next

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

    $read_project = GUICtrlRead($project)
    $read_folder = GUICtrlRead($folder)
    $label2 = GUICtrlCreateLabel("Projekt erstellt", 130, 160)
    GUICtrlSetColor($label2, 0x33CC33)
    Sleep(3000)
    GUICtrlSetState(-1, $GUI_HIDE)
    EndIf
    EndSwitch

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

    If GUICtrlRead($subfolder_count) <> $read_subfolder_count Then
    $read_subfolder_count = GUICtrlRead($subfolder_count)
    If GUICtrlRead($subfolder_count) >= 31 Then
    MsgBox(0,"","Zuviele Ordner")
    Else
    Local $x = 30
    For $i = 0 To $read_subfolder_count -1
    $subfolder[$i] = GUICtrlCreateInput("", 290, $x, 135, 20)
    $x += 30
    Next
    _GUIAutoSize($mainframe, "C", "C")
    EndIf
    EndIf
    $read_subfolder_count = GUICtrlRead($subfolder_count)
    WEnd

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

    Func _GUIAutoSize($hGUI, $GUIX = Default, $GUIY = Default)
    Local Const $GW_CHILD = 0x5
    Local Const $GW_HWNDNEXT = 0x2
    Local Const $GWL_STYLE = 0xFFFFFFF0
    Local Const $WS_VISIBLE = 0x10000000
    Local $aClient, $aHwnd, $aID, $aPos, $aStyle, $NCW, $NCH
    ; ---------------------------------------------------------------------------------------------------------------------------
    ; Dimensionen des NonClient-Bereichs des Fensters ermitteln
    If Not IsHWnd($hGUI) Then Return SetError(1, 1, False)
    $aPos = WinGetPos($hGUI)
    $aClient = WinGetClientSize($hGUI)
    $NCW = $aPos[2] - $aClient[0]
    $NCH = $aPos[3] - $aClient[1]
    ; ---------------------------------------------------------------------------------------------------------------------------
    ; Positionen der Controls ermitteln
    Local $aSize[4] = [999999, 999999, 0, 0]
    $aHwnd = DllCall("User32.dll", "HWND", "GetWindow", "HWND", $hGUI, "UInt", $GW_CHILD)
    If @error Or $aHwnd[0] = 0 Then Return SetError(1, 2, False)
    While $aHwnd[0]
    $aStyle = DllCall("User32.dll", "Long", "GetWindowLong", "HWND", $aHwnd[0], "Int", $GWL_STYLE)
    If BitAND($aStyle[0], $WS_VISIBLE) = $WS_VISIBLE Then
    $aID = DllCall("User32.dll", "Int", "GetDlgCtrlID", "HWND", $aHwnd[0])
    $aPos = ControlGetPos($hGUI, "", $aID[0])
    $aPos[2] += $aPos[0]
    $aPos[3] += $aPos[1]
    If $aPos[0] < $aSize[0] Then $aSize[0] = $aPos[0]
    If $aPos[1] < $aSize[1] Then $aSize[1] = $aPos[1]
    If $aPos[2] > $aSize[2] Then $aSize[2] = $aPos[2]
    If $aPos[3] > $aSize[3] Then $aSize[3] = $aPos[3]
    EndIf
    $aHwnd = DllCall("User32.dll", "HWND", "GetWindow", "HWND", $aHwnd[0], "UInt", $GW_HWNDNEXT)
    If @error Then Return SetError(1, 2, False)
    WEnd
    If $aSize[0] = 999999 Then Return SetError(1, 3, False)
    ; ---------------------------------------------------------------------------------------------------------------------------
    ; Fenster anpassen
    Local $GUIW = $aSize[2] + $aSize[0] + $NCW
    Local $GUIH = $aSize[3] + $aSize[1] + $NCH
    If $GUIX = "C" Then $GUIX = (@DesktopWidth - $GUIW) / 2
    If $GUIY = "C" Then $GUIY = (@DesktopHeight - $GUIH) / 2
    WinMove($hGUI, "", $GUIX, $GUIY, $GUIW, $GUIH, 1)
    Return True
    EndFunc ;==>_GUIAutoSize

    [/autoit]

    Mein AutoIT Smartphone GUI >>hier<<

    Der Mensch ist das einzige Tier, dass arbeiten muss.

    Einmal editiert, zuletzt von mirko2002 (29. November 2012 um 15:04)

  • Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    Opt("GUIResizeMode",$GUI_DOCKALL)

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

    Global $subfolder[30]

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

    $version = "1.0"
    $mainframe = GUICreate("Project Creator " & $version, 300, 200)

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

    GUICtrlCreateLabel("Projektname:", 20, 10)
    $project = GUICtrlCreateInput("", 20, 30, 200, 20)

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

    GUICtrlCreateLabel("Projektpfad:", 20, 60)
    $folder = GUICtrlCreateInput("", 20, 80, 200, 20)
    $browse = GUICtrlCreateButton("Browse", 230, 80, 50, 18)

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

    GUICtrlCreateLabel("Anzahl Unterordner:", 20, 110, 220, 15)
    $subfolder_count = GUICtrlCreateInput("", 20, 130, 20, 20)

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

    $start = GUICtrlCreateButton("", 100, 155, 23, 23, 0x0040)
    GUICtrlSetTip(-1, "Projekt anlegen")
    GUICtrlSetImage(-1, @SystemDir & '\shell32.dll', -138, 0)
    $label1 = GUICtrlCreateLabel("Projekt anlegen", 130, 160)

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

    GUIsetstate(@SW_SHOW, $mainframe)

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

    $read_subfolder_count = GUICtrlRead($subfolder_count)

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

    While 1
    Switch (GUIGetMsg())
    Case $GUI_EVENT_CLOSE
    Exit
    Case $browse
    $var = FileSelectFolder("Wähle einen Ordner wo das Projekt erstellt werden soll:", "", 1)

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

    If @error Then
    MsgBox(4096,"","Kein Ordner ausgewählt!")
    Else
    GUICtrlSetData($folder, $var & "\")
    EndIf
    Case $start
    $read_project = GUICtrlRead($project)
    $read_folder = GUICtrlRead($folder)
    $read_subfolder_count = GUICtrlRead($subfolder_count)
    If $read_folder = "" Then
    MsgBox(0,"ALERT", "Es wurde kein Projektpfad angegeben")
    ElseIf $read_project = "" Then
    MsgBox(0,"ALERT", "Es wurde kein Projektname angegeben")
    ElseIf $read_subfolder_count = "" Then
    $read_project = GUICtrlRead($project)
    $read_folder = GUICtrlRead($folder)
    DirCreate($read_folder & $read_project)
    $label2 = GUICtrlCreateLabel("Projekt erstellt", 130, 160)
    GUICtrlSetColor($label2, 0x33CC33)
    Sleep(3000)
    GUICtrlSetState(-1, $GUI_HIDE)
    Else
    DirCreate($read_folder & $read_project)
    Local $arTest[$read_subfolder_count]
    For $i = 0 To UBound($arTest) -1
    $arTest[$i] = GUICtrlRead($subfolder[$i])
    DirCreate($read_folder & $read_project & "\" & $arTest[$i])
    Next

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

    $read_project = GUICtrlRead($project)
    $read_folder = GUICtrlRead($folder)
    $label2 = GUICtrlCreateLabel("Projekt erstellt", 130, 160)
    GUICtrlSetColor($label2, 0x33CC33)
    Sleep(3000)
    GUICtrlSetState(-1, $GUI_HIDE)
    EndIf
    EndSwitch

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

    If GUICtrlRead($subfolder_count) <> $read_subfolder_count Then
    $read_subfolder_count = GUICtrlRead($subfolder_count)
    If GUICtrlRead($subfolder_count) >= 31 Then
    MsgBox(0,"","Zuviele Ordner")
    Else
    For $i = 0 To $read_subfolder_count -1
    $subfolder[$i] = GUICtrlCreateInput("", 290, 30*$i+30, 135, 20)
    Next
    _GUIAutoSize($mainframe, "C", "C")
    EndIf
    EndIf
    $read_subfolder_count = GUICtrlRead($subfolder_count)
    WEnd

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

    Func _GUIAutoSize($hGUI, $GUIX = Default, $GUIY = Default)
    Local Const $GW_CHILD = 0x5
    Local Const $GW_HWNDNEXT = 0x2
    Local Const $GWL_STYLE = 0xFFFFFFF0
    Local Const $WS_VISIBLE = 0x10000000
    Local $aClient, $aHwnd, $aID, $aPos, $aStyle, $NCW, $NCH
    ; ---------------------------------------------------------------------------------------------------------------------------
    ; Dimensionen des NonClient-Bereichs des Fensters ermitteln
    If Not IsHWnd($hGUI) Then Return SetError(1, 1, False)
    $aPos = WinGetPos($hGUI)
    $aClient = WinGetClientSize($hGUI)
    $NCW = $aPos[2] - $aClient[0]
    $NCH = $aPos[3] - $aClient[1]
    ; ---------------------------------------------------------------------------------------------------------------------------
    ; Positionen der Controls ermitteln
    Local $aSize[4] = [999999, 999999, 0, 0]
    $aHwnd = DllCall("User32.dll", "HWND", "GetWindow", "HWND", $hGUI, "UInt", $GW_CHILD)
    If @error Or $aHwnd[0] = 0 Then Return SetError(1, 2, False)
    While $aHwnd[0]
    $aStyle = DllCall("User32.dll", "Long", "GetWindowLong", "HWND", $aHwnd[0], "Int", $GWL_STYLE)
    If BitAND($aStyle[0], $WS_VISIBLE) = $WS_VISIBLE Then
    $aID = DllCall("User32.dll", "Int", "GetDlgCtrlID", "HWND", $aHwnd[0])
    $aPos = ControlGetPos($hGUI, "", $aID[0])
    $aPos[2] += $aPos[0]
    $aPos[3] += $aPos[1]
    If $aPos[0] < $aSize[0] Then $aSize[0] = $aPos[0]
    If $aPos[1] < $aSize[1] Then $aSize[1] = $aPos[1]
    If $aPos[2] > $aSize[2] Then $aSize[2] = $aPos[2]
    If $aPos[3] > $aSize[3] Then $aSize[3] = $aPos[3]
    EndIf
    $aHwnd = DllCall("User32.dll", "HWND", "GetWindow", "HWND", $aHwnd[0], "UInt", $GW_HWNDNEXT)
    If @error Then Return SetError(1, 2, False)
    WEnd
    If $aSize[0] = 999999 Then Return SetError(1, 3, False)
    ; ---------------------------------------------------------------------------------------------------------------------------
    ; Fenster anpassen
    Local $GUIW = $aSize[2] + $aSize[0] + $NCW
    Local $GUIH = $aSize[3] + $aSize[1] + $NCH
    If $GUIX = "C" Then $GUIX = (@DesktopWidth - $GUIW) / 2
    If $GUIY = "C" Then $GUIY = (@DesktopHeight - $GUIH) / 2
    WinMove($hGUI, "", $GUIX, $GUIY, $GUIW, $GUIH, 1)
    Return True
    EndFunc ;==>_GUIAutoSize

    [/autoit]

    Du hast das Array nicht mit Werten gefüllt.
    So müsste das Erstellen jetzt eigentlich funktionieren. ;)

    [autoit]


    Func Ulam($n)
    Return 1
    EndFunc

    [/autoit]


    Rekursion FTW :D

  • Omg es war soooo einfach.

    Vielen Dank.... man sieht mal wieder den Wald vor lauter Bäumen nicht. Läuft wie erwartet perfekt!

    Mein AutoIT Smartphone GUI >>hier<<

    Der Mensch ist das einzige Tier, dass arbeiten muss.

  • Hier noch eine elegantere Lösung:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    Opt("GUIResizeMode",$GUI_DOCKALL)

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

    Global $subfolder[30]

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

    $version = "1.0"
    $mainframe = GUICreate("Project Creator " & $version, 300, 200)

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

    GUICtrlCreateLabel("Projektname:", 20, 10)
    $project = GUICtrlCreateInput("", 20, 30, 200, 20)

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

    GUICtrlCreateLabel("Projektpfad:", 20, 60)
    $folder = GUICtrlCreateInput("", 20, 80, 200, 20)
    $browse = GUICtrlCreateButton("Browse", 230, 80, 50, 18)

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

    GUICtrlCreateLabel("Anzahl Unterordner:", 20, 110, 220, 15)
    $subfolder_count = GUICtrlCreateInput("", 20, 130, 20, 20)

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

    $start = GUICtrlCreateButton("", 100, 155, 23, 23, 0x0040)
    GUICtrlSetTip(-1, "Projekt anlegen")
    GUICtrlSetImage(-1, @SystemDir & '\shell32.dll', -138, 0)
    $label1 = GUICtrlCreateLabel("Projekt anlegen", 130, 160)

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

    GUIsetstate(@SW_SHOW, $mainframe)

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

    $read_subfolder_count = GUICtrlRead($subfolder_count)

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

    While 1
    Switch (GUIGetMsg())
    Case $GUI_EVENT_CLOSE
    Exit
    Case $browse
    $var = FileSelectFolder("Wähle einen Ordner wo das Projekt erstellt werden soll:", "", 1)

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

    If @error Then
    MsgBox(4096,"","Kein Ordner ausgewählt!")
    Else
    GUICtrlSetData($folder, $var & "\")
    EndIf
    Case $start
    $read_project = GUICtrlRead($project)
    $read_folder = GUICtrlRead($folder)
    $read_subfolder_count = GUICtrlRead($subfolder_count)
    If $read_folder = "" Then
    MsgBox(0,"ALERT", "Es wurde kein Projektpfad angegeben")
    ElseIf $read_project = "" Then
    MsgBox(0,"ALERT", "Es wurde kein Projektname angegeben")
    ElseIf $read_subfolder_count = "" Then
    $read_project = GUICtrlRead($project)
    $read_folder = GUICtrlRead($folder)
    DirCreate($read_folder & $read_project)
    $label2 = GUICtrlCreateLabel("Projekt erstellt", 130, 160)
    GUICtrlSetColor($label2, 0x33CC33)
    Sleep(3000)
    GUICtrlSetState(-1, $GUI_HIDE)
    Else
    DirCreate($read_folder & $read_project)
    Local $arTest[$read_subfolder_count]
    For $i = 0 To UBound($arTest) -1
    $arTest[$i] = GUICtrlRead($subfolder[$i])
    DirCreate($read_folder & $read_project & "\" & $arTest[$i])
    Next

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

    $read_project = GUICtrlRead($project)
    $read_folder = GUICtrlRead($folder)
    $label2 = GUICtrlCreateLabel("Projekt erstellt", 130, 160)
    GUICtrlSetColor($label2, 0x33CC33)
    Sleep(3000)
    GUICtrlSetState(-1, $GUI_HIDE)
    EndIf
    EndSwitch

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

    If GUICtrlRead($subfolder_count) <> $read_subfolder_count Then
    $read_subfolder_count = GUICtrlRead($subfolder_count)
    If GUICtrlRead($subfolder_count) >= 31 Then
    MsgBox(0,"","Zuviele Ordner")
    Else
    For $i = 0 To $read_subfolder_count -1
    $subfolder[$i] = GUICtrlCreateInput("", 290, 30*$i+30, 135, 20)
    Next
    _GUIAutoSize($mainframe, "C", "C")
    EndIf
    EndIf
    $read_subfolder_count = GUICtrlRead($subfolder_count)
    WEnd

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

    Func _GUIAutoSize($hGUI, $GUIX = Default, $GUIY = Default)
    Local Const $GW_CHILD = 0x5
    Local Const $GW_HWNDNEXT = 0x2
    Local Const $GWL_STYLE = 0xFFFFFFF0
    Local Const $WS_VISIBLE = 0x10000000
    Local $aClient, $aHwnd, $aID, $aPos, $aStyle, $NCW, $NCH
    ; ---------------------------------------------------------------------------------------------------------------------------
    ; Dimensionen des NonClient-Bereichs des Fensters ermitteln
    If Not IsHWnd($hGUI) Then Return SetError(1, 1, False)
    $aPos = WinGetPos($hGUI)
    $aClient = WinGetClientSize($hGUI)
    $NCW = $aPos[2] - $aClient[0]
    $NCH = $aPos[3] - $aClient[1]
    ; ---------------------------------------------------------------------------------------------------------------------------
    ; Positionen der Controls ermitteln
    Local $aSize[4] = [999999, 999999, 0, 0]
    $aHwnd = DllCall("User32.dll", "HWND", "GetWindow", "HWND", $hGUI, "UInt", $GW_CHILD)
    If @error Or $aHwnd[0] = 0 Then Return SetError(1, 2, False)
    While $aHwnd[0]
    $aStyle = DllCall("User32.dll", "Long", "GetWindowLong", "HWND", $aHwnd[0], "Int", $GWL_STYLE)
    If BitAND($aStyle[0], $WS_VISIBLE) = $WS_VISIBLE Then
    $aID = DllCall("User32.dll", "Int", "GetDlgCtrlID", "HWND", $aHwnd[0])
    $aPos = ControlGetPos($hGUI, "", $aID[0])
    $aPos[2] += $aPos[0]
    $aPos[3] += $aPos[1]
    If $aPos[0] < $aSize[0] Then $aSize[0] = $aPos[0]
    If $aPos[1] < $aSize[1] Then $aSize[1] = $aPos[1]
    If $aPos[2] > $aSize[2] Then $aSize[2] = $aPos[2]
    If $aPos[3] > $aSize[3] Then $aSize[3] = $aPos[3]
    EndIf
    $aHwnd = DllCall("User32.dll", "HWND", "GetWindow", "HWND", $aHwnd[0], "UInt", $GW_HWNDNEXT)
    If @error Then Return SetError(1, 2, False)
    WEnd
    If $aSize[0] = 999999 Then Return SetError(1, 3, False)
    ; ---------------------------------------------------------------------------------------------------------------------------
    ; Fenster anpassen
    Local $GUIW = $aSize[2] + $aSize[0] + $NCW
    Local $GUIH = $aSize[3] + $aSize[1] + $NCH
    If $GUIX = "C" Then $GUIX = (@DesktopWidth - $GUIW) / 2
    If $GUIY = "C" Then $GUIY = (@DesktopHeight - $GUIH) / 2
    WinMove($hGUI, "", $GUIX, $GUIY, $GUIW, $GUIH, 1)
    Return True
    EndFunc ;==>_GUIAutoSize

    [/autoit]
    [autoit]


    Func Ulam($n)
    Return 1
    EndFunc

    [/autoit]


    Rekursion FTW :D