So und hier wie versprochen die komplette Procedure, ich hoffe, dass einige von euch sie gebrauchen können, wenn jemand noch eine Verbesserung sieht oder macht gebt mir bitte Bescheid.
In die Komponente wurde eine besondere Tastatursteuerung integriert damit diese
einwandfrei funktioniert ist folgendes zu beachten:
1- mit den Cursortasten kann nur innerhalb der Komponentenklasse gesprungen
werden
2- mit den Cursortasten rechts und links kann jeweils auf die oberste
Komponente in der nächsten Reihe rechts oder Links gesprungen werden.
3- mit den Cursortasten rauf und runter kann dann in der Reihe eine
Komponente nach oben oder unten gesprungen werden.Damit dies Funktioniert
müssen die Komponenten innerhalb der Reihe den gleichen X-Achsenwert
(Left) haben.
4- mit der Space-Taste wird das Click-Ereignis ausgelöst.
5- die Tab-Taste funktioniert wie bisher nach der Taborder.
Delphi-Quellcode:
////////////////////////////////////////////////////////////////////////////////
// Die neuen Tastatur Ereignisse
//
procedure TPlanGame.KeyDown(var Key: Word; Shift: TShiftState);
var iii:integer;
obj: tObject;
begin
obj:=nil;
If (Key=vk_Right) or (Key=vk_Left) or (Key=vk_Down) or (Key=vk_up)then begin
for iii :=0 to Parent.ComponentCount-1 do
if Parent.Components[iii].classtype=TPlanGame then begin
if TPlanGame(Parent.Components[iii]).enabled and
TPlanGame(Parent.Components[iii]).Visible then //begin
case Key of
vk_Right:
begin
if TPlanGame(Parent.Components[iii]).Left > Left then
if obj=nil then obj:= Parent.Components[iii]
else begin
if (TPlanGame(Parent.Components[iii]).Left < TPlanGame(obj).Left) then obj:=Parent.Components[iii];
if (TPlanGame(Parent.Components[iii]).Left = TPlanGame(obj).Left) then
if (TPlanGame(Parent.Components[iii]).Top < TPlanGame(obj).Top)then obj:=Parent.Components[iii];
end;
end;
vk_Left:
begin
if TPlanGame(Parent.Components[iii]).Left < Left then
if obj=nil then obj:= Parent.Components[iii]
else begin
if (TPlanGame(Parent.Components[iii]).Left > TPlanGame(obj).Left) then obj:=Parent.Components[iii];
if (TPlanGame(Parent.Components[iii]).Left = TPlanGame(obj).Left) then
if (TPlanGame(Parent.Components[iii]).Top < TPlanGame(obj).Top)then obj:=Parent.Components[iii];
end;
end;
vk_Down:
begin
if (TPlanGame(Parent.Components[iii]).Left = Left) and
(TPlanGame(Parent.Components[iii]).Top > Top)then
if obj=nil then obj:= Parent.Components[iii]
else
if (TPlanGame(Parent.Components[iii]).Top < TPlanGame(obj).Top) then obj:=Parent.Components[iii];
end;
vk_up:
begin
if (TPlanGame(Parent.Components[iii]).Left = Left) and
(TPlanGame(Parent.Components[iii]).Top < Top)then
if obj=nil then obj:= Parent.Components[iii]
else
if (TPlanGame(Parent.Components[iii]).Top > TPlanGame(obj).Top) then obj:=Parent.Components[iii];
end;
end;
//end;
end;
if obj<>nil then
if TPlanGame(obj).Enabled and TPlanGame(obj).Visible then TPlanGame(obj).Setfocus;
end;
if Key=VK_Space then Click;
inherited;
end;
//===
Gruss und Danke Dieter