Func zum auslesen von CHECK / UNCHECK

  • Ich habe mal versucht, eine Func fürs abfragen von Check / uncheck zu erstelln
    Allerdings möchte irgendwas dort nicht so gaaaaaanz klappen...

    er meldet mir nähmlich beide MSGBoxen, woran liegt das ?

    Spoiler anzeigen
    [autoit]

    index.php?page=Thread&postID=154095

    [/autoit]

    Einmal editiert, zuletzt von bernd670 (30. Dezember 2010 um 14:03)

  • [autoit]

    #include <GUIConstantsEx.au3>
    $hGUI = GUICreate("")
    $cCheck = GUICtrlCreateCheckbox("",20,20,200,20)
    GUISetState()

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case -3
    Exit
    Case $cCheck
    _CheckCheck($cCheck, 'MsgBox(0, "Check", "Item ist gecheckt")', 'MsgBox(0, "Uncheck", "Item ist nicht gecheckt")')
    EndSwitch
    WEnd

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

    Func _CheckCheck($CheckItem, $CheckedDo, $UncheckedDo)
    If BitAND(GUICtrlRead($CheckItem), $GUI_CHECKED) Then
    Execute($CheckedDo)
    ElseIf BitAND(GUICtrlRead($CheckItem), $GUI_UNCHECKED) Then
    Execute($UncheckedDo)
    EndIf
    EndFunc ;==>_CheckCheck

    [/autoit]
  • Ändert sich leider nichts ;(
    SEuBo, das funktioniert...
    aber wenn man befehle hat sollte man diese auch ohne 'schreiben können...

  • Dann solltest du nicht mit Execute arbeiten. Weißt du warum beide MsgBoxen kamen? Weil du beide als MsgBoxen beim Funktionsaufruf ausgeführt hast.

    Wär doch totaler Schwachsinn, wenn Funktionen, die man beim Funktionsaufruf übergibt, nicht ausgeführt werden würden.

    Spoiler anzeigen
    [autoit]

    $sText = "AABBAABBABAB"
    _Funktion(StringReplace($sText,"B","A"))

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

    Func _Funktion($Parameter)
    MsgBox(0,"",$Parameter)
    EndFunc

    [/autoit]

    Wäre doch sinnlos, wenn man als Ergebnis jetzt 'StringReplace($sText,"B","A")' bekommen würde, oder?


    Und jetzt nochmal dein Script von eben, damit du auch den Fehler erkennst:

    Spoiler anzeigen
    [autoit]

    Case $Checkbox1
    _CheckCheck($Checkbox1, $CheckedDo1 = MsgBox(0, "Check", "Item ist gecheckt"), $UncheckedDo2 = MsgBox(0, "Uncheck", "Item ist nicht gecheckt"))
    Func _CheckCheck($CheckItem, $CheckedDo, $UncheckedDo)
    If BitAND (GUICtrlRead($CheckItem), $GUI_CHECKED) Then
    Execute($CheckedDo)
    ElseIf BitAND (GUICtrlRead($CheckItem), $GUI_UNCHECKED) Then
    Execute($UncheckedDo)
    EndIf
    EndFunc

    [/autoit]
    [autoit]

    _CheckCheck($Checkbox1, $CheckedDo1 = MsgBox(0, "Check", "Item ist gecheckt"), $UncheckedDo2 = MsgBox(0, "Uncheck", "Item ist nicht gecheckt"))

    [/autoit]


    Übergeben wird nun (da die MsgBoxen ausgeführt werden)

    [autoit]

    _CheckCheck($CheckBox1, $CheckedDo1 = 1,$UncheckedDo2 = 1) ; 1 ist der Rückgabewert der MsgBox

    [/autoit]


    und daraus wird

    [autoit]

    _CheckCheck($CheckBox1, False, False)

    [/autoit]

    Heißt: Deine Funktion macht dann folgendes:

    [autoit]

    If BitAND (GUICtrlRead($Checkbox1), $GUI_CHECKED) Then
    Execute(False)
    ElseIf BitAND (GUICtrlRead($Checkbox1), $GUI_UNCHECKED) Then
    Execute(False)
    EndIf

    [/autoit]


    Du musst dich also entscheiden: Entweder Execute, Call oder direkt ein ganz neues Konzept.

  • O_O

    hm, ich muss nachdenken :D


    Wie könnte ich es sonst machen, dass er die Variable "tut" ?

    Einmal editiert, zuletzt von SysChance (17. April 2010 um 13:32)

  • Zu deinem ersten Post: Meinst du sowas?

    [autoit]

    If BitAnd(GUICtrlRead($hCheck),$GUI_CHECKED) Then
    MsgBox(0, "Test", "checked")
    Else
    MsgBox(0, "Test", "unchecked")
    EndIf

    [/autoit]