Nachrichten ausgeben

  • Hey Leute,
    Ich habe eine GUI mit 5 Inputfeldern und 5 Comboboxen. Je eine der Comboboxen is für 1 Inputfeld "zuständig". Das heißt, wenn eine Combobox gecheckt wird, dass dann das Inputfeld Enabled und Disabled wird. Nun kann man in die Inputfelder Nachrichten reinschreiben, welche dann ausgegeben werden, wenn man auf den Start Button klickt. Diese nachrichten sollen jedoch zufällig ausgegeben werden. Das heißt das eine von den 5 (oder auch wenigern) ausgewählt wird. Das is klar das kann ich mit Random machen. Also das ganze sieht z.B. so aus:

    Inputfelder

    Hi (Disabled) Checkbox 4
    Hey (Enabled) Checkbox 1
    Hallo (Disabled) Checkbox 4
    Huhu (Disabled) Checkbox 4
    Sers (Enabled) Checkbox 1

    Also hier müsste jetzt entweder Hey oder Sers ausgegeben werden.
    Nun wie kann ich das nun machen, dass das Ganze immer funktioniert, ohne dass ich jede einzelne Möglichkeit in mein Scipt schreib?

    Hier is das Script:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>

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

    GUICreate ("Hallo",450,300,-1,-1)
    GUISetBkColor (0xDF6E12)
    GUISetState ()
    $input1 = GUICtrlCreateInput ("Hi",20,40,200)
    $input2 = GUICtrlCreateInput ("Hey",20,90,200)
    $input3 = GUICtrlCreateInput ("Hallo",20,140,200)
    $input4 = GUICtrlCreateInput ("Huhu",20,190,200)
    $input5 = GUICtrlCreateInput ("Sers",20,240,200)
    Global $pn[6]
    $pn[1] = GUICtrlCreateCheckbox ("Nachricht 1 aktivieren",300,40,-1,-1)
    $pn[2] = GUICtrlCreateCheckbox ("Nachricht 2 aktivieren",300,90,-1,-1)
    $pn[3] = GUICtrlCreateCheckbox ("Nachricht 3 aktivieren",300,140,-1,-1)
    $pn[4] = GUICtrlCreateCheckbox ("Nachricht 4 aktivieren",300,190,-1,-1)
    $pn[5] = GUICtrlCreateCheckbox ("Nachricht 5 aktivieren",300,240,-1,-1)
    $button = GUICtrlCreateButton ("Start",150,270,100,30)

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

    GUICtrlSetState ($input1,$GUI_DISABLE)
    GUICtrlSetState ($input2,$GUI_DISABLE)
    GUICtrlSetState ($input3,$GUI_DISABLE)
    GUICtrlSetState ($input4,$GUI_DISABLE)
    GUICtrlSetState ($input5,$GUI_DISABLE)

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

    While 1
    $msg = GUIGetMsg ()
    Select
    Case $msg = $pn[1]
    If GUICtrlRead ($pn[1]) = 4 Then
    GUICtrlSetState ($input1,$GUI_DISABLE)
    ElseIf GUICtrlRead ($pn[1]) = 1 Then
    GUICtrlSetState ($input1,$GUI_ENABLE)
    EndIf
    Case $msg = $pn[2]
    If GUICtrlRead ($pn[2]) = 4 Then
    GUICtrlSetState ($input2,$GUI_DISABLE)
    ElseIf GUICtrlRead ($pn[2]) = 1 Then
    GUICtrlSetState ($input2,$GUI_ENABLE)
    EndIf
    Case $msg = $pn[3]
    If GUICtrlRead ($pn[3]) = 4 Then
    GUICtrlSetState ($input3,$GUI_DISABLE)
    ElseIf GUICtrlRead ($pn[3]) = 1 Then
    GUICtrlSetState ($input3,$GUI_ENABLE)
    EndIf
    Case $msg = $pn[4]
    If GUICtrlRead ($pn[4]) = 4 Then
    GUICtrlSetState ($input4,$GUI_DISABLE)
    ElseIf GUICtrlRead ($pn[4]) = 1 Then
    GUICtrlSetState ($input4,$GUI_ENABLE)
    EndIf
    Case $msg = $pn[5]
    If GUICtrlRead ($pn[5]) = 4 Then
    GUICtrlSetState ($input5,$GUI_DISABLE)
    ElseIf GUICtrlRead ($pn[5]) = 1 Then
    GUICtrlSetState ($input5,$GUI_ENABLE)
    EndIf
    Case $msg = $button
    For $i = 1 to 5
    If GUICtrlRead ($pn[$i]) = 1 Then
    Call ("Sender")
    EndIf
    Next
    Exit
    Case $msg = $GUI_EVENT_CLOSE
    Exit
    EndSelect
    WEnd

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

    Func Sender ()
    ;Send ?!?!?!?!?!?
    EndFunc

    [/autoit]
  • Ich habe da mal etwas an deinem Skript angepasst, es ist eigentlich einfach. Ich habe ein Array erzeugt und lasse da nur die Texte reinschreiben, bei denen die Checkbox aktiv ist. Ich habe alle Änderungen beschriftet.

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include <array.au3> ; <-- Benötigt für Array Arbeiten

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

    Local $ausgabe[1] ; <-- Ein Array mit einem Eintrag, Index 0, ich zähle gerne ab 1 :)

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

    GUICreate ("Hallo",450,300,-1,-1)
    GUISetBkColor (0xDF6E12)
    GUISetState ()
    $input1 = GUICtrlCreateInput ("Hi",20,40,200)
    $input2 = GUICtrlCreateInput ("Hey",20,90,200)
    $input3 = GUICtrlCreateInput ("Hallo",20,140,200)
    $input4 = GUICtrlCreateInput ("Huhu",20,190,200)
    $input5 = GUICtrlCreateInput ("Sers",20,240,200)
    Global $pn[6]
    $pn[1] = GUICtrlCreateCheckbox ("Nachricht 1 aktivieren",300,40,-1,-1)
    $pn[2] = GUICtrlCreateCheckbox ("Nachricht 2 aktivieren",300,90,-1,-1)
    $pn[3] = GUICtrlCreateCheckbox ("Nachricht 3 aktivieren",300,140,-1,-1)
    $pn[4] = GUICtrlCreateCheckbox ("Nachricht 4 aktivieren",300,190,-1,-1)
    $pn[5] = GUICtrlCreateCheckbox ("Nachricht 5 aktivieren",300,240,-1,-1)
    $button = GUICtrlCreateButton ("Start",150,270,100,30)

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

    GUICtrlSetState ($input1,$GUI_DISABLE)
    GUICtrlSetState ($input2,$GUI_DISABLE)
    GUICtrlSetState ($input3,$GUI_DISABLE)
    GUICtrlSetState ($input4,$GUI_DISABLE)
    GUICtrlSetState ($input5,$GUI_DISABLE)

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

    While 1
    $msg = GUIGetMsg ()
    Select
    Case $msg = $pn[1]
    If GUICtrlRead ($pn[1]) = 4 Then
    GUICtrlSetState ($input1,$GUI_DISABLE)
    ElseIf GUICtrlRead ($pn[1]) = 1 Then
    GUICtrlSetState ($input1,$GUI_ENABLE)
    EndIf
    Case $msg = $pn[2]
    If GUICtrlRead ($pn[2]) = 4 Then
    GUICtrlSetState ($input2,$GUI_DISABLE)
    ElseIf GUICtrlRead ($pn[2]) = 1 Then
    GUICtrlSetState ($input2,$GUI_ENABLE)
    EndIf
    Case $msg = $pn[3]
    If GUICtrlRead ($pn[3]) = 4 Then
    GUICtrlSetState ($input3,$GUI_DISABLE)
    ElseIf GUICtrlRead ($pn[3]) = 1 Then
    GUICtrlSetState ($input3,$GUI_ENABLE)
    EndIf
    Case $msg = $pn[4]
    If GUICtrlRead ($pn[4]) = 4 Then
    GUICtrlSetState ($input4,$GUI_DISABLE)
    ElseIf GUICtrlRead ($pn[4]) = 1 Then
    GUICtrlSetState ($input4,$GUI_ENABLE)
    EndIf
    Case $msg = $pn[5]
    If GUICtrlRead ($pn[5]) = 4 Then
    GUICtrlSetState ($input5,$GUI_DISABLE)
    ElseIf GUICtrlRead ($pn[5]) = 1 Then
    GUICtrlSetState ($input5,$GUI_ENABLE)
    EndIf
    Case $msg = $button

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

    For $i = 1 to 5
    If GUICtrlRead ($pn[$i]) = 1 Then
    ; Wenn die Checkbox aktiv ist, wird ein Eintrag im Array hinzugefügt
    _ArrayAdd($ausgabe,GUICtrlRead(eval('input' & $i)))
    EndIf
    Next
    ; Hier kommt die Ausgabe, aber nur wenn mindestens eine Checkbox aktiv ist.
    If UBound($ausgabe) > 1 Then MsgBox(64,'DIE AUSGABE',$ausgabe[Random(1,UBound($ausgabe) - 1,1)])

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

    Exit
    Case $msg = $GUI_EVENT_CLOSE
    Exit
    EndSelect
    WEnd

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

    Mfg
    Jens (McPoldy)

    Twitter: jkroeger

    Denn die Dinge, die wir erst lernen müssen, bevor wir sie tun, lernen wir beim Tun.(Aristoteles)