Hilfe bei Statusprüfung von Checkboxen

  • Guten Tag zusammen,

    das Abfragen der Checkboxen auf $GUI_CHECKED bzw. $GUI_UNCHECKED ist ja kein Problem, habe aber momentan ein bisschen schwierigkeiten bei einer funktion welche in abhängigkeit, ob eine checkbox "gecheckt" ist, eine andere deaktiviert, bzw. wieder aktiviert. mein problem hierbei ist, dass das ganze flackert (funktion ist gegeben, aber ist halt unschön). Hier meine funktion, welche in dem main loop läuft (es ist hier ein sleep(100) gesetzt):

    [autoit]


    Func _checkboxBehavior()
    If GUICtrlRead($hVorlage)=$GUI_CHECKED Then
    GUICtrlSetState($hOpenAfterBuilt, $GUI_ENABLE)
    Else
    GUICtrlSetState($hOpenAfterBuilt, $GUI_DISABLE)
    EndIf
    EndFunc

    [/autoit]

    danke schonmal

    Einmal editiert, zuletzt von oliverh (28. April 2009 um 08:06)

    • Offizieller Beitrag

    Das Problem ist nicht die Funktion, sondern der Aufruf der Funktion.
    Da es flackert, vermute ich mal, dass diese in einer Schleife kontinuierlich ausgeführt wird. Das führt dann zum Flackern, weil immer wieder der (auch unveränderte) Status geprüft wird und entsprechend erneut gesetzt wird.
    Du darfst diese Funktion nur ausführen, wenn ein Event bei der Checkbox auftritt.
    Je nach Modus legst du per GUICtrlSetOnEvent() einen Verweis auf deine Funktion oder fragst mit GUIGetMsg() die Checkbox ab.

  • ich benutze den oneventmodus...

    alles klar, ich werde es so mal versuchen! Dank dir!

    EDIT: Hat funktioniert!!! CLOSED

    • Offizieller Beitrag

    Und hier mal ein Beispiel (im OnEvent-Modus):

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    Opt('GUIOnEventMode', 1)
    GUICreate('test', 500, 100)
    GUISetOnEvent($GUI_EVENT_CLOSE, '_End')
    Global $ahCheck[7]
    For $i = 0 To 6
    $ahCheck[$i] = GUICtrlCreateCheckbox($i + 1, 20 + $i * 70, 20, 60, 25)
    GUICtrlSetOnEvent(-1, '_Checkbox')
    Next
    GUISetState()

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

    While True
    Sleep(10)
    WEnd

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

    Func _End()
    Exit
    EndFunc

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

    Func _Checkbox()
    If BitAND(GUICtrlRead($ahCheck[0]), $GUI_CHECKED) Then
    For $i = 1 To 6
    GUICtrlSetState($ahCheck[$i], $GUI_DISABLE)
    Next
    Else
    For $i = 1 To 6
    GUICtrlSetState($ahCheck[$i], $GUI_ENABLE)
    Next
    EndIf
    EndFunc

    [/autoit]

    Edit: Ohjee, bin ich heute wieder langsam... :rolleyes:

  • das wusste ich noch nicht ;)

    aber gut zu wissen, man lernt nie aus! werde das korrigieren...