Bei jedem Betätigen der "Enter"-Taste, minus 0,5

  • Ich bräuchte eure Hilfe, da ich leider absolut nicht weiß, wie ich das anstellen soll.

    Folgendes Problem: Jedes Mal wenn die Enter-Taste gedrückt wird, soll aus einer von mir im Script festgelegten Summe 0,5 abgezogen werden. Die Zahl soll sich in einem kleinen GUI-Fenster befinden.
    Mehr eigentlich nicht, sofern sie ins Minus rutscht, wäre es egal, aber nicht wünschenswert.

    Irgendwie mit

    [autoit]

    While 1
    If _IsPressed("0D", $dll) Then

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

    EndIf
    WEnd

    [/autoit]

    Aber ich weiß leider nicht genau, wie ich das zusammenbringen soll.
    Hoffe ihr könnt mir helfen. Danke

  • [autoit]

    HotKeySet('{ENTER}', '_LowerValue')

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

    GUICreate('',220,120)
    $cLabel = GUICtrlCreateLabel('10', 10, 10, 200, 100)
    GUISetState()

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

    While GUIGetMsg() <> -3
    WEnd

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

    Func _LowerValue()
    GUICtrlSetData($cLabel, GUICtrlRead($cLabel) - 0.5)
    EndFunc

    [/autoit]
  • Super, danke. Das entspricht zumindest schonmal genau meinen Vorstellungen. Toll.

    Nur leider erkennt er nun die Eingabe von Enter nicht mehr. Er zählt zwar beim Drücken der Taste hinunter, aber die Taste funktioniert dann nicht mehr, was sie aber sollte.

  • Super, danke. Das entspricht zumindest schonmal genau meinen Vorstellungen. Toll.

    Nur leider erkennt er nun die Eingabe von Enter nicht mehr. Er zählt zwar beim Drücken der Taste hinunter, aber die Taste funktioniert dann nicht mehr, was sie aber sollte.


    Was ist das für eine Fehlerbeschreibung?

    Ab wann funktioniert sie nicht mehr?
    Wie genau "funktioniert" die Taste nicht mehr?

    Mfg

    There's a joke that C has the speed and efficieny of assembly language combined with readability of....assembly language. In other words, it's just a glorified assembly language. - Teh Interwebz

    C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do, you blow off your whole leg. - Bjarne Stroustrup
    Genie zu sein, bedeutet für mich, alles zu tun, was ich will. - Klaus Kinski

  • Das ist eine Fehlerbeschreibung, wie sie auftritt.

    Sobald ich das Programm starte, zählt er zwar nach jedem Drücken der Enter-Taste die 0,5 herunter, von Windows wird die Eingabe der Enter-Taste aber nicht erkannt. Bsp. Wenn ich einen Ordner markieren und Enter drücke passiert nichts. Außer, dass Autoit die 0,5 herunterzählt.

    Ab wann funktioniert sie nicht mehr?
    Ab dem Start des Scripts.

    Wie genau "funktioniert" die Taste nicht mehr?
    Oben erklärt.

  • Er meint, dass das AutoIt-Skript den Tastendruck abfängt, d.h. es wird kein Zeichen für Zeilenumbruch (Unter Windows CRLF) gesendet.
    Abhilfe kann man schaffen, indem man den Hotkey in der Funktion released, die Taste sendet und anschließend den Hotkey wieder registriert.
    Hier mal in dem Skript von SEuBo eingefügt:

    [autoit]


    HotKeySet('{ENTER}', '_LowerValue')

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

    GUICreate('',220,120)
    $cLabel = GUICtrlCreateLabel('10', 10, 10, 200, 100)
    GUISetState()

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

    While GUIGetMsg() <> -3
    WEnd

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

    Func _LowerValue()
    HotKeySet("{ENTER}") ; HotKey release
    Send("{ENTER}") ; HotKey send
    HotKeySet("{ENTER}", "_LowerValue") ; HotKey register
    GUICtrlSetData($cLabel, GUICtrlRead($cLabel) - 0.5)
    EndFunc

    [/autoit]

    lg chess

  • Hier eine Lösung mit Default-Button:

    Spoiler anzeigen
    [autoit]

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

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

    GUICreate('', 220, 120)
    $idInpValue = GUICtrlCreateInput('10', 10, 10, 200, 25)
    $idBtnMinus = GUICtrlCreateButton("Minus 0.5", 10, 40, 200, 25, $BS_DEFPUSHBUTTON)
    GUISetState()

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

    While 1
    $iMsg = GUIGetMsg()
    Switch $iMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $idBtnMinus
    GUICtrlSetData($idInpValue, GUICtrlRead($idInpValue) - 0.5)
    EndSwitch
    WEnd

    [/autoit]

    garantiert ohne Nebenwirkungen (genau wie IPU's)auf andere Fenster

    mfg autoBert

  • Noch eine Möglich wäre

    [autoit]

    GUISetAccelerators

    [/autoit]

    .
    Allerdings funktioniert es auch nur wenn das Fenster aktiv ist.

    Mit AutoIt-Mitteln ist es (glaub ich) nicht möglich das der Tastendruck registriert wird ohne das er komplett abgefangen wird. =\

    Mfg

    There's a joke that C has the speed and efficieny of assembly language combined with readability of....assembly language. In other words, it's just a glorified assembly language. - Teh Interwebz

    C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do, you blow off your whole leg. - Bjarne Stroustrup
    Genie zu sein, bedeutet für mich, alles zu tun, was ich will. - Klaus Kinski

  • Mit AutoIt-Mitteln ist es (glaub ich) nicht möglich das der Tastendruck registriert wird ohne das er komplett abgefangen wird. =\


    Da täuchst du dich aber, mit _IsPressed (IPU's Lösung) wird der Tastendruck nicht abgefangen sondern an die gerade aktive Anwendung durchgelassen, zusätzich wird aber auch der Skriptcode dafür verarbeitet. Dies empfinde ich als Nachteil, da das Skript aich Tastendrücke verarbeitet die nicht für das Skript gedacht waren. GUISetAccelerators ist auch eine Methde ohne Nebenwirkungen auf andere Fenster.

    mfg autoBert

    Einmal editiert, zuletzt von autoBert (10. Januar 2013 um 15:24)

  • Also erstmal vielen vielen Dank. Das funktioniert toll (Version von chesstiger).

    Haben denn die anderen beiden Varianten irgendwelche Vorteile gegenüber der Variante von chesstiger?

    So nebenbei: Gibt es eine Möglichkeit, dass Label in dem GUI zu zentrieren (sowohl vertikal, als auch horizontal)?
    Die Schriftgröße bekomm ich zumindest GUICtrlSetFont hin.