Tastaturereignisse in Delphi verstehen und verarbeiten

click fraud protection

Tastaturereignisse, zusammen mit Mausereignissesind die Hauptelemente der Interaktion eines Benutzers mit Ihrem Programm.

Im Folgenden finden Sie Informationen zu drei Ereignissen, mit denen Sie die Tastenanschläge eines Benutzers in einer Delphi-Anwendung erfassen können: OnKeyDown, OnKeyUp und OnKeyPress.

Runter, rauf, drück, runter, rauf, drück...

Delphi-Anwendungen können zwei Methoden zum Empfangen der Eingabe von der Tastatur verwenden. Wenn ein Benutzer etwas in eine Anwendung eingeben muss, können Sie diese Eingabe am einfachsten erhalten, indem Sie eines der Steuerelemente verwenden, das automatisch auf Tastendrücke reagiert, z. B. Bearbeiten.

Zu anderen Zeiten und für allgemeinere Zwecke können wir jedoch Prozeduren in einem Formular erstellen, die drei Ereignisse verarbeiten, die von Formularen und von jeder Komponente erkannt werden, die Tastatureingaben akzeptiert. Wir können Ereignishandler für diese Ereignisse schreiben, um auf jede Taste oder Tastenkombination zu reagieren, die der Benutzer zur Laufzeit möglicherweise drückt.

instagram viewer

Hier sind diese Ereignisse:

OnKeyDown - Wird aufgerufen, wenn eine Taste auf der Tastatur gedrückt wird
OnKeyUp - Wird aufgerufen, wenn eine Taste auf der Tastatur losgelassen wird
OnKeyPress - Wird aufgerufen, wenn eine Taste gedrückt wird, die einem ASCII-Zeichen entspricht

Tastaturhandler

Alle Tastaturereignisse haben eine Parameter gemeinsam. Das Schlüssel Der Parameter ist die Taste auf der Tastatur und wird verwendet, um den Wert der gedrückten Taste als Referenz zu übergeben. Das Verschiebung Parameter (in der OnKeyDown und OnKeyUp Prozeduren) gibt an, ob die Umschalt-, Alt- oder Strg-Taste mit dem Tastenanschlag kombiniert sind.

Das Absenderparameter verweist auf das Steuerelement, mit dem die Methode aufgerufen wurde.

Verfahren TForm1.FormKeyDown (Absender: TObject; var Stichwort; Shift: TShiftState);... Verfahren TForm1.FormKeyUp (Absender: TObject; var Stichwort; Shift: TShiftState);... Verfahren TForm1.FormKeyPress (Absender: TObject; var Schlüssel: Char); 

Um zu reagieren, wenn der Benutzer Tastenkombinationen oder Gaspedaltasten drückt, wie sie beispielsweise mit Menübefehlen versehen sind, müssen keine Ereignishandler geschrieben werden.

Was ist Fokus?

Fokus ist die Fähigkeit, Benutzereingaben über das zu empfangen Maus oder Tastatur. Nur das Objekt mit dem Fokus kann ein Tastaturereignis empfangen. Außerdem kann jeweils nur eine Komponente pro Formular in einer laufenden Anwendung aktiv sein oder den Fokus haben.

Einige Komponenten, wie z TImage, TPaintBox, TPanel und TLabel kann keinen Fokus erhalten. Im Allgemeinen werden Komponenten abgeleitet von TGraphicControl können keinen Fokus erhalten. Darüber hinaus Komponenten, die zur Laufzeit unsichtbar sind (TTimer) kann keinen Fokus erhalten.

OnKeyDown, OnKeyUp

Das OnKeyDown und OnKeyUp Ereignisse bieten die niedrigste Stufe der Tastaturantwort. Beide OnKeyDown und OnKeyUp Handler können auf alle Tastaturtasten reagieren, einschließlich Funktionstasten und Tasten, die mit dem kombiniert sind Verschiebung, Alt, und Strg Schlüssel.

Die Tastaturereignisse schließen sich nicht gegenseitig aus. Wenn der Benutzer eine Taste drückt, werden beide OnKeyDown und OnKeyPress Ereignisse werden generiert, und wenn der Benutzer den Schlüssel loslässt, wird der OnKeyUp Ereignis wird generiert. Wenn der Benutzer eine der Tasten drückt, die OnKeyPress erkennt nicht, nur die OnKeyDown Ereignis tritt ein, gefolgt von OnKeyUp Veranstaltung.

Wenn Sie eine Taste gedrückt halten, wird die OnKeyUp Ereignis tritt nach all dem auf OnKeyDown und OnKeyPress Ereignisse sind aufgetreten.

OnKeyPress

