Die Checkbox Teil II

  • So da ich gehört habe das man für eine neue Frage ein neues Thema erstellt mach ich das mal brav:

    Also ich wollte fragen wie das denn aussieht wenn man etwa eine MsgBox geöffnet haben will wenn man Zwei Checkboxen selektiert hat und dann auf OK gedruckt hat also hier die Standard auführung der Checkboxen:

    [autoit]

    #include <GUIConstants.au3>
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 242, 134, 193, 125)
    $Checkbox1 = GUICtrlCreateCheckbox("Checkbox1", 32, 16, 145, 33)
    $Checkbox2 = GUICtrlCreateCheckbox("Checkbox2", 32, 40, 145, 33)
    $Checkbox3 = GUICtrlCreateCheckbox("Checkbox3", 32, 64, 145, 33)
    $OK = GUICtrlCreateButton("OK", 176, 32, 33, 49, 0)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    EndSwitch
    WEnd

    [/autoit]

    So naja wäre nett wenn mir jemand helfen könnte :rolleyes:

    Vielen dank schonmal im Vorraus

  • Hi,
    also egal welche Checkboxen gecheckt sind, Hauptsache es sind 2?

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>

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

    Global $Checkbox[3], $counter = 0

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

    $Form1 = GUICreate("Form1", 242, 134, 193, 125)
    for $i = 0 to 2
    $Checkbox[$i] = GUICtrlCreateCheckbox("Checkbox" & $i+1, 32, 16+$i*25, 145, 33)
    Next

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

    $OK = GUICtrlCreateButton("OK", 176, 32, 33, 49, 0)
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $OK
    For $i = 0 To UBound($Checkbox) - 1
    If BitAND(GUICtrlRead($Checkbox[$i]), $GUI_CHECKED) Then $counter += 1
    Next
    If $counter = 2 Then MsgBox(0, "", "2 Checkboxen sind selektiert.")
    $counter = 0
    EndSwitch
    WEnd

    [/autoit]
  • Hi Math,
    anno2008 war schneller

    [autoit]


    #include <GUIConstants.au3>

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Formath", 242, 134, 193, 125)
    $Checkbox1 = GUICtrlCreateCheckbox("Checkbox1", 32, 16, 145, 33)
    $Checkbox2 = GUICtrlCreateCheckbox("Checkbox2", 32, 40, 145, 33)
    $Checkbox3 = GUICtrlCreateCheckbox("Checkbox3", 32, 64, 145, 33)
    $OK = GUICtrlCreateButton("OK", 176, 32, 33, 49, 0)

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

    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $OK
    If BitAND(GUICtrlRead($Checkbox1), $GUI_CHECKED) = $GUI_CHECKED And BitAND(GUICtrlRead($Checkbox2), $GUI_CHECKED) = $GUI_CHECKED Then
    MsgBox(64, 'Formath ', 'Checkbox1 und Checkbox2 gedrückt' & @TAB)
    EndIf
    EndSwitch
    WEnd

    [/autoit]


    Viel Erfolg ! :)

  • Hi RR04 :)

    [autoit]

    = $GUI_CHECKED

    [/autoit]

    ist unnötig.

    Wenn man alle 3 Checkboxen checkt bekommt man aber auch True zurück. So gehts also nicht. Ich bin die ganze zeit am Überlegen wie man das geschickt lösen könnte. Ich hab an eine Checksum gedacht, basierend auf 2er Potenzen, aber die kommen auch öfter vor.

    • Offizieller Beitrag

    Ich hab an eine Checksum gedacht, basierend auf 2er Potenzen, aber die kommen auch öfter vor.


    Das geht recht gut - wenn auch nicht unbegrenzt ;)

    Spoiler anzeigen
    [autoit]

    ; Muster Checkbox-Bearbeitung
    ; Ziel: einfache Abfrage, welche CB aktiviert sind

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

    #include <GUIConstants.au3>
    Opt('GUIOnEventMode', 1)
    Opt("MustDeclareVars", 1)
    Global $bCheckAll, $bUnCheckAll, $GUI, $i, $str
    Global $arCB[20][2] ; Array für Handle und Dual-Wert der CB
    For $i = 0 To UBound($arCB) -1
    $arCB[$i][1] = 2^$i ; Zuweisung eindeutiger Wert
    Next
    Global $Checked = 0 ; Variable nimmt Status ALLER Checkboxen in einem Wert auf,
    ; Startstatus für alle: UNCHECKED
    Global $w = 500, $h = 20*30+40, $l = (@DesktopWidth-$w)/2, $t = (@DesktopHeight-$h)/2
    Global $top = -10
    $GUI = GUICreate('Test Checkbox', $w, $h, $l, $t)
    GUISetOnEvent($GUI_EVENT_CLOSE, '_Ende')
    For $i = 0 To UBound($arCB) -1
    $top += 30
    $arCB[$i][0] = GUICtrlCreateCheckbox('CheckBox_' & $i+1, 40, $top, 120)
    GUICtrlSetOnEvent(-1, '_ClickCB')
    Next
    $bCheckAll = GUICtrlCreateButton('Alle markieren', 250, 20, 150, 21)
    GUICtrlSetOnEvent(-1, '_CheckAll')
    $bUnCheckAll = GUICtrlCreateButton('Markierung aufheben', 250, 50, 150, 21)
    GUICtrlSetOnEvent(-1, '_UnCheckAll')
    GUISetState()

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

    While 1
    Sleep(100)
    WEnd

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

    Func _Ende()
    Exit
    EndFunc

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

    Func _ClickCB()
    For $i = 0 To UBound($arCB) -1
    If $arCB[$i][0] = @GUI_CtrlId Then
    $Checked = BitXOR($Checked, $arCB[$i][1])
    _ReadCB()
    ExitLoop
    EndIf
    Next
    EndFunc

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

    Func _CheckAll()
    For $i = 0 To UBound($arCB) -1
    If Not BitAND($Checked, $arCB[$i][1]) Then
    GUICtrlSetState($arCB[$i][0], $GUI_CHECKED)
    $Checked = BitXOR($Checked, $arCB[$i][1])
    EndIf
    Next
    _ReadCB()
    EndFunc

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

    Func _UnCheckAll()
    For $i = 0 To UBound($arCB) -1
    If BitAND($Checked, $arCB[$i][1]) Then
    GUICtrlSetState($arCB[$i][0], $GUI_UNCHECKED)
    $Checked = BitXOR($Checked, $arCB[$i][1])
    EndIf
    Next
    _ReadCB()
    EndFunc

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

    Func _ReadCB() ; Fkt. dient nur zur Ausgabe, welche CB markiert sind
    Local $str = 'Markiert: '
    For $i = 0 To UBound($arCB) -1
    If BitAND($Checked, $arCB[$i][1]) Then $str &= $i+1 & ', '
    Next
    WinSetTitle($GUI, '', StringTrimRight($str, 2))
    EndFunc

    [/autoit]