Checkbox erkennen

  • Hy Leute. Erstmal toll was ihr da auf die Beine gestellt habt. Respekt. AutoIT ist mir um einiges angenehmer als .bat

    Ich steh aber gerade vor einem (für mich) schwierigen Problem.
    Ich möchte gerne das ich gewisse Sachen in einer Checkbox anhacke und diese dann durch das Drücken eines Buttons erkannt bzw ausgeführt wird.
    Ich lese mittlerweile schon seit 3 Tagen in der Hilfe rum aber ich komm nicht so ganz weiter.

    Auf GUICtrlRead bin ich schon gestoßen nur hab ich keinen Plan wie ich diesen Befehl verwenden kann/ muss.

    EIn kurzer Auszug aus meinen "Skript" :D

    [autoit]


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

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

    Opt('MustDeclareVars', 1)
    Opt("GUIOnEventMode", 1)

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

    LTD()
    func LTD()

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

    Local $dlbutton

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

    GUICreate("LTD by Larusso", 300, 300)

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

    GUICtrlCreateCheckbox("OTL", 20, 40, 60)
    GUICtrlCreateCheckbox("TFC", 20, 100, 60)

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

    $dlbutton = GUICtrlCreateButton("Download", 50, 250, 80)
    GUICtrlSetOnEvent($dlbutton, "Download")

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

    GUISetState(@SW_SHOW)
    EndFunc

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

    Func Download()
    Hier steht noch nichts
    endfunc

    [/autoit]

    Wie ihr seht, will ich entweder OTL oder OTH anhacken, danach auf Download klicken und dieser soll dann diese Dateien von selbst downloaden. (InetGet)

    Würde mich über einen Denkanstoß freuen. Mache das erst seit 5 Tagen.

    Mfg, Daniel

  • so kannstes auslesen
    aba wennste entweder checkbox1 oda 2 ausgewählt haben willst dan würd ich das mit 2 radios machen

    Spoiler anzeigen
    [autoit]

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

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

    Opt("GUIOnEventMode", 1)

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

    GUICreate("LTD by Larusso", 300, 300)

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

    $checkbox1 = GUICtrlCreateCheckbox("OTL", 20, 40, 60)
    $checkbox2 = GUICtrlCreateCheckbox("TFC", 20, 100, 60)

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

    $dlbutton = GUICtrlCreateButton("Download", 50, 250, 80)
    GUICtrlSetOnEvent($dlbutton, "Download")

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

    GUISetState(@SW_SHOW)
    While 1
    WEnd

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

    Func Download()
    If GUICtrlRead($checkbox1) = $GUI_CHECKED Then
    MsgBox(0, "", "Checkbox1 is checked")
    Endif
    If GUICtrlRead($checkbox2) = $GUI_CHECKED Then
    MsgBox(0, "", "Checkbox2 is checked")
    Endif
    ;Hier steht noch nichts
    endfunc

    [/autoit]
  • Besser so ;).

    Spoiler anzeigen
    [autoit]

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

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

    Opt("GUIOnEventMode", 1)

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

    GUICreate("LTD by Larusso", 300, 300)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
    $checkbox1 = GUICtrlCreateCheckbox("OTL", 20, 40, 60)
    $checkbox2 = GUICtrlCreateCheckbox("TFC", 20, 100, 60)
    $dlbutton = GUICtrlCreateButton("Download", 50, 250, 80)
    GUICtrlSetOnEvent($dlbutton, "Download")
    GUISetState(@SW_SHOW)

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

    While Sleep(100)
    WEnd

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

    Func Download()
    If BitAND(GUICtrlRead($checkbox1), $GUI_CHECKED) = $GUI_CHECKED Then MsgBox(0,"","Checkbox 1 checked")
    If BitAND(GUICtrlRead($checkbox2), $GUI_CHECKED) = $GUI_CHECKED Then MsgBox(0,"","Checkbox 2 checked")
    ;Hier steht noch nichts
    EndFunc ;==>Download

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

    Func _Exit()
    Exit
    EndFunc

    [/autoit]


    Besonders die Endlosschleife ohne Sleep gefiel mir nicht :D.

  • Na da war ich mit meinen ersten Versuchen ja nicht so weit daneben. Nur die Variable an die falsche Stelle gesetzt.

    Danke Dir. :thumbup:

  • Ich wollte das jetzt nochmal genau geklärt haben.
    Reicht es nicht aus wenn man Checkboxen und Radios so liesst?

    [autoit]

    If BitAnd(GUICtrlRead($hRadio),$GUI_CHECKED) Then

    [/autoit]


    oder muss man unbedingt so schreiben

    [autoit]

    If BitAnd(GUICtrlRead($hRadio),$GUI_CHECKED) = $GUI_CHECKED Then

    [/autoit]


    Funktioniert ja beides.

  • Das funktioniert nur weil BitAND den Wert von $GUI_CHECKED zurückgibt, und da dieser Wert ungleich 0 ist, wird Die Bedingung als wahr angesehen ;).
    Das Problem ist, wenn man es so macht:

    [autoit]

    If BitAnd(GUICtrlRead($hRadio),$GUI_CHECKED) Then

    [/autoit]


    kommt bei $GUI_UNCHECKED, also so:

    [autoit]

    If BitAnd(GUICtrlRead($hRadio),$GUI_UNCHECKED) Then

    [/autoit]


    auch ein Wert ungleich 0 heraus und die Bedingung wird auch als wahr angesehen.

    • Offizieller Beitrag

    Für eine einfache If-Abfrage reicht:

    [autoit]

    If BitAnd(GUICtrlRead($hRadio), $GUI_CHECKED) Then ...

    [/autoit]


    aus. Wenn Du aber in einer Variable wirklich nur einen Booleanwert haben willst (damit IsBool() funktioniert), dann musst Du

    [autoit]

    $bool = BitAnd(GUICtrlRead($hRadio), $GUI_CHECKED) = $GUI_CHECKED

    [/autoit]


    nehmen.

  • Ah ok, danke ihr beiden. Dann mach ich es vorher so weiter, außer ich prüfe mal auf unchecked, aber das kommt eher selten vor.

  • @ Name22, kannst Du mir die BitAnd Funktion einmal erklären?
    Ich hab die Hilfe schon gelesen verstehs aber nicht so ganz.

    PS: die "im Leerlauf bummeln" Schleife hatte ich schon dabei.

    Aber ne andere Frage.

    Opt("GUIOnEventMode", 1)
    ist dafür dass die Buttons funktionieren. Hierbei wird aber GuiGetMsg vollkommen ignoriert. Kwasi der Button "Close" funktioniert, das rote X zum Schließen nicht.

    Wenn ich Opt("GUIOnEventMode", 0) mache, geht GUiGetMsg, dafür aber die Buttons nicht.

    Ist das original so oder muss ich mir da einen Weg finden?

  • Ließ dir mal die Hilfe zum OnEventMode durch ;).
    Da verwendest du kein GUIGetMsg... Da brauchst du GUISetOnEvent und GUICtrlSetOnEvent.

    Zitat

    @ Name22, kannst Du mir die BitAnd Funktion einmal erklären?


    Schau dir dazu am besten BugFix Bit Tutorial in seiner Signatur an. Hast du dich mal mit logischen Operatoren beschäftigt?

  • Hy, danke für den Tipp :)

    Hab ich schon gelesen, muss ich mir aber nochmal in den Kopf gehen lassen. Ist doch etwas neu für mich.

    Logische Operatoren ?