GUICreate mit Checkbox und Button

  • Hi zusammen,

    Autoit mach jetzt so richtig Spaß, dass ich mir dachte, wäre doch mal eine GUI auch was Tolles.

    Leider habe ich damit noch Probleme.

    Mein erster Versuch scheitert daran, dass es mir nicht möglich ist zwei Checkboxen gegenseitig auszuschliessen und der Ok-Button nur dann aktiv ist, wenn eine Checkbox "gecheckt" ist.
    Weiter zeigt der OK-Button keine Funktion - je nach gewählter Checkbox soll zu Testzwecken eine Messagebox öffnen.

    Wo verstehe ich die GUI falsch.

    Vielen Dank für eure Hilfe.

    leertaste

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>

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

    Opt("GUIOnEventMode",1)

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

    GUICreate("Meine erste GUI",300,200)

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

    $checkCN1 = GUICtrlCreateCheckbox ("CHECKBOX 1", 10, 10, 120, 20)
    $checkCN2 = GUICtrlCreateCheckbox ("CHECKBOX 2", 10, 30, 120, 20)
    ;~ $checkCN3 = GUICtrlCreateCheckbox ("CHECKBOX 3", 10, 50, 120, 20)

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

    $okbutton = GUICtrlCreateButton ("OK",50,130,70,20)
    GUICtrlSetState(-1,$GUI_FOCUS)
    $cancelbutton = GUICtrlCreateButton ("Cancel",180,130,70,20)

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

    GUISetOnEvent($GUI_EVENT_CLOSE, "_Close");schliessen
    GUICtrlSetOnEvent($cancelbutton,"_Close");abbrechen

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

    GUICtrlSetOnEvent($okbutton,"_Checkbox");abbrechen

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

    GUISetState ()
    While 1
    If $checkCN1 = $GUI_CHECKED Then $checkCN2 = $GUI_DISABLE;Checkboxen schließen sich gegenseitig aus
    If $checkCN2 = $GUI_CHECKED Then $checkCN1 = $GUI_DISABLE
    If $checkCN1 = $GUI_UNCHECKED Then $checkCN2 = $GUI_ENABLE
    If $checkCN2 = $GUI_UNCHECKED Then $checkCN1 = $GUI_ENABLE
    If $checkCN1 = $GUI_UNCHECKED Or $checkCN2 = $GUI_UNCHECKED Then $okbutton = $GUI_DISABLE;Ok Button ist nur dann aktiv wenn eine Checkbox gecheckt
    Sleep(100)
    WEnd

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

    Func _Close()
    GUIDelete()
    Exit
    EndFunc

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

    Func _Checkbox();
    Select
    Case $checkCN1 = $GUI_CHECKED
    MsgBox(0, "Checkbox 1", "ausgewählt")
    Case $checkCN2 = $GUI_CHECKED
    MsgBox(0, "Checkbox 2", "ausgewählt")
    EndSelect
    EndFunc

    [/autoit]
  • Hi,

    so geht's ... :D

    Spoiler anzeigen
    [autoit]

    #include <GuiConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    Opt("GUIOnEventMode",1)

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

    GUICreate("Meine erste GUI",300,200)

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

    $checkCN1 = GUICtrlCreateCheckbox ("CHECKBOX 1", 10, 10, 120, 20)
    $checkCN2 = GUICtrlCreateCheckbox ("CHECKBOX 2", 10, 30, 120, 20)
    ;~ $checkCN3 = GUICtrlCreateCheckbox ("CHECKBOX 3", 10, 50, 120, 20)

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

    $okbutton = GUICtrlCreateButton ("OK",50,130,70,20)
    GUICtrlSetState(-1,$GUI_FOCUS)
    $cancelbutton = GUICtrlCreateButton ("Cancel",180,130,70,20)

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

    GUISetOnEvent($GUI_EVENT_CLOSE, "_Close");schliessen
    GUICtrlSetOnEvent($cancelbutton,"_Close");abbrechen

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

    GUICtrlSetOnEvent($okbutton,"_Checkbox");abbrechen

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

    GUISetState ()

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

    While 1

    $dataCN1 = GUICtrlRead($checkCN1)
    $dataCN2 = GUICtrlRead($checkCN2)

    If $dataCN1 = $GUI_CHECKED Then
    ;Checkboxen schließen sich gegenseitig aus
    GUICtrlSetState($checkCN1, $GUI_DISABLE)
    EndIf
    If $dataCN2 = $GUI_CHECKED Then
    GUICtrlSetState($checkCN1, $GUI_DISABLE)
    EndIf
    If $dataCN1 = $GUI_UNCHECKED Then
    GUICtrlSetState($checkCN2, $GUI_ENABLE)
    EndIf
    If $dataCN2 = $GUI_UNCHECKED Then
    GUICtrlSetState($checkCN1, $GUI_ENABLE)
    EndIf
    If $dataCN1 = $GUI_UNCHECKED And $dataCN2 = $GUI_UNCHECKED Then
    ;Ok Button ist nur dann aktiv wenn eine Checkbox gecheckt
    GUICtrlSetState($okbutton, $GUI_DISABLE)
    EndIf

    Sleep(100)
    WEnd

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

    Func _Close()
    GUIDelete()
    Exit
    EndFunc

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

    Func _Checkbox();
    Select
    Case $checkCN1 = $GUI_CHECKED
    MsgBox(0, "Checkbox 1", "ausgewählt")
    Case $checkCN2 = $GUI_CHECKED
    MsgBox(0, "Checkbox 2", "ausgewählt")
    EndSelect
    EndFunc

    [/autoit]


    Gruß
    Greenhorn


    • Offizieller Beitrag

    Hi,
    ich habs dir mal korrigiert. Du mußt ein Control auslesen, wenn du den Status wissen willst:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    Opt("GUIOnEventMode",1)

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

    GUICreate("Meine erste GUI",300,200)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Close");schliessen
    $checkCN1 = GUICtrlCreateCheckbox ("CHECKBOX 1", 10, 10, 120, 20)
    GUICtrlSetOnEvent(-1, '_CN1clicked')
    $checkCN2 = GUICtrlCreateCheckbox ("CHECKBOX 2", 10, 30, 120, 20)
    GUICtrlSetOnEvent(-1, '_CN2clicked')
    ;~ $checkCN3 = GUICtrlCreateCheckbox ("CHECKBOX 3", 10, 50, 120, 20)

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

    $okbutton = GUICtrlCreateButton ("OK",50,130,70,20)
    GUICtrlSetState(-1,$GUI_FOCUS)
    GUICtrlSetState(-1, $GUI_DISABLE)
    GUICtrlSetOnEvent(-1,"_Checkbox")
    $cancelbutton = GUICtrlCreateButton ("Cancel",180,130,70,20)
    GUICtrlSetOnEvent(-1,"_Close");abbrechen

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

    GUISetState ()
    While 1
    Sleep(100)
    WEnd

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

    Func _Close()
    GUIDelete()
    Exit
    EndFunc

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

    Func _CN1clicked()
    If BitAND(GUICtrlRead($checkCN1), $GUI_CHECKED) Then
    GUICtrlSetState($checkCN2, $GUI_DISABLE)
    GUICtrlSetState($okbutton, $GUI_ENABLE)
    Else
    GUICtrlSetState($checkCN2, $GUI_ENABLE)
    If BitAND(GUICtrlRead($checkCN2), $GUI_UNCHECKED) Then GUICtrlSetState($okbutton, $GUI_DISABLE)
    EndIf
    EndFunc

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

    Func _CN2clicked()
    If BitAND(GUICtrlRead($checkCN2), $GUI_CHECKED) Then
    GUICtrlSetState($checkCN1, $GUI_DISABLE)
    GUICtrlSetState($okbutton, $GUI_ENABLE)
    Else
    GUICtrlSetState($checkCN1, $GUI_ENABLE)
    If BitAND(GUICtrlRead($checkCN1), $GUI_UNCHECKED) Then GUICtrlSetState($okbutton, $GUI_DISABLE)
    EndIf
    EndFunc

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

    Func _Checkbox();
    Select
    Case BitAND(GUICtrlRead($checkCN1), $GUI_CHECKED)
    MsgBox(0, "Checkbox 1", "ausgewählt")
    Case BitAND(GUICtrlRead($checkCN2), $GUI_CHECKED)
    MsgBox(0, "Checkbox 2", "ausgewählt")
    EndSelect
    EndFunc

    [/autoit]

    Greenhorn: In der While-Schleife ständig abzuprüfen ist unsinnig im OnEvent-Mode. Dazu gibts ja die Events ;)

  • Hi,

    zuerst Danke für die Antworten. Einiges ist nun klarer, aber wieso wird hier BitAND verwendet?

    [autoit]

    Func _CN2clicked()
    If BitAND(GUICtrlRead($checkCN2), $GUI_CHECKED) Then
    GUICtrlSetState($checkCN1, $GUI_DISABLE)
    GUICtrlSetState($okbutton, $GUI_ENABLE)

    [/autoit]

    Wieso nicht so?

    [autoit]

    If GUICtrlRead($checkCN2) = $GUI_CHECKED Then
    GUICtrlSetState($checkCN1, $GUI_DISABLE)
    GUICtrlSetState($okbutton, $GUI_ENABLE)

    [/autoit]

    Hab leider keine Erklärung dafür.

    Danke, leertaste