Hi,
was genau möchtest du denn machen? Soll dein Programm wenn es den Fokus hat alle Tastendrücke empfangen oder möchtest du wirklich alle Tasten abfangen?
An sich gilt für case, dass du hier die Belegung einer einzelnen Variable aus mehreren Möglichkeiten auswählst. Diese Variable muss zudem noch von einem ordinalen Typ sein, aber das ist hier eher unwichtig.
In deinem Fall gibt es schon keine solche Variable, du überprüfst hier verschiedene Elemente in einem Array, jedes dieser Elemente ist dabei eine eigene Variable. Hier könntest du natürlich für eine bestimmte Position durch ein Case unterscheiden, ob die Taste noch gedrückt ist oder nur gedrückt wurde (das sind zwei verschiedene Belegungen der gleichen Variable).
Der Übersichthalber solltest du den Code auch etwas strukturierter aufschreiben, so dass die Zuordnung von Bedingung und Auswirkung deutlicher ist.
Delphi-Quellcode:
function Tasten2: Integer;
var i : Integer;
begin
for i := 0 to high(keys) do
begin
keys[i] := (GetAsyncKeyState(i) = 0);
end;
if keys[VK_Space] = false then
begin
result:=VK_Space
end
else if keys[VK_DOWN] = false then
begin
result:=VK_DOWN
end
else if keys[ord( 'M' )] = false then
begin
result:=ord( 'M' )
end
else
begin
result:=i;
end;
end;
Die Begin und Ends mögen keine Auswirkungen auf die Korrektheit des Codes haben, aber doch auf die Lesbarkeit. An sich solltest du auch mit deinem letzten else Fall aufpassen, eine Variable, die in einer Zählschleife verwendet wird, hat nach dem durchlaufen der Schleife keinen definierten Wert mehr. Du solltest hier lieber high(keys) zuweisen oder i in einer while-Schleife erhöhen.
Gruß Der Unwissende