Checkbox und Array

  • Hallo,

    ich stehe gerade ein wenig auf dem Schlauch oder mache es mir komplizierter als es ist. Ich habe vor einem User verschiedene Möglichkeiten zu geben. Dazu soll er mit einer über eine Gui auswählen können.

    Da dachte ich an Checkboxen. Meinetwegen gibt es 3 Möglichkeiten und er kann entweder und die die er dann wählt werden dann abgearbeitet. Nun habe ich mit Beispielen aus dem Forum was zusammen gestellt, komme aber nicht weiter.

    Das Script liest die Aktionen aus einem Textfile aus und soll dann wenn zum Beispiel FireFox ausgewählt ist, Firefox installieren.


    Zitat

    If $state = 'checked' & $aArray[1] = 'FireFox' Then Run ("notepad.exe")


    Obige Zeile soll wenn die Box ausgewählt ist UND der Inhalt des Arrays einen bestimmten Wert hat, Notepad öffnen ... tut es aber nicht. Was mache ich da falsch ? Oder mache ich mir das Leben viel zu schwer mit einem extra Textfile was ausgelesen wird und Arrays befüllt ?

    Hoffe mir kann man noch folgen und helfen ;)

    2 Mal editiert, zuletzt von JB72 (4. April 2008 um 13:31)

  • Jau ... habe es nicht hinbekommen ... löse es nun anders.

    If BitAND(GUICtrlRead($pdvd), $GUI_CHECKED) = $GUI_CHECKED Then MACHE WAS

    Danke für deine Hilfe, hat mich zum umdenken gebracht und nun funkt das :thumbup:

  • hallo,

    komme mit meinem script hier nicht so vorran. nachdem ich für mein erstes checkbox script ähnlich vorgegangen bin, habe mit meinem zweiten hier probleme. ich lese in einem verzeichnis die ordner aus ... sind alle von 1-7 die dort liegen. diese sollen dann in einer gui angezeigt und auswählbar sein wenn sie vorhanden sind. klappt auch soweit. erstelle ich einen ordner 3 und einen 5 sehe ich in der gui Dienstag und Donnerstag als checkbox wählbar. wähle ich nun eins aus und starte, dann bekomme ich eine fehlermeldung ... nur verstehe ich nicht warum. kann mir da jemand helfen ?

    [autoit]

    #include <File.au3>

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

    GUICreate("Test")
    GUISetState()
    GUISetFont(8,600)

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

    $Starten = GuiCtrlCreateButton("Starten", 10, 350, 100, 30)
    $Beenden = GUICtrlCreateButton("Beenden",300,350,100,30)

    $flta = _FileListToArray("C:\test", "*.*")
    If Not IsArray($flta) Then Exit MsgBox(16, "", "Keine Backups gefunden.. EXIT!")

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

    For $i = 1 To $flta[0]

    if $flta[$i] = 1 then $day1 = GUICtrlCreateCheckbox("Sonntag",10,18 * $i)
    if $flta[$i] = 2 then $day2 = GUICtrlCreateCheckbox("Montag",10,18 * $i)
    if $flta[$i] = 3 then $day3 = GUICtrlCreateCheckbox("Dienstag",10,18 * $i)
    if $flta[$i] = 4 then $day4 = GUICtrlCreateCheckbox("Mittwoch",10,18 * $i)
    if $flta[$i] = 5 then $day5 = GUICtrlCreateCheckbox("Donnerstag",10,18 * $i)
    if $flta[$i] = 6 then $day6 = GUICtrlCreateCheckbox("Freitag",10,18 * $i)
    if $flta[$i] = 7 then $day7 = GUICtrlCreateCheckbox("Samstag",10,18 * $i)

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

    Next

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

    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $Starten


    If BitAND(GUICtrlRead($day3), $GUI_CHECKED) = $GUI_CHECKED Then
    MsgBox(4096, "TEST","Dienstag" ,2)
    Sleep(2000)
    EndIf
    If BitAND(GUICtrlRead($day5), $GUI_CHECKED) = $GUI_CHECKED Then
    MsgBox(4096, "TEST", "Donnerstag",2)
    Sleep(2000)
    EndIf

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

    Case $msg = $Beenden
    Exit
    EndSelect
    WEnd
    While 1
    $msg = GUIGetMsg()

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

    Select
    Case $msg = $GUI_EVENT_CLOSE
    MsgBox(0, "", "Installation beendet")
    Exit
    EndSelect
    WEnd

    [/autoit]
  • a) GUIConstants.au3 includen
    b) Variablen vordeklarieren oder mit Array
    c) Nur BitAnd(...)
    NICHT Bitand(...) = $GUI_...

    Spoiler anzeigen
    [autoit]

    #include <File.au3>
    #include <GUIConstants.au3>

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

    GUICreate("Test")
    GUISetState()
    GUISetFont(8,600)

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

    $Starten = GuiCtrlCreateButton("Starten", 10, 350, 100, 30)
    $Beenden = GUICtrlCreateButton("Beenden",300,350,100,30)

    $flta = _FileListToArray("C:\test", "*.*")
    If Not IsArray($flta) Then Exit MsgBox(16, "", "Keine Backups gefunden.. EXIT!")
    Global $day[8]
    For $i = 1 To $flta[0]

    if $flta[$i] = 1 then $day[1] = GUICtrlCreateCheckbox("Sonntag",10,18 * $i)
    if $flta[$i] = 2 then $day[2] = GUICtrlCreateCheckbox("Montag",10,18 * $i)
    if $flta[$i] = 3 then $day[3] = GUICtrlCreateCheckbox("Dienstag",10,18 * $i)
    if $flta[$i] = 4 then $day[4] = GUICtrlCreateCheckbox("Mittwoch",10,18 * $i)
    if $flta[$i] = 5 then $day[5] = GUICtrlCreateCheckbox("Donnerstag",10,18 * $i)
    if $flta[$i] = 6 then $day[6] = GUICtrlCreateCheckbox("Freitag",10,18 * $i)
    if $flta[$i] = 7 then $day[7] = GUICtrlCreateCheckbox("Samstag",10,18 * $i)

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

    Next

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

    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $Starten

    If BitAND(GUICtrlRead($day[3]), $GUI_CHECKED) Then
    MsgBox(4096, "TEST","Dienstag" ,2)
    Sleep(2000)
    EndIf
    If BitAND(GUICtrlRead($day[5]), $GUI_CHECKED) Then
    MsgBox(4096, "TEST", "Donnerstag",2)
    Sleep(2000)
    EndIf

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

    Case $msg = $Beenden
    Exit
    EndSelect
    WEnd
    While 1
    $msg = GUIGetMsg()

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

    Select
    Case $msg = $GUI_EVENT_CLOSE
    MsgBox(0, "", "Installation beendet")
    Exit
    EndSelect
    WEnd

    [/autoit]


    Das Array kann man auch eleganter machen:
    $arrayDays[8][3]
    $arrayDays[ X ][0] = Guictrlcreate
    $arrayDays[ X ][1] = TagesName
    $arrayDays[ X ][2] = Kommando

  • Klasse danke ... immer wieder krass wie schnell einem hier geholfen wird.

    Mit den Arrays übe ich noch ... kannst du mir genauer erklären wie du es gemacht hättest, warum und welchen Vorteil das hat ? Wenns nicht zuviel arbeit macht. Will ja immer was neues dazu lernen.

  • Nun, ich hätte Arrays genommen, weil dann der Code kürzer wird :) und das sieht übersichtlicher aus, finde ich :)
    Das einzige Problem: Man muss sich die Zuordnung ArrayIndex -> Inhalt merken, da es keine Hashtables (assoziative Arrays) gibt

    Spoiler anzeigen
    [autoit]

    #include <File.au3>
    #include <GUIConstants.au3>

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

    $flta = _FileListToArray("C:\test", "*.*")
    If Not IsArray($flta) Then Exit MsgBox(16, "", "Keine Backups gefunden.. EXIT!")

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

    Global $day[8][3]
    ; Tagesnamen
    $day[1][1] = "Sonntag"
    $day[2][1] = "Montag"
    $day[3][1] = "Dienstag"
    $day[4][1] = "Mittwoch"
    $day[5][1] = "Donnerstag"
    $day[6][1] = "Freitag"
    $day[7][1] = "Samstag"

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

    ;Kommandos z.b für Run
    $day[1][2] = "cmd.exe"
    $day[2][2] = "notepad.exe"
    $day[3][2] = "7za.exe -z"
    $day[4][2] = "???"
    $day[5][2] = "df"
    $day[6][2] = "hi"
    $day[7][2] = "dfsdsf"

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

    GUICreate("Test")
    GUISetState()
    GUISetFont(8, 600)

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

    $Starten = GuiCtrlCreateButton("Starten", 10, 350, 100, 30)
    $Beenden = GUICtrlCreateButton("Beenden",300,350,100,30)
    For $i = 1 To $flta[0]
    If $flta[$i] > 0 And $flta[$i] < 10 Then $day[$flta[$i]][0] = GUICtrlCreateCheckbox($day[$flta[$i]][1], 10, 18 * $i)
    Next
    GUISetState()

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

    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $Starten

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

    For $i = 1 To 7
    If BitAND(GUICtrlRead($day[$i][0]), $GUI_CHECKED) Then
    MsgBox(4096, $day[$i][1], $day[$i][2], 2)
    Sleep(2000)
    EndIf
    Next

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

    Case ($msg = $Beenden) Or ($msg = $GUI_EVENT_CLOSE)
    Exit
    EndSelect
    WEnd

    [/autoit]

    Einmal editiert, zuletzt von progandy (8. April 2008 um 18:09)