Auswahl mit checkboxen

  • Hallo zusammen,

    versuche gerade eine Gui zu erstellen bei der man durch Checkboxen eine Auswahl an Programmen hat die dann installiert werden sollen.
    Die Gui an sich habe ich und auch die Checkboxen, mein Problem ist gerade der Knoten den ich im Kopf habe. Ich komme nicht drauf wie ich jetzt nachher abfragen kann welche Checkboxen angeklickt sind um dann nach einander die Programme zu installieren.

    Gruß Icerose

    PS: hoffe ich habe mich verständlich ausgedrückt!

    3 Mal editiert, zuletzt von icerose (8. Dezember 2008 um 11:59)

  • Nun gut ich bin noch anfänger und habe wenig verstanden! Ich poste mal den Code den ich bis jetzt habe!!

    Spoiler anzeigen
    [autoit]


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

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

    AutoIt Version: 3.2.12.1
    Author: icerose

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

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

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

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

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

    #include <GUIConstants.au3>
    #include <GUIConstantsEx.au3>

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

    ;GUI erstellen
    GUICreate (" Install Progs", 448, 400, 196, 125) ; start the definition
    GUISetBkColor(0xFFFFFF)

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

    $Label1 = GUICtrlCreateLabel("V.: 1.0", 408, 385, 35, 17)
    $Label2 = GUICtrlCreateLabel("by. icerose", 0, 385, 106, 17)
    $Label3 = GUICtrlCreateLabel("Paketauswahl", 155, 60, 180, 30)
    GUICtrlSetFont(-1, 16, 800, 0, "")

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

    Global $checkCN[8]

    $checkCN[0] = GUICtrlCreateCheckbox ("Prog1", 80, 110, 120, 20)
    $checkCN[1] = GUICtrlCreateCheckbox ("Prog2", 80, 130, 120, 20)
    $checkCN[2] = GUICtrlCreateCheckbox ("Prog3", 80, 150, 120, 20)
    $checkCN[3] = GUICtrlCreateCheckbox ("Prog4", 80, 170, 120, 20)
    $checkCN[4] = GUICtrlCreateCheckbox ("Prog5", 80, 190, 120, 20)
    $checkCN[5] = GUICtrlCreateCheckbox ("Prog6", 80, 210, 120, 20)
    $checkCN[6] = GUICtrlCreateCheckbox ("Prog7", 80, 230, 120, 20)
    $checkCN[7] = GUICtrlCreateCheckbox ("Prog8", 80, 250, 120, 20)

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

    $Button1 = GUICtrlCreateButton("Absenden", 90, 340, 110, 25, 0)
    $Button2 = GUICtrlCreateButton("Beenden", 250, 340, 110, 25, 0)
    $Button3 = GUICtrlCreateButton("alle", 120, 270, 50, 20, 25, 0) ;Button für alle Checkboxen direkt anzuwählen

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

    GUICtrlSetOnEvent($Button3,"_Alles")

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

    GUISetState () ; will display an empty dialog box

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

    Func _Alles()
    For $xyz = 0 to 8 step 1
    GUICtrlSetState ($checkCN[$xyz], $GUI_CHECKED)
    Next
    EndFunc

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

    While 1
    Sleep(1000)
    Wend

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

    So das ist das Stück!! Für jegliche Konstruktive Kritik bin ich offen!!

    Gruß Icerose

    PS: Die dicken klöpse habe ich schon mal entfernt! :D

  • Hier mal ein Beispielskript. Ich hoffe halbwegs verständlich!


    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>

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

    GUICreate("Meine Checkboxen für die Installationsauswahl")

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

    $check1 = GUICtrlCreateCheckbox("Programm 1", 10, 10, 120, 20)
    $check2 = GUICtrlCreateCheckbox("Programm 2", 10, 30, 120, 20)
    $check3 = GUICtrlCreateCheckbox("Programm 3", 10, 50, 120, 20)
    $Button = GUICtrlCreateButton("Installieren", 10, 70)

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

    GUISetState()

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

    While 1
    $msg = GUIGetMsg()

    If $msg = $Button Then
    $Install1= GUICtrlRead($check1)
    $Install2= GUICtrlRead($check2)
    $Install3= GUICtrlRead($check3)

    Prog_1($Install1)
    Prog_2($Install2)
    Prog_3($Install3)
    EndIf

    If $msg = $GUI_EVENT_CLOSE Then ExitLoop
    WEnd

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

    Func Prog_1($On)
    If $On = 1 Then MsgBox(64,"Installation","Programm 1 wurde installiert")
    EndFunc

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

    Func Prog_2($On)
    If $On = 1 Then MsgBox(64,"Installation","Programm 2 wurde installiert")
    EndFunc

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

    Func Prog_3($On)
    If $On = 1 Then MsgBox(64,"Installation","Programm 3 wurde installiert")
    EndFunc

    [/autoit]
    • Offizieller Beitrag

    Ich habe Dein Script mal überarbeitet:

    Spoiler anzeigen
    [autoit]


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

    AutoIt Version: 3.2.12.1
    Author: icerose

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

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

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

    #include <GUIConstants.au3>
    #include <GUIConstantsEx.au3>
    Opt('GUIOnEventMode', 1) ; OnEvent-Mode einschalten

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

    ;GUI erstellen
    GUICreate(" Install Progs", 448, 400, 196, 125) ; start the definition
    GUISetBkColor(0xFFFFFF)

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

    $Label1 = GUICtrlCreateLabel("V.: 1.0", 408, 385, 35, 17)
    $Label2 = GUICtrlCreateLabel("by. icerose", 0, 385, 106, 17)
    $Label3 = GUICtrlCreateLabel("Paketauswahl", 155, 60, 180, 30)
    GUICtrlSetFont(-1, 16, 800, 0, "")

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

    Global $checkCN[8], $ProgNames[8] = ['AutoIt', 'Scite', 'IcoFx', 'Firefox', 'Thunderbird', 'WinAmp', 'Notepad++', 'TrueCrypt']
    For $i = 0 To 7
    $checkCN[$i] = GUICtrlCreateCheckbox($ProgNames[$i], 80, 110 + $i * 20, 120, 20)
    Next

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

    $Button1 = GUICtrlCreateButton("Absenden", 90, 340, 110, 25, 0)
    GUICtrlSetOnEvent(-1, "_Absenden")
    $Button2 = GUICtrlCreateButton("Beenden", 250, 340, 110, 25, 0)
    GUICtrlSetOnEvent(-1, "_Ende")
    $Button3 = GUICtrlCreateButton("alle", 120, 270, 50, 20, 25, 0) ;Button für alle Checkboxen direkt anzuwählen
    GUICtrlSetOnEvent(-1, "_Alles")

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

    GUISetState() ; will display an empty dialog box

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

    While 1
    Sleep(100)
    WEnd

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

    Func _Ende()
    Exit
    EndFunc ;==>_Ende

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

    Func _Alles()
    For $xyz = 0 To 7
    GUICtrlSetState($checkCN[$xyz], $GUI_CHECKED)
    Next
    EndFunc ;==>_Alles

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

    Func _Absenden()
    For $i = 0 To 7
    If BitAND(GUICtrlRead($checkCN[$i]), $GUI_CHECKED) = $GUI_CHECKED Then
    Switch $i
    Case 0
    ; hier die Installation von Programm 1
    Case 1
    ; hier die Installation von Programm 2
    Case 2
    ; hier die Installation von Programm 3
    Case 3
    ; hier die Installation von Programm 4
    Case 4
    ; hier die Installation von Programm 5
    Case 5
    ; hier die Installation von Programm 6
    Case 6
    ; hier die Installation von Programm 7
    Case 7
    ; hier die Installation von Programm 8
    EndSwitch
    EndIf
    Next
    EndFunc ;==>_Absenden

    [/autoit]

    Edit: Jetzt auch mit unterschiedlichen Programm-Namen.

  • Jo Klasse das ist genau das was ich gebraucht habe werde mir die Scripte jetzt mal zugemühte führen und versuchen zu verstehen wo bei mir im Kopf der knoten war.

    Dank an Euch beide

    Gruß Icerose

    EDIT: Oscar

    Wenn du schon so eifrig bist was ich klasse finde! Dann bau doch noch ein paar andere Sachen mit ein!!
    Die Programme die Installiert werden sind natürlich alle Per AutoIT Scripte bzw Exe vorhanden. Diese werden in einen Ordner gesammelt und von dort auch gestartet! jetzt wäre es doch toll das wenn dort ein neues Script hinzu käme dieses direkt in Das Prog mit aufgenommen wird als neue Checkbox und der Nabe auch direkt aus dem Dateinamen gelesen wird!! ....

    Gruß Noch mal

    2 Mal editiert, zuletzt von icerose (29. August 2008 um 11:51)

    • Offizieller Beitrag

    @icerose: Ich will Dir ja nicht Dein ganzes Script schreiben. Das sollte mehr ein Beispiel sein, wie ich an die Sache rangehen würde. ;)
    Man kann das aber auch dynamisch, anhand von Installations-Scripten oder Setup-Programmen machen. Als Stichwort und Hinweis würde ich mal _FileListToArray() nennen. Vielleicht hast Du ja Lust das Script dahingehend auszubauen, dann fang einfach mal an und wenn Du nicht weiterkommst, dann frag einfach nochmal.
    Wenn Du was fertiges haben willst, kannst Du auch IOM nehmen, wie Pee schon geschrieben hat.

  • Danke noch mal für die vielen Beispiele!!!

    Oscar Das war auch eignetlich nen Scherz weil sonst lerne Ich ja nie den Umgang mit AutoIT und deswegen auch kein IOM

    Thx
    Icerose

  • Wie es mit einem Radiobutton geht habe ich in Dein Script mit eingebaut. Nur wenn Du es mal nutzen möchtest.

    Siehe hier:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>

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

    GUICreate("Meine Checkboxen für die Installationsauswahl")

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

    ;$check1 = GUICtrlCreateCheckbox("Programm 1", 10, 10, 120, 20)
    ;!!! ODER SO !!!
    $check1 = GUICtrlCreateRadio("Programm 1", 10, 10, 120, 20)

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

    $check2 = GUICtrlCreateCheckbox("Programm 2", 10, 30, 120, 20)
    $check3 = GUICtrlCreateCheckbox("Programm 3", 10, 50, 120, 20)
    $Button = GUICtrlCreateButton("Installieren", 10, 70)

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

    GUISetState()

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

    While 1
    $msg = GUIGetMsg()

    If $msg = $Button Then
    $Install1= GUICtrlRead($check1)
    $Install2= GUICtrlRead($check2)
    $Install3= GUICtrlRead($check3)

    Prog_1($Install1)
    Prog_2($Install2)
    Prog_3($Install3)
    EndIf

    If $msg = $GUI_EVENT_CLOSE Then ExitLoop
    WEnd

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

    Func Prog_1($On)
    If $On = 1 Then MsgBox(64,"Installation","Programm 1 wurde installiert")
    EndFunc

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

    Func Prog_2($On)
    If $On = 1 Then MsgBox(64,"Installation","Programm 2 wurde installiert")
    EndFunc

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

    Func Prog_3($On)
    If $On = 1 Then MsgBox(64,"Installation","Programm 3 wurde installiert")
    EndFunc

    [/autoit]

    Gruß, Crazy-A.

    Lieben Gruß,
    Alina

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

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • Tach Crazy-A,

    sorry das ich mich erst so Spät melde, aber im Urlaub war es nicht möglich!! Das mit dem Radio-Button wäre auch okay aber den kann man nicht
    wieder wegnehemen wenn man sich verklickt hat!!

    Gruß Icerose

  • Hi ,


    da bin ich wieder!
    Ich habe jetzt die letzte woche an dem script rum gebastelt und das mit dem
    filelisttoarry hat auch geklappt, mein Problem dabei ist jetzt nur das
    ich ja dann auch

    nach der anzahl der gefundenen Dateien die Checkboxen erstellen muss.
    Und das bekomme ich nicht hin. Kannst mir da mal auf die Sprünge helfen!


    Gruß Icerose

    • Offizieller Beitrag

    Hier hast du ein Beispiel wie es automatisiert wird:

    Spoiler anzeigen
    [autoit]

    #include <guiconstants.au3>

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

    Global $arBt[8]
    ; Größe des Array richtet sich nach Anzahl der Elemente
    ; $aFile = _FileListToArray($Path) dann ==> Global $arBt[$aFile[0]]
    Global $y = 15

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

    GUICreate('test')
    For $i = 0 To UBound($arBt) -1
    $arBt[$i] = GUICtrlCreateButton('Button', 10, $y, 60, 20)
    $y += 30
    Next
    GUISetState()

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

    Do
    $msg = GUIGetMsg()
    Until $msg = $GUI_EVENT_CLOSE

    [/autoit]
  • Hallo zusammen,

    ich habe jetzt mal damit rumexperimentiert nur leider bin ich noch nicht so zu dem Erfolg gekommen. Wo bei der Fortschritt schon klasse ist!

    Ich habe jetzt dabei festgestellt das es doch schon mehrere Scripte sind in dem Ordner und bei der Anzahl das ganze etwas aus der Gui bricht. Es wäre also irgend wie schön wenn ich ab x Checkboxen eine zweite Reihe oder nen Tabreiter oder sonstiges machen könnte das die Gui immer die gleiche größe hat. Dann verstehe ich noch nicht ganz wie ich mit dem Schleifen Konstrukt umgehen muss das es klappt. Wenn ich für UBound... ne Zahl eingeben klappt es Prima aber so gar nicht!

    [autoit]

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

    [/autoit]

    Dann bin ich noch am Überlegen wie ich das unten mit den Case so mache das es dann auch variable case von der Anzahl her gibt je nachdem wie viele Dateien halt in dem Ordner liegen!

    Spoiler anzeigen
    [autoit]


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

    AutoIt Version: 3.2.12.1
    Author: icerose

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

    #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]

    $sPath = "\\install1\install\packages\winsetup\AutoIT\Scripte" ;auslesen des Ordners
    $FList = _FileListToArray($sPath) ;Daten kommen in das Array
    If @Error=1 Then
    MsgBox (0,"","No Files\Folders Found.")
    Exit
    EndIf

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

    Global $arBt[$FList[0]]

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

    $newList = _ArrayTrim( $FList, 4, 1,1) ;letzten vier Zeichen werden abgetrennt

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

    Global $y = 15
    Global $checkCN[UBound($arBt)]

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

    GUICreate(" Install Progs", 558, 900, 196, 125)
    For $i = 1 To UBound($arBt) -1
    $arBt[$i] = GUICtrlCreateCheckbox($FList[$i], 10, $y, 120, 20)
    $y += 20
    Next

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

    $Button1 = GUICtrlCreateButton("Absenden", 90, 470, 110, 25, 0)
    GUICtrlSetOnEvent(-1, "_Absenden")
    $Button2 = GUICtrlCreateButton("Beenden", 250, 470, 110, 25, 0)
    GUICtrlSetOnEvent(-1, "_Ende")
    $Button3 = GUICtrlCreateButton("alle", 120, 420, 50, 20, 25, 0) ;Button für alle Checkboxen direkt anzuwählen
    GUICtrlSetOnEvent(-1, "_Alles")
    $Button4 = GUICtrlCreateButton("keine", 190, 420, 50, 20, 25, 0) ;Button für keine Checkboxen direkt anzuwählen
    GUICtrlSetOnEvent(-1, "_Keine")

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

    GUISetState()

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

    While 1
    Sleep(100)
    WEnd

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

    Func _Ende()
    Exit
    EndFunc ;==>_Ende

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

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

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

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

    Func _Absenden()
    For $i = 0 To 7
    If BitAND(GUICtrlRead($checkCN[$i]), $GUI_CHECKED) = $GUI_CHECKED Then
    Switch $i
    Case 0
    MsgBox(64,"Installation","Prog wurde installiert")
    Case 1
    ; hier die Installation von Programm 2
    Case 2
    ; hier die Installation von Programm 3
    Case 3
    ; hier die Installation von Programm 4
    Case 4
    ; hier die Installation von Programm 5
    Case 5
    ; hier die Installation von Programm 6
    Case 6
    ; hier die Installation von Programm 7
    Case 7
    ; hier die Installation von Programm 8
    EndSwitch
    EndIf
    Next
    EndFunc ;==>_Absenden

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

    Ich hoffe mir kann da jemand von Euch auf die Sprünge Helfen!! Aber nur auf die Sprünge!

    Gruß Icerose


    Edit BugFix: Verwende statt [ code ] besser [ autoit ] (habs geändert)

    Einmal editiert, zuletzt von BugFix (8. September 2008 um 11:10)

    • Offizieller Beitrag

    Hab mal den Problemteil korrigiert:

    [autoit]

    ; Global $arBt[$FList[0]] $arBt war ein Bsp. von mir (Bt = Button in Bsp.-GUI) ==> überflüssig die Zeile

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

    $newList = _ArrayTrim( $FList, 4, 1,1) ;letzten vier Zeichen werden abgetrennt

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

    Global $y = 15
    ; Global $checkCN[UBound($arBt)] hier die Größe von FList einsetzen
    Global $checkCN[$FList[0]]

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

    ; und jetzt natürlich mit $checkCN weiterarbeiten
    GUICreate(" Install Progs", 558, 900, 196, 125)
    For $i = 0 To UBound($checkCN) -1 ; Array beginnt bei 0 !!
    ; in $FList ist aber bei 0 der Zähler, erstes Element bei 1, also immer $i +1
    $checkCN[$i] = GUICtrlCreateCheckbox($FList[$i +1], 10, $y, 120, 20)
    $y += 20
    Next

    [/autoit]

    Wegen der Vielzahl von Elementen, mußt du halt festlegen, wieviel Elemente maximal dargestellt werden können. Wird die Anzahl überschritten erstellst du ein Tab und platzierst die restlichen Elemente dort (oder auf weiteren Tabs, je nach Anzahl).

    • Offizieller Beitrag

    Bei einer variablen Auswahl musst Du Dir erstmal Gedanken über die Struktur der Darstellung, der Auswahlmöglichkeiten sowie der späteren Programmaufrufe machen.
    Ich gehe jetzt mal davon aus, dass Du für jedes zu installierende Programm bereits ein Install-Script geschrieben hast und dieses als Exe-Datei im Scriptverzeichnis vorliegt. Dann würde ich bei Deinem Install-Programm am Anfang eine Routine setzen, die die jeweiligen Install-Script-Dateinamen einliest und in einem Array ($aDateinamen) speichert. Dieses Array ist wichtig, um später die Install-Scripte aufrufen zu können. Aus diesen Dateinamen kann man dann (.exe jeweils entfernen) auch schön die Anzeigenamen in der GUI generieren. Beim generieren der GUI muss für jedes Auswahl-GUI-Element wieder ein Array ($aCheckbox) mit der Control-ID angelegt werden, um später bei den Programmaufrufen eine For...Next-Schleife einsetzen zu können. Die Switch...Case-Version ist bei variablen Elementen nicht geeignet.

    Die Programmaufrufe stelle ich mir dann so vor:

    [autoit]


    For $i = 0 To UBound($aDateinamen)-1
    If BitAND($aCheckbox[$i], $GUI_CHECKED) Then ShellExecuteWait(@ScriptDir & '\' & $aDateinamen[$i])
    Next

    [/autoit]

    Bei der GUI hast Du diverse Möglichkeiten:
    - Checkboxen untereinander oder in Reihen nebeneinander
    - Checkboxen auf mehrere TABs verteilen (schwierig bei der Generierung und bei den Programmaufrufen)
    - Listview mit Markierung auswählen (hmmm...nicht so toll)
    - Treeview mit Checkboxen (kann man auch gut gruppieren, würde ich bevorzugen)
    - "Programmgruppen"-Buttons mit kleinem Checkbox-Auswahlfenster für die Programme in der Gruppe

    Am einfachsten umzusetzen ist die erste Variante. Letztlich hängt es aber davon ab, wie viele Programme da integriert werden sollen.

    So, genug angeschubst. ;)

    • Offizieller Beitrag

    Hi!

    Zitat

    - Treeview mit Checkboxen (kann man auch gut gruppieren, würde ich bevorzugen)


    Das ist ein bisschen tricky, weil die Checkboxen nicht 100% echt sind und es keine schönen Events dafür gibt. Aber es geht :D.

    Du kannst dich auch mal bei der IOM (siehe Forum) umschauen, die verwaltet auch Installationen.

    Viel Erfolg,
    peethebee

  • Hi Ihr freundlichen Helfer,

    habe mich noch mal weiter ran gesetzt und wollte hier mal das vorläufige Ergebnis zeigen:

    Spoiler anzeigen
    [autoit]


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

    AutoIt Version: 3.2.12.1
    Author: icerose

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

    #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]

    $Pfad = "Pfad" ;auslesen des Ordners

    [/autoit] [autoit][/autoit] [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] [autoit][/autoit] [autoit][/autoit] [autoit]

    $newList = _ArrayTrim( $FList, 4, 1,1) ;letzten vier Zeichen werden von rechts abgetrennt

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

    Global $y = 60
    Global $x = 60
    Global $checkCN[$FList[0]]
    Global $test = 20
    Global $halb = $FList[0] / 2

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

    GUICreate("Install Progs ", 458, 400, 196, 125)

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

    For $i = 0 To UBound($checkCN) -1
    If $i < $halb Then
    $checkCN[$i] = GUICtrlCreateCheckbox($FList[$i+1], $test, $y, 182, 20)
    $y += 20
    Else
    $test = 250
    $checkCN[$i] = GUICtrlCreateCheckbox($FList[$i+1], $test, $x, 182, 20)
    $x += 20
    EndIf
    Next

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

    $Label1 = GUICtrlCreateLabel("V.: 1.0", 408, 380, 35, 17)
    $Label2 = GUICtrlCreateLabel("by. icerose", 0, 380, 106, 17)
    $Label3 = GUICtrlCreateLabel("Paketauswahl", 140, 20, 180, 30)
    GUICtrlSetFont(-1, 16, 800, 0, "")
    GUISetBkColor(0xFFFFFF)

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

    $Button1 = GUICtrlCreateButton("Absenden", 90, 320, 110, 25, 0)
    GUICtrlSetOnEvent(-1, "_Absenden")
    $Button2 = GUICtrlCreateButton("Beenden", 250, 320, 110, 25, 0)
    GUICtrlSetOnEvent(-1, "_Ende")
    $Button3 = GUICtrlCreateButton("alle", 150, 280, 50, 20, 25, 0) ;Button für alle Checkboxen direkt anzuwählen
    GUICtrlSetOnEvent(-1, "_Alles")
    $Button4 = GUICtrlCreateButton("keine", 250, 280, 50, 20, 25, 0) ;Button für keine Checkboxen direkt anzuwählen
    GUICtrlSetOnEvent(-1, "_Keine")

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

    GUISetState()

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

    While 1
    Sleep(100)
    WEnd

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

    Func _Ende()
    Exit
    EndFunc ;==>_Ende

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

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

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

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

    Func _Absenden()

    For $i = 0 To UBound($checkCN)-1
    If BitAND(GUICtrlRead($checkCN[$i]), $GUI_CHECKED) Then ShellExecuteWait($Pfad & '\' & $Progaufruf[$i+1])
    Next
    ;Exit
    EndFunc ;==>_Absenden

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

    So das wäre er. Ich hoffe auf konstruktive Kritik und vorschläge die zu Verbesserungen führen.

    peethebee

    Ich habe mir das IOM mal angesehn und finde es auch interessant (dauerte zwar bis ich soweit am laufen hatte), aber ich versuche mich ja auch gerade mit der programiererei anzufreunden will nicht dumm sterben. Deswegen der Versuch das selbst zu machen.


    Gruß icerose

    PS: Das was mir jetzt aufgefallen ist ist das das x nicht die anwendung schliesst!