6

Ich habe das folgende Problem in Delphi (aber es könnte als allgemeine Programmierfrage genommen werden).Wie erkennen Sie eine Tastenkombination ohne Modifier?

Ich würde irgendwie ein Tastendruckereignis behandeln wie mehr als eine Nicht-Modifikator Tastenkombination, zum Beispiel für Verknüpfungen wie A + D oder D + F oder D + F + G.

Ich weiß, wie Verknüpfungen mit Zusatztasten zu handhaben wie zum Beispiel CTRL + D oder CTRL + ALT + D oder ALT + D, aber wie kann ich nicht erkennen, -Modifier-Tastenkombination?

+3

Nein, es gibt keinen bestimmten Event-Handler, Sie müssen die Tastenfolgen manuell verfolgen. (BTW, bitte nicht schreien) –

+1

Und bitte verwenden Sie keine Informationen, die in Tags in Ihren Themen gehört. Das Tag-System ist hier sehr gut und benötigt keine Hilfe (vor allem bei SHOUTED). Benutze die Tags - dafür sind sie da. –

+2

Entschuldigung, ich bin neu! :) –

Antwort

8

Jeder einzelne Tastendruck erzeugt separate OnKeyDown, OnKeyPress und OnKeyUp Ereignisse. So haben Sie drei Möglichkeiten:

  1. verfolgen Sie jede Taste, die derzeit gehalten wird. Legen Sie für jeden Schlüssel, den Sie erhalten, im Ereignis OnKeyDown ein Kennzeichen dafür fest und löschen Sie das Kennzeichen dafür im entsprechenden Ereignis OnKeyUp. Wenn Sie ein OnKeyDown Ereignis für D erhalten, überprüfen Sie, ob Sie bereits gekennzeichnet A, F, G usw. Die OnKeyDown und OnKeyUp Veranstaltungen finden Sie auch den Zustand erzählen von der CTRL, ALT und SHIFT Tasten. Verwenden Sie die Win32 API GetKeyboardState(), GetKeyState() oder GetAsyncKeyState() Funktionen. Wenn Sie ein OnKeyDown Ereignis für D erhalten, fragen Sie das OS wenn A, F, G, CTRL usw. zur Zeit nach unten gehalten werden.

  2. Für einige Sequenzen können Sie RegisterHotKey() verwenden und das Betriebssystem die Schlüssel für Sie verfolgen lassen. Wenn eine registrierte Sequenz erkannt wird, erhalten Sie eine Nachricht WM_HOTKEY.

+0

Vielen Dank! Ich werde deine Methode beweisen, besonders für Punkt 1 und 2! Vielen Dank! –

+0

Wenn jemand die Maus bewegt (denke an ein Laptop-Touchpad - oft habe ich es versehentlich beim Tippen getroffen), kann Methode # 1 fehlschlagen.Mir ist nichts bewusst, was bei # 2 scheitern könnte. –

+0

@LorenPechtel: Nur interessiert. Wie würde es scheitern? Die einzelnen Tastaturereignisse würden immer noch ausgelöst und Sie können sie verfolgen? –