Auswahl mit checkboxen

    • Offizieller Beitrag

    Diesen Teil:

    [autoit]


    $FList = _FileListToArray($Pfad) ;Daten kommen in das Array
    $Progaufruf = _FileListToArray($Pfad) ;Daten kommen in das zweite Array für den Aufruf der Programme
    If @Error=1 Then
    MsgBox (0,"","No Files\Folders Found.")
    Exit
    EndIf

    [/autoit]


    kannst Du auch so schreiben:

    [autoit]


    $FList = _FileListToArray($Pfad) ;Daten kommen in das Array
    If @Error=1 Then
    MsgBox (0,"","No Files\Folders Found.")
    Exit
    EndIf
    $Progaufruf = $FList ;Daten kommen in das zweite Array für den Aufruf der Programme

    [/autoit]


    Dann muss das Script das _FileListToArray() nicht doppelt ausführen (kürzere Laufzeit).

  • Hallo zusammen,

    ich habe noch mal etwas dran gebastelt und mich wieder verbastelt glaube ich!!

    Spoiler anzeigen
    [autoit]


    #cs ----------------------------------------------------------------------------

    AutoIt Version: 3.2.12.1
    Author: Icerose

    Script Function:
    Gui für die zusammenstellung von AutoIT packeten für Office Rechner

    #ce ----------------------------------------------------------------------------

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

    #Include <File.au3>
    #Include <Array.au3>
    #include <GUIConstants.au3>
    #include <GUIConstantsEx.au3>

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

    Opt('GUIOnEventMode', 1) ; OnEvent-Mode einschalten

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

    $OfficePfad = "Office";auslesen des Ordners
    $EntwicklerPfad = "Entwickler";auslesen des Ordners
    $SonstigePfad = "Einrichten";auslesen des Ordners

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

    $OfficeFList = _FileListToArray($OfficePfad) ;Officedaten kommen in das Array
    If @Error=1 Then
    MsgBox (0,"Ad","No Folders Found.")
    Exit
    ElseIf @error = 4 Then
    MsgBox (0,"","No Files Found.")
    Exit
    EndIf

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

    $EntwicklerFList = _FileListToArray($EntwicklerPfad) ;Entwicklerdaten kommen in das Array
    If @Error=1 Then
    MsgBox (0,"","No Folders Found.")
    Exit
    ElseIf @error = 4 Then
    MsgBox (0,"","No Files Found.")
    Exit
    EndIf

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

    $SonstigeFList = _FileListToArray($SonstigePfad) ;Sonstigedaten kommen in das Array
    If @Error=1 Then
    MsgBox (0,"","No Folders Found.")
    Exit
    ElseIf @error = 4 Then
    ;$Label7 = GUICtrlCreateLabel("Office Pakete", 20 , 65, 180, 30)
    MsgBox (0,"","No Files Found.")
    Exit
    EndIf

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

    ;Variablen
    Global $breite = 458
    Global $hoch = 250 ;760
    Global $left = 196
    Global $top = 50
    Global $anzahl = 16
    Global $checkOff[$OfficeFList[0]]
    Global $checkEnt[$EntwicklerFList[0]]
    Global $checkSon[$SonstigeFList[0]]
    Global $y = 95, $y1 = 95, $y2 = 95
    Global $test = 30, $test1 = 30, $test2 = 30
    Global $dazu = 0

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

    If $OfficeFList[0] <= $anzahl Then
    $difOf = $OfficeFList[0] / 2
    ElseIf $OfficeFList[0] > $anzahl Then
    $breite = 658
    $dazu = 90
    $difOf = $OfficeFList[0] / 3
    EndIf

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

    For $i = 0 To UBound($OfficeFList)
    $hoch += 20
    MsgBox (0,"","Ha Ha Said the Clown." &$hoch&"")
    Next

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

    If $EntwicklerFList[0] <= $anzahl Then
    $difEn = $EntwicklerFList[0] / 2
    ElseIf $EntwicklerFList[0] > $anzahl Then
    $breite = 658
    $dazu = 90
    $difEn = $EntwicklerFList[0] / 3
    EndIf

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

    For $i = 0 To UBound($EntwicklerFList)
    $hoch += 20
    Next

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

    If $SonstigeFList[0] <= $anzahl Then
    $difSo = $SonstigeFList[0] / 2
    ElseIf $SonstigeFList[0] > $anzahl Then
    $breite = 658
    $dazu = 90
    $difSo = $SonstigeFList[0] / 3
    EndIf

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

    For $i = 0 To UBound($SonstigeFList)
    $hoch += 20

    Next

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

    MsgBox (0,"","Ha Ha Said the Clown." &$hoch&"")

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

    $OfficeAufruf = $OfficeFList ;Officedaten kommen in das zweite Array für den Aufruf der Officeprogramme
    $EntwickAufruf = $EntwicklerFList ;Entwicklerdaten kommen in das zweite Array für den Aufruf der Entwicklerprogramme
    $SonstigAufruf = $SonstigeFList ;Sonstigedaten kommen in das zweite Array für den Aufruf der Sonstigen Programme

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

    $newList1 = _ArrayTrim( $OfficeFList, 4, 1,1) ;letzten vier Zeichen werden von rechts abgetrennt
    $newList2 = _ArrayTrim( $EntwicklerFList, 4, 1,1) ;letzten vier Zeichen werden von rechts abgetrennt
    $newList3 = _ArrayTrim( $SonstigeFList, 4, 1,1) ;letzten vier Zeichen werden von rechts abgetrennt

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

    ;Gui erstellen
    GUICreate("Install Progs (by. icerose)", $breite, $hoch, $left, $top)
    GUISetOnEvent($GUI_EVENT_CLOSE, '_GUI_close')
    ;MM Logo
    $pic = GUICtrlCreatePic ( "Logo.JPG" , 15, 8, 100, 30)
    GUISetBkColor(0xFFFFFF) ; Hintergrundfarbe
    ;Label erstellen
    $Label1 = GUICtrlCreateLabel("Paketauswahl", 155 + $dazu , 20, 180, 45)
    GUICtrlSetFont(-1, 18, 800, 0, "")
    $Label2 = GUICtrlCreateLabel("Office Pakete", 20 , 65, 180, 30)
    GUICtrlSetFont(-1, 12, 800, 0, "")
    $Button2 = GUICtrlCreateButton("alle", 200, 65, 50, 20, 25, 0) ;Button für alle Checkboxen direkt anzuwählen
    GUICtrlSetOnEvent(-1, "_AlleOffice")

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

    For $i = 0 To UBound($checkOff) -1
    If $i <= 7 Then ; $difOf Then
    $checkOff[$i] = GUICtrlCreateCheckbox($OfficeFList[$i+1], $test, $y, 182, 20)
    $y += 20
    ElseIf $i < 16 Then ;2 * $difOf Then
    $test = 250
    $checkOff[$i] = GUICtrlCreateCheckbox($OfficeFList[$i+1], $test, $y1, 182, 20)
    $y1 += 20
    Else
    $test = 500
    $checkOff[$i] = GUICtrlCreateCheckbox($OfficeFList[$i+1], $test, $y2, 182, 20)
    $y2 += 20
    EndIf
    Next

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

    $Label3 = GUICtrlCreateLabel("Entwickler Pakete", 20 , $y +20, 180, 30)
    GUICtrlSetFont(-1, 12, 800, 0, "")
    $Button3 = GUICtrlCreateButton("alle", 200, $y +20, 50, 20, 25, 0) ;Button für alle Checkboxen direkt anzuwählen
    GUICtrlSetOnEvent(-1, "_AlleEntwick")

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

    Global $x = $y +50 ;Höhe der Checkboxen der Entwicklerprogramme
    Global $x1 = $y +50 ;Höhe der Checkboxen der Entwicklerprogramme
    Global $x2 = $y +50 ;Höhe der Checkboxen der Entwicklerprogramme

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

    For $i = 0 To UBound($checkEnt) -1
    If $i <= 7 Then ;$difEn Then
    $checkEnt[$i] = GUICtrlCreateCheckbox($EntwicklerFList[$i+1], $test1, $x, 182, 20)
    $x += 20
    ElseIf $i < 16 Then;2 * $difEn Then
    $test1 = 250
    $checkEnt[$i] = GUICtrlCreateCheckbox($EntwicklerFList[$i+1], $test1, $x1, 182, 20)
    $x1 += 20
    Else
    $test1 = 500
    $checkEnt[$i] = GUICtrlCreateCheckbox($EntwicklerFList[$i+1], $test1, $x2, 182, 20)
    $x2 += 20
    EndIf
    Next

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

    $Label4 = GUICtrlCreateLabel("Sonstige Pakete", 20 , $x +20, 180, 30)
    GUICtrlSetFont(-1, 12, 800, 0, "")
    $Button4 = GUICtrlCreateButton("alle", 200, $x +20, 50, 20, 25, 0) ;Button für alle Checkboxen direkt anzuwählen
    GUICtrlSetOnEvent(-1, "_AlleSonstige")

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

    Global $z = $x +50 ;Höhe der Checkboxen der Sonstige Programme
    Global $z1 = $x +50 ;Höhe der Checkboxen der Sonstige Programme
    Global $z2 = $x +50 ;Höhe der Checkboxen der Sonstige Programme

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

    For $i = 0 To UBound($checkSon) -1
    If $i <=7 Then; $difSo Then
    $checkSon[$i] = GUICtrlCreateCheckbox($SonstigeFList[$i+1], $test2, $z, 182, 20)
    $z += 20
    ElseIf $i < 16 Then; 2 * $difSo Then
    $test2 = 250
    $checkSon[$i] = GUICtrlCreateCheckbox($SonstigeFList[$i+1], $test2, $z1, 182, 20)
    $z1 += 20
    Else
    $test2 = 500
    $checkSon[$i] = GUICtrlCreateCheckbox($SonstigeFList[$i+1], $test2, $z2, 182, 20)
    $z2 += 20
    EndIf
    Next
    ;$testLabel = GUICtrlCreateLabel("--------------------------", 5, $z, 106, 17)

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

    $Button1 = GUICtrlCreateButton("Installieren", 170 + $dazu , $z + 30, 110, 25, 0)
    GUICtrlSetOnEvent(-1, "_Absenden")

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

    $Button5 = GUICtrlCreateButton("keine", 350 + $dazu, $z + 30, 50, 20, 25, 0) ;Button für keine Checkboxen direkt anzuwählen
    GUICtrlSetOnEvent(-1, "_Keine")

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

    $Label5 = GUICtrlCreateLabel("V.: 1.0", $breite -40 , $hoch -20, 35, 17)
    $Label6 = GUICtrlCreateLabel("by. ", 5, $hoch -20, 106, 17)

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

    ;MsgBox (0,"","Die Werte x="& $x &" y="& $y&" z= "& $z )

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

    GUISetState () ; zeigt eine leere Dialogbox an

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

    While 1
    Sleep(100)
    WEnd

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

    Func _GUI_close()
    Exit
    EndFunc

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

    Func _AlleOffice()
    For $xyz = 0 To UBound($checkOff) -1
    GUICtrlSetState($checkOff[$xyz], $GUI_CHECKED)
    Next
    EndFunc ;==>_Alles Office

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

    Func _AlleEntwick()
    For $xyz = 0 To UBound($checkEnt) -1
    GUICtrlSetState($checkEnt[$xyz], $GUI_CHECKED)
    Next
    EndFunc ;==>_Alles Entwickler

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

    Func _AlleSonstige()
    For $xyz = 0 To UBound($checkSon) -1
    GUICtrlSetState($checkSon[$xyz], $GUI_CHECKED)
    Next
    EndFunc ;==>_Alles Sonstigen

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

    Func _Keine()
    For $xyz = 0 To UBound($checkOff) -1
    GUICtrlSetState($checkOff[$xyz], $GUI_UNCHECKED)
    Next
    For $xyz = 0 To UBound($checkEnt) -1
    GUICtrlSetState($checkEnt[$xyz], $GUI_UNCHECKED)
    Next
    For $xyz = 0 To UBound($checkSon) -1
    GUICtrlSetState($checkSon[$xyz], $GUI_UNCHECKED)
    Next
    EndFunc ;==>_Keine

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

    Func _Absenden()
    MsgBox (0,"","Ist doch noch nicht fertig!")
    ;For $i = 0 To UBound($checkOff)-1
    ;If BitAND(GUICtrlRead($checkOff[$i]), $GUI_CHECKED) Then ShellExecuteWait($OfficePfad & '\' & $OfficeAufruf[$i+1])
    ;Next
    ;For $i = 0 To UBound($checkEnt)-1
    ;If BitAND(GUICtrlRead($checkEnt[$i]), $GUI_CHECKED) Then ShellExecuteWait($EntwicklerPfad & '\' & $EntwickAufruf[$i+1])
    ;Next
    ;For $i = 0 To UBound($checkSon)-1
    ;If BitAND(GUICtrlRead($checkSon[$i]), $GUI_CHECKED) Then ShellExecuteWait($SonstigePfad & '\' & $SonstigAufruf[$i+1])
    ;Next
    ;Exit
    EndFunc ;==>_Absenden

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

    Mein Problem erstmal ist das die Höhe der Gui sich mit der Anzahl ändern soll dafür die Schleifen oben aber irgend wie bekomme ich das nicht passend hin das es bei jeder Anzahl von Dateien Stimmt!

    Das heiß wenn ich es auf eine bestimmte Anzahl eingestellt habe und dann mehrere Dateinen in dem Ordner sind wird die Gui nicht groß genug und wenn ich welche weg nehme hat sie noch Überlänge!

    Vielleicht weiß ja einer von Euch Rat!!

    Gruß Icerose

    • Offizieller Beitrag

    Hi, hier mal ein Bsp., wie man mit vielen Controls umgehen kann. Habe jetzt nur eine Spalte Controls untergebracht. Kannst du jetzt natürlich auch noch erweitern auf mehrere Reihen mit Controls. Tipp: Erstelle dann ein 2D-Array für die Controls, damit die Controls einer Spalte auch immer in einer Arrayspalte liegen - vereinfacht das Verständnis, wo welches Control liegt.

    Spoiler anzeigen
    [autoit]

    Global $arCtrl[76] ; Anzahl aus deiner Funktionsrückgabe
    Global $iMaxCtrl = 10 ; Anzahl der Controls, die auf eine Seite passen
    Global $iTabCount = Ceiling(UBound($arCtrl)/$iMaxCtrl) ; ermitteln, wieviel Seiten (Tabs) notwendig
    Global $arTab[$iTabCount]
    Global $y = 15, $iCurrent = 0

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

    $GUI = GUICreate('Test', 600, 330)
    _createCtrl()
    GUISetState()

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

    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE

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

    Func _createCtrl()
    If $iTabCount = 1 Then
    For $i = 0 To UBound($arCtrl) -1
    $arCtrl[$i] = GUICtrlCreateCheckbox('Check ' & $i+1, 15, $y, 80, 20)
    $y += 30
    Next
    Else
    Global $Tab = GUICtrlCreateTab(0, 0, 600, 330)
    $y += 10
    For $i = 0 To UBound($arTab) -1
    $arTab[$i] = GUICtrlCreateTabItem('Tab ' & $i+1)
    For $j = 0 To $iMaxCtrl-1
    If $iCurrent = UBound($arCtrl) Then ExitLoop
    $arCtrl[$iCurrent] = GUICtrlCreateCheckbox('Check ' & $iCurrent+1, 15, $y, 80, 20)
    $iCurrent += 1
    $y += 30
    Next
    $y = 25
    Next
    EndIf
    EndFunc

    [/autoit]
  • Hallöchen ich nochmal!

    Ich habe es jetzt soweit das es mir gefällt und es auch funktioniert.

    BugFix : Das mit den Tabs schaue ich mir aber noch an!

    Jetzt habe ich aber noch eine Erweiterung dafür die ich gerne hinzufügen würde!
    Und zwar soll ein Logfile geschrieben werden im welchen dann steht:
    Alles Beispiele:

    Es sollen aber logischer weise nur die dort drin stehen welche auch installiert wurden
    und nicht die unter diese Kategorie zur Auswahlstehen.

    Die Datei erstellen habe ich geschaft mit Rechnernamen und Datum als Namen.
    Ich habe auch geschafft das was reingeschrieben wird nur irgend wie schreibt er auch sachen die nicht ausgewählt wurden
    und auch zahlen was mich etwas verwirrt.

    Und wie ich die Datei dann noch an einen bestimmten Platz schreibe muss ich mir noch ansehen!!

    Vielleicht hat ja jemand nen Tip wie ich das in die Auswahl schleife einbaue.

    Spoiler anzeigen
    [autoit]


    Func _Absenden()
    For $i = 0 To UBound($checkOff)-1
    If BitAND(GUICtrlRead($checkOff[$i]), $GUI_CHECKED) Then ShellExecuteWait($OfficePfad & '\' & $OfficeAufruf[$i+1])
    Next
    For $i = 0 To UBound($checkEnt)-1
    If BitAND(GUICtrlRead($checkEnt[$i]), $GUI_CHECKED) Then ShellExecuteWait($EntwicklerPfad & '\' & $EntwickAufruf[$i+1])
    Next
    For $i = 0 To UBound($checkSon)-1
    If BitAND(GUICtrlRead($checkSon[$i]), $GUI_CHECKED) Then ShellExecuteWait($SonstigePfad & '\' & $SonstigAufruf[$i+1])
    Next
    ;Exit
    EndFunc ;==>_Absenden

    [/autoit]


    Gruß Icerose

    • Offizieller Beitrag

    Vielleicht so:

    Spoiler anzeigen
    [autoit]


    Func _Absenden()
    For $i = 0 To UBound($checkOff)-1
    If BitAND(GUICtrlRead($checkOff[$i]), $GUI_CHECKED) Then
    ShellExecuteWait($OfficePfad & '\' & $OfficeAufruf[$i+1])
    If Not @error Then FileWriteLine(@ScriptDir & '\logfile.txt', $OfficeAufruf[$i+1])
    EndIf
    Next
    For $i = 0 To UBound($checkEnt)-1
    If BitAND(GUICtrlRead($checkEnt[$i]), $GUI_CHECKED) Then
    ShellExecuteWait($EntwicklerPfad & '\' & $EntwickAufruf[$i+1])
    If Not @error Then FileWriteLine(@ScriptDir & '\logfile.txt', $OfficeAufruf[$i+1])
    EndIf
    Next
    For $i = 0 To UBound($checkSon)-1
    If BitAND(GUICtrlRead($checkSon[$i]), $GUI_CHECKED) Then
    ShellExecuteWait($SonstigePfad & '\' & $SonstigAufruf[$i+1])
    If Not @error Then FileWriteLine(@ScriptDir & '\logfile.txt', $OfficeAufruf[$i+1])
    EndIf
    Next
    ;Exit
    EndFunc ;==>_Absenden

    [/autoit]
  • jo danke Oscar das klappt!!!

    Herzlichen Dank

    Gruß Icerose

    PS: mal sehen was mir als nächstes einfällt Ideen sind willkommen

  • Hallo zusammen,

    habe noch ein paar Änderunge die gemacht werden sollten. Ich lese ja die Dateien aus "dem" Ordner ein in welchem die Scripte liegen zur Installation. jetzt ist aber das Problem das unter dem Punkt eine Software steht und ein Plug in (zum Beispiel) nur irgend wie liest er das ein und das Plug in wird versucht als erstes zu installieren was totaler quatsch ist. Habe auch versucht die Dateien alle zu nummerieren was leider auch nicht geht! Habt Ihr vielleicht eine Idee wie ich das bewälltigen kann?

    Gruß Icerose