Einzelnen Beitrag anzeigen

Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#2

Re: Tastencodes in Case-Anweisung

  Alt 12. Dez 2006, 21:51
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