Überschnelles Reagieren auf Eingaben verhindern

  • Hi Leute,
    ich bastele gerade an einer kleinen GUI für ein Programm,
    ich will dort ein Menü bestehend aus doppelt belegbaren Bildern haben.
    Jedoch ist AutoIT in diesem Falle mal ausnahmsweise zu schnell und es klickt von dem Untermenü schon gleich den nächsten Eintrag an.
    Es ist etwas schwierig zu erklären, am Besten probiert ihr es selber mit nur einem Bild aus.
    Wie kann ich es verhindern, dass er kurz wartet bevor er Eingaben wieder erlaubt?
    Mit Sleep habe ich es schon probiert, BlockInput wäre auch noch eine Möglichkeit aber das muss doch auch noch anders gehen.
    Hoffentlich habt ihr eine Idee.
    Mein Script:

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    Global $SleepDelay = 1000
    Global $DLSMode = 0
    Global $Version = '01 Beta'
    Global $Menu = 0
    $ImagePath = @TempDir & "\"
    FileInstall("D:\Extras\Programmieren\AUTOIT\kaesekaestchenbot\player1bot\Ikarus Launcher\Background.jpg",$ImagePath & "Background.jpg")
    FileInstall("D:\Extras\Programmieren\AUTOIT\kaesekaestchenbot\player1bot\Ikarus Launcher\Bilder\Startup.jpg",$ImagePath & "Startup.jpg")
    FileInstall("D:\Extras\Programmieren\AUTOIT\kaesekaestchenbot\player1bot\Ikarus Launcher\Bilder\Startover.jpg",$ImagePath & "Startover.jpg")
    FileInstall("D:\Extras\Programmieren\AUTOIT\kaesekaestchenbot\player1bot\Ikarus Launcher\Bilder\Optionsup.jpg",$ImagePath & "Optionsup.jpg")
    FileInstall("D:\Extras\Programmieren\AUTOIT\kaesekaestchenbot\player1bot\Ikarus Launcher\Bilder\Optionsover.jpg",$ImagePath & "Optionsover.jpg")
    FileInstall("D:\Extras\Programmieren\AUTOIT\kaesekaestchenbot\player1bot\Ikarus Launcher\Bilder\Exitup.jpg",$ImagePath & "Exitup.jpg")
    FileInstall("D:\Extras\Programmieren\AUTOIT\kaesekaestchenbot\player1bot\Ikarus Launcher\Bilder\Exitover.jpg",$ImagePath & "Exitover.jpg")
    FileInstall("D:\Extras\Programmieren\AUTOIT\kaesekaestchenbot\player1bot\Ikarus Launcher\Bilder\untermenus\NormalModeup.jpg",$ImagePath & "NormalModeup.jpg")
    FileInstall("D:\Extras\Programmieren\AUTOIT\kaesekaestchenbot\player1bot\Ikarus Launcher\Bilder\untermenus\NormalModeover.jpg",$ImagePath & "NormalModeover.jpg")
    FileInstall("D:\Extras\Programmieren\AUTOIT\kaesekaestchenbot\player1bot\Ikarus Launcher\Bilder\untermenus\SilentModeup.jpg",$ImagePath & "SilentModeup.jpg")
    FileInstall("D:\Extras\Programmieren\AUTOIT\kaesekaestchenbot\player1bot\Ikarus Launcher\Bilder\untermenus\SilentModeover.jpg",$ImagePath & "SilentModeover.jpg")
    FileInstall("D:\Extras\Programmieren\AUTOIT\kaesekaestchenbot\player1bot\Ikarus Launcher\Bilder\Backover.jpg",$ImagePath & "Backover.jpg")
    FileInstall("D:\Extras\Programmieren\AUTOIT\kaesekaestchenbot\player1bot\Ikarus Launcher\Bilder\Backup.jpg",$ImagePath & "Backup.jpg")
    FileInstall("D:\Extras\Programmieren\AUTOIT\kaesekaestchenbot\player1bot\Ikarus Launcher\Bilder\untermenus\DLSOptionsover.jpg",$ImagePath & "DLSOptionsover.jpg")
    FileInstall("D:\Extras\Programmieren\AUTOIT\kaesekaestchenbot\player1bot\Ikarus Launcher\Bilder\untermenus\DLSOptionsup.jpg",$ImagePath & "DLSOptionsup.jpg")
    FileInstall("D:\Extras\Programmieren\AUTOIT\kaesekaestchenbot\player1bot\Ikarus Launcher\Bilder\untermenus\SleepDelayover.jpg",$ImagePath & "SleepDelayover.jpg")
    FileInstall("D:\Extras\Programmieren\AUTOIT\kaesekaestchenbot\player1bot\Ikarus Launcher\Bilder\untermenus\SleepDelayup.jpg",$ImagePath & "SleepDelayup.jpg")
    $Form1 = GUICreate("Ikarus Launcher", 506, 318, 192, 124)
    $Pic1 = GUICtrlCreatePic($ImagePath & "Background.jpg", -7, 22, 512, 294)
    $Pic2 = GUICtrlCreatePic($ImagePath & "Startup.jpg", 0, 0, 138, 22)
    $Pic3 = GUICtrlCreatePic($ImagePath & "Optionsup.jpg", 139, 0, 138, 22)
    $Pic4 = GUICtrlCreatePic($ImagePath & "Exitup.jpg", 278, 0, 138, 22)
    $Label1 = GUICtrlCreateLabel(" V. "&$Version, 416, 0, 79, 20)
    GUICtrlSetFont(-1, 0, 400, 0, "MS Sans Serif")
    GUISetState(@SW_SHOW)
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $GUI_EVENT_MOUSEMOVE
    _Check_Hover()
    Case $Label1
    MsgBox(0,"Info","Ikarus v. "&$Version& " © 2013 Fliwatt" & @CRLF & "xxxxxxx@gmail.com")
    Case $Pic2
    If $Menu = 0 Then
    GUICtrlSetImage($Pic2,$ImagePath & "NormalModeup.jpg")
    GUICtrlSetImage($Pic3,$ImagePath & "SilentModeup.jpg")
    GUICtrlSetImage($Pic4,$ImagePath & "Backup.jpg")
    $Menu = 1
    sleep(500)
    Endif
    If $Menu = 1 Then
    MsgBox(0,"","")
    Endif
    Case $Pic3
    If $Menu = 0 Then
    GUICtrlSetImage($Pic2,$ImagePath & "DLSOptionsup.jpg")
    GUICtrlSetImage($Pic3,$ImagePath & "SleepDelayup.jpg")
    GUICtrlSetImage($Pic4,$ImagePath & "Backup.jpg")
    $Menu = 2
    sleep(500)
    Endif
    If $Menu = 1 Then
    MsgBox(0,"","")
    Exit
    Endif
    Case $Pic4
    If $Menu = 0 Then Exit
    If $Menu = 1 or $Menu = 2 Then
    GUICtrlSetImage($Pic2,$ImagePath & "Startup.jpg")
    GUICtrlSetImage($Pic3,$ImagePath & "Optionsup.jpg")
    GUICtrlSetImage($Pic4,$ImagePath & "Exitup.jpg")
    $Menu = 0
    sleep(500)
    Endif
    EndSwitch
    WEnd

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

    Func _Check_Hover()
    Static $Hovered = False
    Local $aCursorInfo = GUIGetCursorInfo()
    If $Hovered And $Hovered <> $aCursorInfo[4] Then
    Switch $Hovered
    Case $Pic2
    If $Menu = 0 Then GUICtrlSetImage($Pic2,$ImagePath & "Startup.jpg")
    If $Menu = 1 Then GUICtrlSetImage($Pic2,$ImagePath & "NormalModeup.jpg")
    If $Menu = 2 Then GUICtrlSetImage($Pic2,$ImagePath & "DLSOptionsup.jpg")
    Case $Pic3
    If $Menu = 0 Then GUICtrlSetImage($Pic3,$ImagePath & "Optionsup.jpg")
    If $Menu = 1 Then GUICtrlSetImage($Pic3,$ImagePath & "SilentModeup.jpg")
    If $Menu = 2 Then GUICtrlSetImage($Pic3,$ImagePath & "SleepDelayup.jpg")
    Case $Pic4
    If $Menu = 0 Then GUICtrlSetImage($Pic4,$ImagePath & "Exitup.jpg")
    If $Menu = 1 or $Menu = 2 Then GUICtrlSetImage($Pic4,$ImagePath & "Backup.jpg")
    EndSwitch
    $Hovered = False
    EndIf
    If Not $Hovered Then
    Switch $aCursorInfo[4]
    Case $Pic2
    If $Menu = 0 Then GUICtrlSetImage($Pic2,$ImagePath & "Startover.jpg")
    If $Menu = 1 Then GUICtrlSetImage($Pic2,$ImagePath & "NormalModeover.jpg")
    If $Menu = 2 Then GUICtrlSetImage($Pic2,$ImagePath & "DLSOptionsover.jpg")
    $Hovered = $Pic2
    Case $Pic3
    If $Menu = 0 Then GUICtrlSetImage($Pic3,$ImagePath & "Optionsover.jpg")
    If $Menu = 1 Then GUICtrlSetImage($Pic3,$ImagePath & "SilentModeover.jpg")
    If $Menu = 2 Then GUICtrlSetImage($Pic3,$ImagePath & "SleepDelayover.jpg")
    $Hovered = $Pic3
    Case $Pic4
    If $Menu = 0 Then GUICtrlSetImage($Pic4,$ImagePath & "Exitover.jpg")
    If $Menu = 1 or $Menu = 2 Then GUICtrlSetImage($Pic4,$ImagePath & "Backover.jpg")
    $Hovered = $Pic4
    EndSwitch
    EndIf
    EndFunc

    [/autoit]


    Fliwatt

  • Naja gut. Die Arbeit mach ich mir jetzt nicht passende Bilder rauszusuchen und dann die Pfade zu ändern. Hab ja auch noch was anderes zutun. Kannst ja auch nen Beispielscript machen, wo man das Problem sieht. Mit ein paar Bilder.

  • In Ordnung, jetzt nur mit einem einzigen Bild, einfach in die Variable den Pfad hauen

    Spoiler anzeigen
    [autoit]


    Global $bild =
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    Global $SleepDelay = 1000
    Global $DLSMode = 0
    Global $Version = '01 Beta'
    Global $Menu = 0
    $ImagePath = @TempDir & "\"
    #cs
    FileInstall("D:\Extras\Programmieren\AUTOIT\kaesekaestchenbot\player1bot\Ikarus Launcher\Background.jpg",$ImagePath & "Background.jpg")
    FileInstall("D:\Extras\Programmieren\AUTOIT\kaesekaestchenbot\player1bot\Ikarus Launcher\Bilder\Startup.jpg",$ImagePath & "Startup.jpg")
    FileInstall("D:\Extras\Programmieren\AUTOIT\kaesekaestchenbot\player1bot\Ikarus Launcher\Bilder\Startover.jpg",$ImagePath & "Startover.jpg")
    FileInstall("D:\Extras\Programmieren\AUTOIT\kaesekaestchenbot\player1bot\Ikarus Launcher\Bilder\Optionsup.jpg",$ImagePath & "Optionsup.jpg")
    FileInstall("D:\Extras\Programmieren\AUTOIT\kaesekaestchenbot\player1bot\Ikarus Launcher\Bilder\Optionsover.jpg",$ImagePath & "Optionsover.jpg")
    FileInstall("D:\Extras\Programmieren\AUTOIT\kaesekaestchenbot\player1bot\Ikarus Launcher\Bilder\Exitup.jpg",$ImagePath & "Exitup.jpg")
    FileInstall("D:\Extras\Programmieren\AUTOIT\kaesekaestchenbot\player1bot\Ikarus Launcher\Bilder\Exitover.jpg",$ImagePath & "Exitover.jpg")
    FileInstall("D:\Extras\Programmieren\AUTOIT\kaesekaestchenbot\player1bot\Ikarus Launcher\Bilder\untermenus\NormalModeup.jpg",$ImagePath & "NormalModeup.jpg")
    FileInstall("D:\Extras\Programmieren\AUTOIT\kaesekaestchenbot\player1bot\Ikarus Launcher\Bilder\untermenus\NormalModeover.jpg",$ImagePath & "NormalModeover.jpg")
    FileInstall("D:\Extras\Programmieren\AUTOIT\kaesekaestchenbot\player1bot\Ikarus Launcher\Bilder\untermenus\SilentModeup.jpg",$ImagePath & "SilentModeup.jpg")
    FileInstall("D:\Extras\Programmieren\AUTOIT\kaesekaestchenbot\player1bot\Ikarus Launcher\Bilder\untermenus\SilentModeover.jpg",$ImagePath & "SilentModeover.jpg")
    FileInstall("D:\Extras\Programmieren\AUTOIT\kaesekaestchenbot\player1bot\Ikarus Launcher\Bilder\Backover.jpg",$ImagePath & "Backover.jpg")
    FileInstall("D:\Extras\Programmieren\AUTOIT\kaesekaestchenbot\player1bot\Ikarus Launcher\Bilder\Backup.jpg",$ImagePath & "Backup.jpg")
    FileInstall("D:\Extras\Programmieren\AUTOIT\kaesekaestchenbot\player1bot\Ikarus Launcher\Bilder\untermenus\DLSOptionsover.jpg",$ImagePath & "DLSOptionsover.jpg")
    FileInstall("D:\Extras\Programmieren\AUTOIT\kaesekaestchenbot\player1bot\Ikarus Launcher\Bilder\untermenus\DLSOptionsup.jpg",$ImagePath & "DLSOptionsup.jpg")
    FileInstall("D:\Extras\Programmieren\AUTOIT\kaesekaestchenbot\player1bot\Ikarus Launcher\Bilder\untermenus\SleepDelayover.jpg",$ImagePath & "SleepDelayover.jpg")
    FileInstall("D:\Extras\Programmieren\AUTOIT\kaesekaestchenbot\player1bot\Ikarus Launcher\Bilder\untermenus\SleepDelayup.jpg",$ImagePath & "SleepDelayup.jpg")
    #ce
    $Form1 = GUICreate("Ikarus Launcher", 506, 318, 192, 124)
    $Pic1 = GUICtrlCreatePic($bild, -7, 22, 512, 294)
    $Pic2 = GUICtrlCreatePic($bild, 0, 0, 138, 22)
    $Pic3 = GUICtrlCreatePic($bild, 139, 0, 138, 22)
    $Pic4 = GUICtrlCreatePic($bild, 278, 0, 138, 22)
    $Label1 = GUICtrlCreateLabel(" V. "&$Version, 416, 0, 79, 20)
    GUICtrlSetFont(-1, 0, 400, 0, "MS Sans Serif")
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $GUI_EVENT_MOUSEMOVE
    _Check_Hover()
    Case $Label1
    MsgBox(0,"Info","Ikarus v. "&$Version& " © 2013 Fliwatt" & @CRLF & "fliwatt@gmail.com")
    Case $Pic2
    If $Menu = 0 Then
    GUICtrlSetImage($Pic2,$bild)
    GUICtrlSetImage($Pic3,$bild)
    GUICtrlSetImage($Pic4,$bild)
    $Menu = 1
    sleep(500)
    Endif
    If $Menu = 1 Then
    MsgBox(0,"","")
    Endif
    Case $Pic3
    If $Menu = 0 Then
    GUICtrlSetImage($Pic2,$bild)
    GUICtrlSetImage($Pic3,$bild)
    GUICtrlSetImage($Pic4,$bild")
    $Menu = 2
    sleep(500)
    Endif
    If $Menu = 1 Then
    MsgBox(0,"","")
    Endif
    Case $Pic4
    If $Menu = 0 Then Exit
    If $Menu = 1 or $Menu = 2 Then
    GUICtrlSetImage($Pic2,$bild)
    GUICtrlSetImage($Pic3,$bild)
    GUICtrlSetImage($Pic4,$bild)
    $Menu = 0
    sleep(500)
    Endif
    EndSwitch
    WEnd

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

    Func _Check_Hover()
    Static $Hovered = False
    Local $aCursorInfo = GUIGetCursorInfo()
    If $Hovered And $Hovered <> $aCursorInfo[4] Then
    Switch $Hovered
    Case $Pic2
    If $Menu = 0 Then GUICtrlSetImage($Pic2,$bild)
    If $Menu = 1 Then GUICtrlSetImage($Pic2,$bild)
    If $Menu = 2 Then GUICtrlSetImage($Pic2,$bild)
    Case $Pic3
    If $Menu = 0 Then GUICtrlSetImage($Pic3,$bild)
    If $Menu = 1 Then GUICtrlSetImage($Pic3,$bild)
    If $Menu = 2 Then GUICtrlSetImage($Pic3,$bild)
    Case $Pic4
    If $Menu = 0 Then GUICtrlSetImage($Pic4,$bild)
    If $Menu = 1 or $Menu = 2 Then GUICtrlSetImage($Pic4,$bild)
    EndSwitch
    $Hovered = False
    EndIf
    If Not $Hovered Then
    Switch $aCursorInfo[4]
    Case $Pic2
    If $Menu = 0 Then GUICtrlSetImage($Pic2,$bild)
    If $Menu = 1 Then GUICtrlSetImage($Pic2,$bild)
    If $Menu = 2 Then GUICtrlSetImage($Pic2,$bild)
    $Hovered = $Pic2
    Case $Pic3
    If $Menu = 0 Then GUICtrlSetImage($Pic3,$bild)
    If $Menu = 1 Then GUICtrlSetImage($Pic3,$bild)
    If $Menu = 2 Then GUICtrlSetImage($Pic3,$bild)
    $Hovered = $Pic3
    Case $Pic4
    If $Menu = 0 Then GUICtrlSetImage($Pic4,$bild)
    If $Menu = 1 or $Menu = 2 Then GUICtrlSetImage($Pic4,$bild)
    $Hovered = $Pic4
    EndSwitch
    EndIf
    EndFunc

    [/autoit]
  • Es gibt einmal ein Hauptmenü, von da aus gehts in die Untermenüs, im Moment funktioniert nur das linke Menü.
    Das Problem ist, dass er das Menü auswählt und dann sofort den ersten Eintrag im Menü auswählt.
    $Menu = 0 ist das Hauptmenü, wenn man von da aus auf das linkeste Bild oben klickt kommt man in das Untermenü $Menu = 1
    Fliwatt

  • Nene da wird nix gelöscht :huh:

    Beiträge werden nur bei besonderer Begründung gelöscht.
    Außerdem kann so niemand mehr den Thread nachverfolgen


    @Mods/Admins Bitte wiederherstellen

    Um Missverständnisse zu vermeiden, mein Name rührt vom Sternenbild und nicht vom Shop her :D


    Rainbow Dash :rock:

    "Das, wobei unsere Berechnungen versagen, nennen wir Zufall." (Albert Einstein)

    Einmal editiert, zuletzt von Orion (29. April 2013 um 23:50)