GUICtrlGetState gibt bei Checkboxen falschen Status zurück

  • GUICtrlGetState sollte doch bei einer angehackten, sicht- und auswählbren Checkbox den Status 81 ($GUI_CHECKED=1 + $GUI_SHOW=16 + $GUI_ENABLE=64) zurückgeben, es wird aber 80 zurück gegeben. Ich habe zwar schon einen Workaround:

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <Constants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>

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

    Opt('MustDeclareVars', 1) ;Variablen müssen vor Benutzung deklariert werden

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

    Global $idChkBoxes[6], $Msg, $iStatus
    Global $hGui = GUICreate("Ckeckbox-Demo", 300, 300)

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

    For $i = 0 To 5
    $idChkBoxes[$i] = GUICtrlCreateCheckbox($i + 1 & ". Checkbox", 20, 40 + $i * 30, 250)
    GUICtrlSetState($idChkBoxes[$i], $GUI_CHECKED)
    Next
    GUICtrlSetState($idChkBoxes[Random(0, 2, 1)], $GUI_DISABLE)
    GUICtrlSetState($idChkBoxes[Random(3, 5, 1)], $GUI_HIDE)
    Global $idBtnCheck = GUICtrlCreateButton("Check", 10, 250, 80)

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

    GUISetState(@SW_SHOW)
    While 1
    $Msg = GUIGetMsg()
    Switch $Msg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $idBtnCheck
    #cs ungewolltes Ergebis wenn Checkbox unsichtbar oder disbled
    For $i = 0 To 5
    If BitAND(GUICtrlRead($idChkBoxes[$i]), $GUI_CHECKED) Then
    ConsoleWrite($i + 1 & ". ist angeCHECKED ")
    Else
    ConsoleWrite($i + 1 & ". Checkbox ist NICHT angeCHECKED ")
    EndIf
    ConsoleWrite(GUICtrlRead($idChkBoxes[$i]) & @CRLF)
    Next
    #ce
    For $i = 0 To 5
    $iStatus = GUICtrlGetState($idChkBoxes[$i])
    If BitAND(GUICtrlRead($idChkBoxes[$i]), $GUI_CHECKED) And $iStatus = BitOR($GUI_ENABLE, $GUI_SHOW) Then
    ConsoleWrite($i + 1 & ". Checkbox ist angeCHECKED und auswählbar und sichtbar ")
    Else
    ConsoleWrite($i + 1 & ". Checkbox ist NICHT angeCHECKED oder nicht auswählbar oder nicht sichtbar ")
    EndIf
    ConsoleWrite($iStatus & @TAB & GUICtrlRead($idChkBoxes[$i] )& @CRLF)
    Next
    EndSwitch
    WEnd

    [/autoit]

    trotzdem würde mich interessieren warum dies so ist. Ich benutze noch AutoIt 3.3.6.1

    mfg autoBert

    2 Mal editiert, zuletzt von autoBert (24. November 2012 um 20:50)

  • Laut der Hilfe müsste das aber so passen

    Zitat

    Im Gegensatz zu GUICtrlRead liefert diese Funktion nur den Status eines Controls (aktiviert, deaktiviert, versteckt, sichtbar, drag and drop erlaubt)


    Da steht nichts von checked oder unchecked ;)

  • Da steht nichts von checked oder unchecked ;)


    Unter

    Zitat

    Erfolg: Gibt den Status zurück. Die Werte findet man unter GUICtrlSetState

    und laut der dort vorhandenen Statustabelle:

    ist $GUI_CHECKED im Status enthalten.

    mfg autoBert

  • Hm, denke, dass die Hilfe in diesem Bereich nicht ganz eindeutig ist.
    In der englischen Hilfe stehts ähnlich drin.

    Vielleicht kann jemand anderer noch was dazu sagen

  • Moin,

    Zitat

    As opposed to GUICtrlRead this function returns ONLY the state of a control enabled/disabled/hidden/show/dropaccepted

    Zu Deutsch:

    Zitat

    Im Gegensatz zu GUICtrlRead liefert diese Funktion nur den Status eines Controls (aktiviert, deaktiviert, versteckt, sichtbar, drag and drop erlaubt)

    Also eigentlich klar definiert. Das Beispielskript sollte letzte Zweifel beseitigen. ;)
    Hat evtl. damit zu tun, dass Englisch eine sehr schwammige Sprache ist. Nur in Deutsch kann man alles ganz genau definieren.


    Grüße
    Greenhorn


  • Seltsamerweise kann mn aber mit

    [autoit]

    GUICtrlSetState

    [/autoit]

    $GUI_CHECKED setzen und imeigentlchen Sinn ist dies ja auch ein Teil des Status und auch in der Status-Tabelle aufgeführt. Da ich ja aber schon eine Lösung habe schliesse ich hier.

    mfg autoBert

    • Offizieller Beitrag

    Irgendwie muß man ja den State setzen können, GUICtrlSetData kann ja nur den Text ändern also bleibt nur GUICtrlSetState.
    Ich finde es aber auch bekloppt gemacht, das man $GUI_CHECKED und $GUI_UNCHECKED per GUICtrlRead auslesen muß.

  • Seltsamerweise kann mn aber mit

    [autoit]

    GUICtrlSetState

    [/autoit]

    $GUI_CHECKED setzen und imeigentlchen Sinn ist dies ja auch ein Teil des Status und auch in der Status-Tabelle aufgeführt.


    Da gebe ich Dir Recht. ;)
    Unlogisch und inkonsistent ist es. Aber so ist AutoIt halt in manchen Sachen.

    Grüße
    Greenhorn