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?
Ähnliche Themen
Delphi: Systemweiter HotKey
Tutorial | 3 Kommentare
Delphi: Globale Behandlung von Fehlermeldungen (Exceptions)
Tutorial | 0 Kommentare
Delphi/Lazarus: Kommandozeilen Parameter Tutorial Teil 1: Senden
Tutorial | 0 Kommentare
Delphi/Lazarus: Nur Zahlen im Edit-Feld erlauben
Tipp | 0 Kommentare
Windows: Programm als Administrator ausführen - Einmal, immer oder mit Verknüpfung
Tutorial | 0 Kommentare
Delphi: Programm mit ESC Taste beenden
Tipp | 0 Kommentare
Delphi: Fehler abfangen mit Try Except funktioniert nicht
Frage | 2 Antworten
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.
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:
Damit kommt wird der Tastendruck zuerst an das Programm gesendet und kann dort abgefangen werden.
05.05.2012 um 23:25