Warum funzt das nicht?

  • Nabend zusamm.
    Ich weis, das is ne noob frage, aber i.wie blick ichs net.

    Warum funzten das hier hier net?

    Spoiler anzeigen
    [autoit]

    #include <GuiConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <Misc.au3>

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

    $dll = DllOpen ("User32.dll")
    GUICreate ("Klickzähler", 200, 180)
    GUISetBkColor (0x00FFFF)
    GUISetState (@SW_SHOW)

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

    GUICtrlCreateLabel ("Teste dein Können!", 10, 10, 300, 30)
    GUICtrlSetFont (-1, 16, 400, 4, "Comic Sans MS")
    GUICtrlCreateLabel ('Drücke "START" um zu starten', 5, 70, 300)
    GUICtrlSetFont (-1, 10, 400, 4, "Comic Sans MS")
    $Button = GUICtrlCreateButton ("START", 60, 120, 80, 40)
    GUICtrlSetFont (-1, 12, 400, "Courier")

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

    While 1
    $msg = GUIGetMsg ()
    Select
    Case $msg = $GUI_EVENT_CLOSE
    Exit
    Case $msg = $Button
    If MsgBox (4, "Bereit", "Bist du bereit?") = 6 Then
    MsgBox (64, "Aufgabe", "Schaffe min. 30 Klicks mit der Linken Maustase, in 5 Sekunden! Fange an, wenn du bereit bist.")
    Beep (500, 300)
    Sleep (1000)
    Beep (500, 300)
    Sleep (1000)
    Beep (500, 300)
    Sleep (1000)
    Beep (500, 600)
    $i = 0
    $beginn = TimerInit ()
    Do
    If _IsPressed ("01", $dll) Then
    $i = $i + 1
    EndIf
    Until $i = 30
    $End = TimerDiff ($beginn)
    MsgBox (64, "Ende", "Du hast " & $End & " Sekunden gebraucht.")
    EndIf
    EndSelect
    WEnd
    DllClose ($dll)

    [/autoit]

    Es soll einfach nur die Zeit zählen, bis man 30 Klicks gemacht hat.
    Soll nur en Ansatz sein, also sozusagen ein test für was anderes...

    Das Problem ist, nach dem ersten klick, ist die Do Until Schleife schon vorbei, wobei die aber bis 30 gehn soll.

  • Ich vermute folgendes:
    In der Zeit wo du "einen" Klick machst, läuft die schleife 30 mal durch. Dadurch ist die Bedingung erfüllt.
    Wenn du dir $i am Ende anzeigen lässt, ist der wert 30.

    So könnte es gehen:
    do
    if mousedown then
    $i = $i +1
    Do
    Until Mouseup
    endif
    until $i = 30

    Leider weiß ich nicht wie man die ereignisse mouseup und mousedown abfragt.

  • Sry, aber damit geht er einfach nur durch die schleife, als wär sie garnet da...

  • Spoiler anzeigen
    [autoit]

    #include <GuiConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <Misc.au3>

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

    Global $i = 0

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

    $dll = DllOpen("user32.dll")
    GUICreate ("Klickzähler", 200, 180)
    GUISetBkColor (0x00FFFF)
    GUISetState (@SW_SHOW)

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

    GUICtrlCreateLabel ("Teste dein Können!", 10, 10, 300, 30)
    GUICtrlSetFont (-1, 16, 400, 4, "Comic Sans MS")
    GUICtrlCreateLabel ('Drücke "START" um zu starten', 5, 70, 300)
    GUICtrlSetFont (-1, 10, 400, 4, "Comic Sans MS")
    $Button = GUICtrlCreateButton ("START", 60, 120, 80, 40)
    GUICtrlSetFont (-1, 12, 400, "Courier")

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

    While 1
    $msg = GUIGetMsg ()
    Select
    Case $msg = $GUI_EVENT_CLOSE
    Exit
    Case $msg = $Button
    If MsgBox (4, "Bereit", "Bist du bereit?") = 6 Then
    MsgBox (64, "Aufgabe", "Schaffe min. 30 Klicks mit der Linken Maustase, in 5 Sekunden! Fange an, wenn du bereit bist.")
    ;~ Beep (500, 300)
    ;~ Sleep (1000)
    ;~ Beep (500, 300)
    ;~ Sleep (1000)
    ;~ Beep (500, 300)
    ;~ Sleep (1000)
    ;~ Beep (500, 600)
    $begin = TimerInit()
    Do
    If _IsPressed ("01", $dll) Then
    While _IsPressed ("01", $dll)
    Sleep ( 1 )
    WEnd
    $i +=1
    EndIf
    Until $i = 30
    $dif = TimerDiff($begin)
    $dif=$dif/1000
    $dif=Round ( $dif, 1 )
    MsgBox (64, "Ende", "Du hast " & $dif & " Sekunden gebraucht.")
    EndIf
    EndSelect
    WEnd
    DllClose ($dll)

    [/autoit]
    • Offizieller Beitrag

    Ein _IsPressed() tuts auch ;)

    [autoit]

    #include <Misc.au3>
    $i = 0
    MsgBox(0, 'Start', '30-mal linke Maus klicken')
    $beginn = TimerInit ()
    Do
    Do
    Sleep(10)
    Until _IsPressed ("01")
    $i += 1
    Until $i = 30
    $End = TimerDiff ($beginn)
    MsgBox(0, 'Zeit', StringFormat('%.2f', $End/1000) & ' s')

    [/autoit]
  • Bei mir hört er damit schon nach 4 Klicks auf?

  • [autoit]

    Do
    If _IsPressed ("01", $dll) Then
    $i = $i +1
    Do
    $tmp = GUIGetMsg()
    Until $tmp = $GUI_EVENT_PRIMARYUP
    EndIf
    Until $i = 30

    [/autoit]

    hab die 30 Klicks nicht von Hand nachgezählt.

    Einmal editiert, zuletzt von Bitboy (24. März 2009 um 22:45)

  • Also, i.wie funzt das alles nich so wirklich.
    Ich wollte ja eigl. dass es in der Do Until schleife, nach jedem Klick, $i um 1 erhöht.
    Wenn $i dann bei 30 ist, soll er aus der schleife raus gehn und mir dir zeit, die ich gebraucht hab, um die 30 klicks zu machen anzeigen.

  • Also, i.wie funzt das alles nich so wirklich.
    Ich wollte ja eigl. dass es in der Do Until schleife, nach jedem Klick, $i um 1 erhöht.
    Wenn $i dann bei 30 ist, soll er aus der schleife raus gehn und mir dir zeit, die ich gebraucht hab, um die 30 klicks zu machen anzeigen.

    Hä? meins Funktioniert doch tadelos? ( Bei mir jedenfalls ^^ )

  • schon probiert? ist doch ne do schleife und ich hab bei mir keinen unterschied bemerkt wie schnell ich klicke

  • ups, ho habs eben erst gesehn ^^
    Jo, so funzt es super.

    Thx für die antworten :thumbup:

    Also das letzte von Bitboy funzt bei mir...