Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.068 Beiträge
 
Delphi 12 Athens
 
#5

AW: mehrere Key-Down Erreignisse gleichzeitig ausführen

  Alt 12. Dez 2011, 10:34
Man kann auch OnKeyDown/OnKeyUp verwenden.

Delphi-Quellcode:
type
  TForm6 = class(TForm)
    Timer1: TTimer;
    procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
    procedure FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private-Deklarationen }
    FTasteRunter, FTasteHoch, FTasteLinks, FTasteRechts, FTasteA: Boolean;
  public
    { Public-Deklarationen }
  end;

procedure TForm6.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  case Key of
    VK_UP: FTasteHoch := True;
    VK_DOWN: FTasteRunter := True;
    VK_LEFT: FTasteLinks := True;
    VK_RIGHT: FTasteRechts := True;
    Ord('A'): FTasteA := True;
  end;
end;

procedure TForm6.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  case Key of
    VK_UP: FTasteHoch := False;
    VK_DOWN: FTasteRunter := False;
    VK_LEFT: FTasteLinks := False;
    VK_RIGHT: FTasteRechts := False;
    Ord('A'): FTasteA := False;
  end;
end;

procedure TForm6.Timer1Timer(Sender: TObject);
begin
  if FTasteHoch then
    ...
  if FTasteA then
    ...
end;

Delphi-Quellcode:
type
  TForm6 = class(TForm)
    Timer1: TTimer;
    procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
    procedure FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private-Deklarationen }
    FTasten: array[Word] of Boolean;
  public
    { Public-Deklarationen }
  end;

const
  VK_A = Ord(A);

procedure TForm6.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  FTasten[Key] := True;
end;

procedure TForm6.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  FTasten[Key] := False;
end;

procedure TForm6.Timer1Timer(Sender: TObject);
begin
  if FTasten[VK_UP] then
    ...
  if FTasten[VK_A] then
    ...
end;
PS: Wenn man eine Taste zwischen zwei GetKeyState-Aufrufen drückt und wieder loslässt oder loslässt und wieder drückt, dann wird dieser Tastendruck übersehn.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (12. Dez 2011 um 10:36 Uhr)
  Mit Zitat antworten Zitat