Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Getasynckeystate - Warten bis Taste wieder losgelassen wird (https://www.delphipraxis.net/159600-getasynckeystate-warten-bis-taste-wieder-losgelassen-wird.html)

Muellermilchtrinker 4. Apr 2011 17:56

Delphi-Version: 2009

Getasynckeystate - Warten bis Taste wieder losgelassen wird
 
Hallo DP,

ich warte mit einem Timer und Getasynckeystate, bis eine Taste gedrückt wird. (Bitte keine Diskussion über den Einsatz von einem Timer & Getasynckeystate)
Mein Problem ist nun, dass ich wenn ich die Taste gedrückt halte, dass dann meine Aktion ständig ausgeführt wird. Nun möchte ich aber, dass ich warte, bis die Taste wieder losgelassen wurde und dann die Aktion ausführen. Weiß jmd. wie das möglich ist. Ich hab schon die böse Variante ausprobiert, in einer Schleife warten, jedoch benötigt das extrem Rechenpower und mein Programm wird dabei blockiert, was nicht passieren darf.
Bin über jede Antwort dankbar.

DeddyH 4. Apr 2011 17:59

AW: Getasynckeystate - Warten bis Taste wieder losgelassen wird
 
Setz doch einen Marker (eine Boolean-Variable) auf true, wenn die Taste gedrückt wurde. Gibt GetAsyncKeyState dann zurück, dass die Taste nicht gedrückt ist und der Marker ist gesetzt, dann wurde die Taste losgelassen. Elegant ist das zwar nicht unbedingt, aber wir sollen ja nicht nachfragen ^^

Muellermilchtrinker 4. Apr 2011 18:29

AW: Getasynckeystate - Warten bis Taste wieder losgelassen wird
 
Danke, dass funktioniert. Nun noch eine kleine Frage, wieso unterscheidet getasynckeystate zwischen dem großen Enter und dem Enter beim Nummernblock. Da bei mir nur der Enter am Nummernblock funktioniert, obwohl beide #13 sind

Medium 4. Apr 2011 19:10

AW: Getasynckeystate - Warten bis Taste wieder losgelassen wird
 
Das ist der Unterschied zwischen dem Tastencode und dem daraus generierten Zeichen - unterschiedliche Tastencodes können gleiche Zeichen generieren, aber es ist für manche Anwendungen eben wichtig dennoch zwischen diesen unterscheiden zu können.

Und: Ich finde Threads immer deutlich schöner als Timer, und in deinem Fall wäre es geradezu ideal, da du damit im Grunde Events ganz ähnlich gestalten könntest, wie es die VCL auch tut. Nur dass dann statt Windows dein Thread der Message-Generator ist.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:21 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz