Im OnKeyPress bekommst Du das Zeichen geliefert, das aktuell der gedrückten Taste zugeordnet ist.
Die Taste, die auf einer deutschen Tastatur das Z liefert, ist auf einer englischen Tastatur mit dem Y belegt.
Wenn Du nun z. B. die Spracheinstellung der Tastatur von Deutsch auf Englisch änderst, wirst Du im OnKeyPress beim Drücken der Z-Taste (der deutschen Tastatur) ein Y bekommen. Andersherum bekommst Du, mit einer deutschsprachigen Einstellung der Tastatur, auf einer englischen Tastatur beim Drücken der Y-Taste ein Z.
In OnKeyDown und OnKeyUp bekommst Du jedoch nicht das Zeichen geliefert, dass der Tastaturbeschriftung entspricht, sondern schlicht und einfach die Nummer das Taste, die gedrückt wurde. Eine Übereinstimmung von Tastennummer und Zeichen kann möglich sein, ist aber nicht zwingend.
Bei meinem Rechner hat die Taste für die Zeichen < und >, die ja auf einer Taste liegen, die Nummer 226.
Zustätzlich wird auch noch TShiftState geliefert. Mögliche Werte sind hier
TShiftState = set of (ssShift, ssAlt, ssCtrl, ssLeft, ssRight, ssMiddle, ssDouble);
Hiervon können 0 bis 7 Werte, in beliebiger Kombination, geliefert werden.
Willst Du also in OnKeyDown und/oder OnKeyUp wissen, ob < oder > gedrückt wurden, so musst Du abfragen, ob Key = 226 ist.
Willst Du zwischen < und > unterscheiden können, so musst Du abfragen, ob Shift = ssShift ist. Ist dem so, dann wurde als Eingabe > gemeint. Ist ssShift jedoch "leer" so wurde als Eingabe < gemeint.
Da die Taste aber auch noch die Belegung für | hat, musst Du ggfls. auch noch abfragen, ob Shift ssAlt enthält. Wird also als Key 226 geliefert und Shift ist gleich ssAlt, so wurde als Eingabe | gemeint.
Bei einer anderen Spracheinstellung der Tastatur kann das Ergebnis natürlich vollkommen anders sein.
Hier kannst Du Dir eine Reihe von Tastaturlayouts anschauen:
http://www.uni-regensburg.de/EDV/Misc/KeyBoards/
Miniprogrämmelchen zur Anzeige der getätigten Tastaturkombinationen:
Delphi-Quellcode:
unit fmKeyPreviewUnit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs;
type
TfmKeyPreview =
class(TForm)
procedure FormKeyUp(Sender: TObject;
var Key: Word; Shift: TShiftState);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
fmKeyPreview: TfmKeyPreview;
implementation
{$R *.dfm}
procedure TfmKeyPreview.FormKeyUp(Sender: TObject;
var Key: Word; Shift: TShiftState);
var
s :
String;
begin
s := '
';
if ssShift
in Shift
then s := s + '
Shift + ';
if ssAlt
in Shift
then s := s + '
Alt + ';
if ssCtrl
in Shift
then s := s + '
Ctrl + ';
if ssLeft
in Shift
then s := s + '
Left + ';
if ssRight
in Shift
then s := s + '
Right + ';
if ssMiddle
in Shift
then s := s + '
Middle + ';
if ssDouble
in Shift
then s := s + '
Double + ';
Caption := s + IntToStr(Key);
end;
end.