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
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Opt("GUIResizeMode",$GUI_DOCKALL)
Global $subfolder[30]
[/autoit] [autoit][/autoit] [autoit]$version = "1.0"
$mainframe = GUICreate("Project Creator " & $version, 300, 200)
GUICtrlCreateLabel("Projektname:", 20, 10)
$project = GUICtrlCreateInput("", 20, 30, 200, 20)
GUICtrlCreateLabel("Projektpfad:", 20, 60)
$folder = GUICtrlCreateInput("", 20, 80, 200, 20)
$browse = GUICtrlCreateButton("Browse", 230, 80, 50, 18)
GUICtrlCreateLabel("Anzahl Unterordner:", 20, 110, 220, 15)
$subfolder_count = GUICtrlCreateInput("", 20, 130, 20, 20)
$start = GUICtrlCreateButton("", 100, 155, 23, 23, 0x0040)
GUICtrlSetTip(-1, "Projekt anlegen")
GUICtrlSetImage(-1, @SystemDir & '\shell32.dll', -138, 0)
$label1 = GUICtrlCreateLabel("Projekt anlegen", 130, 160)
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)
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
$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
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
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