11 Stimme

Delphi: Tastendruck überall im Programm abfangen

Frage von Chematik | 25.04.2012 um 22:37

Ich habe ein Programm in Delphi geschrieben, in dem ich einige Befehle mit dem Drücken von Tasten ausführen möchte. Dafür benutze ich die folgende Prozedur im OnKeyPress meiner Form:

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
   if key = 'a' then ...;
   if key = 'b' then ...;
   if key = 'c' then ...;
end;

Allerdings funktioniert dies nicht immer. Manchmal wird die Funktion ausgeführt, manchmal ist es so, als wäre die Taste nie gedrückt worden. Weiß jemand woran das liegen kann und wie ich einen programmweiten Tastendruck realisieren kann?

AntwortenPositivNegativ
3Beste Antwort5 Stimmen

Deine Prozedur wird nur dann aufgerufen, wenn der Focus des Programms auf der Hauptform liegt. Sobald etwas anderes (zum Beispiel ein Button oder eine ComboBox) den Fokus hat, kommt der Tastendruck nur bei diesem Element an, nicht aber bei der Hauptform und deiner Prozedur.

Setze einfach die Eigenschaft KeyPreview deiner Form auf true, beziehungsweise schreibe dies in das OnCreate deiner Form:

procedure TForm1.FormCreate(Sender: TObject);
begin
   KeyPreview := True;
end;

Damit kommt wird der Tastendruck zuerst an das Programm gesendet und kann dort abgefangen werden.
05.05.2012 um 23:25

AntwortenPositiv Negativ
Antworten

Ähnliche Themen

Delphi: Systemweiter HotKey

Tutorial | 3 Kommentare

Wichtiger Hinweis

Bitte beachten Sie: Die Beiträge auf askingbox.de sind Beiträge von Nutzern und sollen keine professionelle Beratung ersetzen. Sie werden nicht von Unabhängigen geprüft und spiegeln nicht zwingend die Meinung von askingbox.de wieder. Mehr erfahren.

Jetzt mitmachen

Stellen Sie Ihre eigene Frage oder schreiben Sie Ihren eigenen Artikel auf askingbox.de. So gehts.