Message-Queue-Frage

12/01/2011 - 13:42 von Georg Jung | Report spam
Ich möchte in meiner Anwendung bei einem langen Tastendruck etwas
Anderes machen als bei kurzen. So als Vereinfachung: Wenn der Benutzer
"A" unter eine Sekunde lang drückt, soll mein Programm das normal
verarbeiten (KeyDown, KeyPress, KeyUp, etc.), ansonsten möchte ich z. B.
ein Menü öffnen, etc.
Hört sich leicht an, aber geht meiner Meinung nach nicht ohne Subclassing.

Ich überlege nun was ich machen soll. Wenn ich an der MessageQueue
rumfummel (das war mein erster Gedanke) denke ich dass mit den ganzen
DeadKeys und Tastenkombis durcheinanderkomme, wenn ich Messages verwerfe
und nachtràglich wieder einfüge.

Hat jemand eine Idee dazu?
 

Lesen sie die antworten

#1 Thorsten Albers
12/01/2011 - 13:55 | Warnen spam
Georg Jung schrieb im Beitrag
<igk7jh$kr6$02$...
Ich möchte in meiner Anwendung bei einem langen Tastendruck etwas
Anderes machen als bei kurzen. So als Vereinfachung: Wenn der Benutzer
"A" unter eine Sekunde lang drückt, soll mein Programm das normal
verarbeiten (KeyDown, KeyPress, KeyUp, etc.), ansonsten möchte ich z. B.
ein Menü öffnen, etc.
Hört sich leicht an, aber geht meiner Meinung nach nicht ohne


Subclassing.

Ich überlege nun was ich machen soll. Wenn ich an der MessageQueue
rumfummel (das war mein erster Gedanke) denke ich dass mit den ganzen
DeadKeys und Tastenkombis durcheinanderkomme, wenn ich Messages verwerfe
und nachtràglich wieder einfüge.

Hat jemand eine Idee dazu?



Das halte ich für keine gute Idee, da es zum einen jenseits der dem
Benutzer bekannten und für ihn gewohnten Benutzerschnittstelle von Windows
und Windows-Anwendungen liegt, und da es zum anderen sehr relativ ist, was
ein langer Tastendruck sein soll. Zumindest sollte ein derartiges 'Feature'
für den Benutzer modifizierbar und deaktivierbar sein.
Ansonsten:
Zu jedem KeyDown-Ereignis wird auch ein entsprechendes KeyUp-Ereignis
gefeuert. Du mußt also nur in der KeyDown-Ereignisprozedur die
Parameter-Daten samt Kontext und einem Zeitstempel so speichern, daß Du sie
in der KeyUp-Ereignisprozedur auslesen kannst. Dort prüfst Du dann, ob der
Kontext noch derselbe ist und die Zeit einem kurzen oder langen Tastendruck
entspricht. Natürlich darf die betroffene Taste nicht in der
KeyPress-Ereignisprozedur behandelt werden.

Thorsten Albers

gudea (a) gmx.de

Ähnliche fragen