// 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;

...
 


 

Zugriffe seit 6.9.2001 auf Delphi-Ecke