GUI mit zwei Radio-Bereichen

  • Hallo zusammen!
    Ich versuche jetzt schon seit längerem einen bestimmten GUI zu erstellen. Die Optik ist kein Problem, nur an dem entscheidenden Detail hakt es:
    Der GUI besteht aus zwei Radio-Bereichen mit mehreren Radios. Zusätzlich gibt es noch zwei Checkboxen.
    Mein Ziel ist es, dass wenn ich auf OK (einem Button) klicke, dass dann je nach Auswahl unterschiedliche Skripte ausgeführt werden.
    Was für eine Struktur bzw. welche Befehle muss ich dafür verwenden?


    Bin um Antworten und Lösungsvorschläge sehr dankbar!
    Liebe Grüße
    BZ

    Edit: Hab noch ein Paar Verbesserungen vorgenommen... Aber da stimmt trotzdem was nicht ;) (Danke bis hierher!)

    Spoiler anzeigen
    [autoit]

    Opt("MustDeclareVars", 1)
    #include <GuiConstantsEx.au3>

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

    Global $Radio, $Test, $Button1, $Msg

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

    ;Dimension der Radios
    Dim $Radio[26]

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

    ; GUI
    $Test = GuiCreate("Test", 400, 450)

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

    ; BUTTON
    $Button1 = GuiCtrlCreateButton("Go", 140, 410, 100, 30)

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

    ;Checkboxen
    GuiCtrlCreateCheckbox("Check1", 95, 380, 80, 20)
    GuiCtrlSetState(-1, $GUI_CHECKED)

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

    GuiCtrlCreateCheckbox("Check2", 225, 380, 80, 20)
    GuiCtrlSetState(-1, $GUI_CHECKED)

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

    ;Gruppe 1
    GUICtrlCreateGroup("Feld 1", 65, 10, 100, 360)
    $Radio[0] = GUICtrlCreateRadio("Opt101", 70, 35, 80, 20)
    $Radio[1] = GUICtrlCreateRadio("Opt102", 70, 60, 80, 20)
    $Radio[2] = GUICtrlCreateRadio("Opt103", 70, 85, 80, 20)
    $Radio[3] = GUICtrlCreateRadio("Opt104", 70, 110, 80, 20)
    $Radio[4] = GUICtrlCreateRadio("Opt105", 70, 135, 80, 20)
    $Radio[5] = GUICtrlCreateRadio("Opt106", 70, 160, 80, 20)
    $Radio[6] = GUICtrlCreateRadio("Opt107", 70, 185, 80, 20)
    $Radio[7] = GUICtrlCreateRadio("Opt108", 70, 210, 80, 20)
    $Radio[8] = GUICtrlCreateRadio("Opt109", 70, 235, 80, 20)
    $Radio[9] = GUICtrlCreateRadio("Opt110", 70, 260, 80, 20)
    $Radio[10] = GUICtrlCreateRadio("Opt111", 70, 285, 80, 20)
    $Radio[11] = GUICtrlCreateRadio("Opt112", 70, 310, 80, 20)
    $Radio[12] = GUICtrlCreateRadio("Opt113", 70, 335, 80, 20)
    GUICtrlCreateGroup("", -99, -99 , 1, 1)
    ;Gruppe 2
    GUICtrlCreateGroup("Feld 2", 235, 10, 100, 360)
    $Radio[13] = GUICtrlCreateRadio("Opt201", 240, 35, 80, 20)
    $Radio[14] = GUICtrlCreateRadio("Opt202", 240, 60, 80, 20)
    $Radio[15] = GUICtrlCreateRadio("Opt203", 240, 85, 80, 20)
    $Radio[16] = GUICtrlCreateRadio("Opt204", 240, 110, 80, 20)
    $Radio[17] = GUICtrlCreateRadio("Opt205", 240, 135, 80, 20)
    $Radio[18] = GUICtrlCreateRadio("Opt206", 240, 160, 80, 20)
    $Radio[19] = GUICtrlCreateRadio("Opt207", 240, 185, 80, 20)
    $Radio[20] = GUICtrlCreateRadio("Opt208", 240, 210, 80, 20)
    $Radio[21] = GUICtrlCreateRadio("Opt209", 240, 235, 80, 20)
    $Radio[22] = GUICtrlCreateRadio("Opt210", 240, 260, 80, 20)
    $Radio[23] = GUICtrlCreateRadio("Opt211", 240, 285, 80, 20)
    $Radio[24] = GUICtrlCreateRadio("Opt212", 240, 310, 80, 20)
    $Radio[25] = GUICtrlCreateRadio("Opt213", 240, 335, 80, 20)
    GUICtrlCreateGroup("", -99, -99 , 1, 1)

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

    While 1
    $Msg = GUIGetMsg()
    Switch $Msg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    If BitAND(GUICtrlRead($Radio[1]), $GUI_CHECKED) Then RunWait ("C:\Users\...\Desktop\Test.exe")
    ; muss ich hier mit "If" jeden Radio überprüfen lassen oder jedesmal noch "Case" davor setzen?
    EndSwitch
    WEnd

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

    2 Mal editiert, zuletzt von Maxore (21. Dezember 2009 um 11:16)

  • Hi,

    weise Deinem Button eine Variable zu:
    ; BUTTON
    $go = GuiCtrlCreateButton("Go", 140, 410, 100, 30)

    In Deinem Switch Case nimmst Du die $Opt Anteile raus und nimmst den $go rein. In diesem Case Zweig überprüfst Du die Radio Buttons und rufst demenstprechend die Funktionen auf.

    ;-))
    Stefan

  • Ich würde es so machen. Die Zauberwörter sind Schleifen und Arrays! Da du ja schon für deine Checkboxen einen Array verwendet hast, denke ich dass du dem Thema nicht so fremd bist.

    Spoiler anzeigen
    [autoit]


    #include <GuiConstantsEx.au3>

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

    Global $Befehle[26] = ['MouseMove(200,300)','MsgBox(0,"","Hallo!")','ConsoleWrite("Ich bins, nummer 2!"@CRLF)', _
    'WinMinimizeAll()','ShellExecute("calc.exe")','_ArrayDisplay($Befehle)', 'ConsoleWrite("Ich bins, nummer 6!"@CRLF)', _
    'MouseMove(500,600)','MsgBox(0,"","Miau!")','ShellExecute("notepad.exe")','MouseMove(900,250)','MsgBox(0,"","Hallööchen!")', _
    'ConsoleWrite("Ich bins, nummer 12!"@CRLF)','WinMinimizeAllUndo()','ShellExecute("paint.exe")','_ArrayDisplay($Checkbox)', _
    'ConsoleWrite("Ich bins, nummer 16!"@CRLF)','MouseMove(500,600)','MsgBox(0,"","Wuff!")','ShellExecute("www.autoit.de")', _
    'MsgBox(0,"","Das war die letzte")','ConsoleWrite("Ich bins, nummer 22!"@CRLF)','MsgBox(0,"","Kräh!")','ShellExecute("calc.exe")', _
    'MsgBox(0,"","Servus!")','ShellExecute("www.autoit.de")']

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

    ;Dimension der Radios
    Dim $Radio[26] ; 26 Zeilen

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

    ; GUI
    $Test = GuiCreate("Test", 400, 450)

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

    ; BUTTON
    $Button1 = GuiCtrlCreateButton("Go", 140, 410, 100, 30)

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

    ;Checkboxen
    GuiCtrlCreateCheckbox("Check1", 95, 380, 80, 20)
    GuiCtrlSetState(-1, $GUI_CHECKED)

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

    GuiCtrlCreateCheckbox("Check2", 225, 380, 80, 20)
    GuiCtrlSetState(-1, $GUI_CHECKED)

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

    ;Gruppe 1
    GUICtrlCreateGroup("Feld 1", 65, 10, 100, 360)
    Global $y = 35
    For $i = 0 to 12
    $Radio[$i] = GUICtrlCreateRadio("Opt10"&$i+1, 70, $y, 80, 20)
    $y += 25
    Next
    GUICtrlCreateGroup("", -99, -99 , 1, 1)
    ;Gruppe 2
    GUICtrlCreateGroup("Feld 2", 235, 10, 100, 360)
    $y = 35
    For $i = 13 to 25
    $Radio[$i] = GUICtrlCreateRadio("Opt20"&$i-12, 240, $y, 80, 20)
    $y += 25
    Next
    GUICtrlCreateGroup("", -99, -99 , 1, 1)
    GUISetState()
    While 1
    $Msg = GUIGetMsg()
    Switch $Msg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    For $i = 0 to 25
    If BitAND(GUICtrlRead($Radio[$i]), $GUI_CHECKED) Then Execute($Befehle[$i])
    Next
    EndSwitch
    WEnd

    [/autoit]

    PS: ConsoleWrite scheint nicht zu funktionieren, aber das sollte ja nicht weiter tragisch sein.

  • Super Vorschlag, SEuBo!
    Nur zwei kleine Problemchen hätt ich dann noch:
    - was wenn ich die zwei checkboxen mit einbeziehen will und
    - es sollen eigentlich nicht zwei Skripte nacheinander, sondern ein skript ausgeführt werden.
    Je nach dem ob nur links, nur rechts oder welche Kombination der beiden angeklickt ist... :whistling:
    Aber mit den Arrays hast Du mir wirklich schonmal sehr viel weitergeholfen, weil so bewandert bin ich da eigentlich nicht ;)
    Liebe Grüße
    BZ