OnKeyPress gibt jedoch ein anderes ASCII-Zeichen für 'g' und 'G' zurück OnKeyDown und OnKeyUp Unterscheiden Sie nicht zwischen Groß- und Kleinbuchstaben.

Schlüssel- und Umschaltparameter

Seit der Schlüssel Parameter wird als Referenz übergeben, der Ereignishandler kann sich ändern Schlüssel Damit sieht die Anwendung einen anderen Schlüssel als an der Veranstaltung beteiligt. Auf diese Weise können Sie die Art der Zeichen einschränken, die der Benutzer eingeben kann, um zu verhindern, dass Benutzer Alphatasten eingeben.

wenn Schlüssel im ['a'.. 'z'] + ['A'.. 'Z'] dann Schlüssel: = # 0 

Die obige Anweisung prüft, ob die Schlüssel Der Parameter besteht aus zwei Sätzen: Kleinbuchstaben (d. h. ein durch z) und Großbuchstaben (A-Z). In diesem Fall weist die Anweisung den Zeichenwert Null zu Schlüssel um jegliche Eingabe in die zu verhindern Bearbeiten Komponente, wenn sie beispielsweise den geänderten Schlüssel empfängt.

Für nicht alphanumerische Schlüssel WinAPI virtuelle Schlüsselcodes kann verwendet werden, um die gedrückte Taste zu bestimmen. Windows definiert spezielle Konstanten für jede Taste, die der Benutzer drücken kann. Beispielsweise, VK_RIGHT ist der virtuelle Schlüsselcode für den Rechtspfeil.

Um den Schlüsselstatus einiger Sonderschlüssel wie zu erhalten TAB oder PageUpkönnen wir die verwenden GetKeyState Windows-API-Aufruf. Der Tastenstatus gibt an, ob die Taste nach oben, unten oder umgeschaltet ist (ein oder aus - abwechselnd bei jedem Drücken der Taste).

wenn HiWord (GetKeyState (vk_PageUp)) <> 0 dann
ShowMessage ('PageUp - DOWN')
sonst
ShowMessage ('PageUp - UP'); 

In dem OnKeyDown und OnKeyUp Veranstaltungen, Schlüssel ist ein vorzeichenloser Word-Wert, der einen virtuellen Windows-Schlüssel darstellt. Um den Zeichenwert von zu erhalten Schlüssel,wir nehmen das Chr Funktion. In dem OnKeyPress Veranstaltung, Schlüssel ist ein Verkohlen Wert, der ein ASCII-Zeichen darstellt.

Beide OnKeyDown und OnKeyUp Ereignisse verwenden den Shift-Parameter vom Typ TShiftState, ein gesetztes Flag, um den Status der Alt-, Strg- und Umschalttasten zu bestimmen, wenn eine Taste gedrückt wird.

Wenn Sie beispielsweise Strg + A drücken, werden die folgenden Schlüsselereignisse generiert:

 KeyDown (Strg) // ssCtrl
Tastendruck (Strg + A) // ssCtrl + 'A'Tastendruck (A) KeyUp (Strg + A)

Weiterleiten von Tastaturereignissen an das Formular

Legen Sie die Formulare fest, um Tastenanschläge auf Formularebene abzufangen, anstatt sie an die Komponenten des Formulars zu übergeben KeyPreview Eigenschaft auf True (unter Verwendung der Objektinspektor). Die Komponente sieht das Ereignis weiterhin, aber das Formular hat die Möglichkeit, es zuerst zu behandeln, um beispielsweise das Drücken einiger Tasten zuzulassen oder zu verbieten.

Angenommen, Sie haben mehrere Bearbeitungskomponenten in einem Formular und die Bilden. OnKeyPress Verfahren sieht aus wie:

VerfahrenTForm1.FormKeyPress (Absender: TObject; var Schlüssel: Char); Startwenn Schlüssel im ['0'..'9'] dann Schlüssel: = # 0. Ende; 

Wenn eine der Edit-Komponenten die hat Fokus, und die KeyPreview Die Eigenschaft eines Formulars ist False. Dieser Code wird nicht ausgeführt. Mit anderen Worten, wenn der Benutzer die Taste drückt 5 Schlüssel, die 5 Das Zeichen wird in der fokussierten Bearbeitungskomponente angezeigt.

Wenn jedoch die KeyPreview wird auf True gesetzt, dann ist das Formular OnKeyPress Das Ereignis wird ausgeführt, bevor die Edit-Komponente die gedrückte Taste sieht. Wieder, wenn der Benutzer die Taste gedrückt hat 5 key, dann weist es Key den Zeichenwert Null zu, um eine numerische Eingabe in die Edit-Komponente zu verhindern.

instagram story viewer