// Wenn sich
bereits Controls auf der Form befinden
(z.B. 3
Buttons), ist
es
// normalerweise
(auch bei
KeyPreview=True)
nicht möglich die Kursortasten
// korrekt abzufragen. Deshalb muss man diese vorher unter Kontrolle
bringen.
// Getestet mit D4 unter WinME
// 1. Variante:
Die Tastendrücke werden ausgewertet und dann an die anderen
//
Controls weitergeleitet.
...
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
Label1: TLabel;
private
{
Private-Deklarationen }
public
procedure KeyFirst(var vorher: TWMKey);message
CM_DIALOGKEY;
procedure KeyLeft;
procedure KeyUp;
procedure KeyRight;
procedure KeyDown;
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.KeyFirst(var vorher: TWMKey);
begin
case vorher.CharCode of
VK_LEFT:KeyLeft;
VK_UP:KeyUp;
VK_RIGHT:KeyRight;
VK_DOWN:KeyDown;
end;
inherited;
end;
procedure TForm1.KeyLeft;
begin
// hier
alles, was bei VK_LEFT passieren soll, z.B.
Label1.caption:='nach links';
end;
procedure TForm1.KeyUp;
begin
// hier alles,
was bei VK_UP passieren soll, z.B.
Label1.caption:='nach oben';
end;
procedure TForm1.KeyRight;
begin
// hier alles,
was bei VK_RIGHT passieren soll, z.B.
Label1.caption:='nach rechts';
end;
procedure TForm1.KeyDown;
begin
// hier alles,
was bei VK_DOWN passieren soll, z.B.
Label1.caption:='nach unten';
end;
//---------------------------------------------------------
// 2. Variante:
Die Tastendrücke werden abgefangen, ausgewertet und
//
nicht mehr weitergeleitet. Dazu muss man nur die
//
Prozedur KeyFirst etwas modifizieren:
...
procedure
TForm1.KeyFirst(var vorher: TWMKey);
begin
case vorher.CharCode of
VK_LEFT:KeyLeft;
VK_UP:KeyUp;
VK_RIGHT:KeyRight;
VK_DOWN:KeyDown;
else begin inherited;exit;end;
end;
vorher.result:=1;
end;
...
//---------------------------------------------------------
// 3. Variante:
// Es muss zusätlich zur Variante 1 die ALT-Taste
gedrückt werden
...
const
ShiftState:TShiftState=[ssAlt];
procedure TForm1.KeyFirst(var vorher: TWMKey);
begin
if KeyDataToShiftState(vorher.KeyData)=ShiftState then begin
case vorher.CharCode of
VK_LEFT:KeyLeft;
VK_UP:KeyUp;
VK_RIGHT:KeyRight;
VK_DOWN:KeyDown;
end;
end;
inherited;
end;
...
![](zurueck.gif) |