Fehler beim Erinnern

  • Hey Leute,
    ich habe mir mal einen Wecker erstellt. Das ist der Script :

    [autoit]

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Wecker", 212, 127, 192, 124)
    $Button1 = GUICtrlCreateButton("Wecker starten", 16, 72, 177, 49)
    $Input1 = GUICtrlCreateInput("", 16, 8, 177, 21)
    $Input2 = GUICtrlCreateInput("", 16, 40, 177, 21)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    $string = GUICtrlRead($Input1)
    $string = GUICtrlRead($Input2)
    If @Hour > $Input1 And @MIN > $Input2 Then
    MsgBox(64,"Wecker","Sie haben einen Wecker auf diese Uhrzeit gestellt...")
    EndIf
    EndSwitch
    WEnd

    [/autoit]


    Aber dieser funktioniert nicht.
    An dieser Stelle bereits möchte ich mich für evtl. zahlreiche Antworten bedanken :)

  • *Schlauchsteh Ende*
    2 Fehler: Die Überprüfung findet theoretisch nach dem Exit statt, also praktisch gar nicht und die Überprüfung war auch nicht korrekt. So müsste es funktionieren:

    [autoit]

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Wecker", 212, 127, 192, 124)
    $Button1 = GUICtrlCreateButton("Wecker starten", 16, 72)
    $Input1 = GUICtrlCreateInput("", 16, 8, 177, 21)
    $Input2 = GUICtrlCreateInput("", 16, 40, 177, 21)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    $Input1 = GUICtrlRead($Input1)
    $Input2 = GUICtrlRead($Input2)
    If $Input1 = "" Or $Input2 = "" Then
    MsgBox (16,"","Fehlende Angaben")
    ContinueLoop
    EndIf
    While 1
    If @Hour & @MIN = $Input1 & $Input2 Then
    MsgBox(64,"Wecker","Kling Kling")
    Exit
    EndIf
    WEnd
    EndSwitch
    WEnd

    [/autoit]
  • Auch falsch, weil in deinem Script nur dann eine Zeitüberprüfung stattfindet wenn man den Button drückt, was man wohl kaum rund um die Uhr macht damits irgendwann mal klingelt. Ausserdem ist es keine gute Idee die Controlid Variablen ($input1 und $input2) mit den Werten der Controls zu überschreiben, denn dann kann das Script nur einmal zur Laufzeit korrekt areiten. Desweiteren ist die Ermittlung zum Klingelzeitpunkt fehlerhaft, zumindestens dann wenn man kein an/aus flag verwendet.

    Spoiler anzeigen
    [autoit]


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

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

    global $hourTime
    global $minuteTime
    global $activate=False

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Wecker", 212, 127, 192, 124)
    $Button1 = GUICtrlCreateButton("Wecker starten", 16, 72)
    $Input1 = GUICtrlCreateInput("", 16, 8, 177, 21) ; Stunden, Angabe 2 stellig mit führender 0 sofern notwendig
    $Input2 = GUICtrlCreateInput("", 16, 40, 177, 21) ; Minuten, Angabe 2 stellig mit führender 0 sofern notwendig
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    $hourTime = GUICtrlRead($Input1)
    $minuteTime = GUICtrlRead($Input2)
    If $hourTime = "" Or $minuteTime = "" Then ; hier sollten deutlich mehr Fehleingaben abgefragt werden, z.B. Buchstaben, führende 0 usw.
    MsgBox (16,"","Fehlende Angaben")
    ContinueLoop
    EndIf
    msgbox(0,"Info","Wecker wurde auf " & $hourTime & ":" & $minuteTime & " Uhr gestellt.")
    $activate=True
    EndSwitch

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

    If $activate=True then
    if @Hour = $hourTime and @MIN = $minuteTime Then
    $activate=False ; verhindert, dass der Wecker eine komplette Minute lang "klingelt"
    MsgBox(64,"Wecker","Kling Kling")
    EndIf
    endif

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

    WEnd

    [/autoit]

    EDIT: Ich bezog mich im übrigen auf das uneditierte Script von Cheater Dieter, zwischenzeitlich hat er ja noch etwas geändert.