AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Problem mit Tastendruck
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit Tastendruck

Ein Thema von Airblader · begonnen am 3. Jan 2005 · letzter Beitrag vom 3. Jan 2005
Antwort Antwort
Benutzerbild von Airblader
Airblader

Registriert seit: 29. Okt 2004
Ort: Geislingen an der Steige
742 Beiträge
 
#1

Problem mit Tastendruck

  Alt 3. Jan 2005, 13:48
Hi
Ich will ein kleines Spiel machen, um etwas DX zu lernen (also mehr zur Übung).
Dazu brauch ich natürlich die Pfeiltasten.

Aber wie kann ich erreichen, dass es auch geht, wenn z.B. Hoch und Rechts gedrückt ist?
Im Chat wurde ich aufgeklärt, dass nie beide Tasten im OnKeyDown ankommen.

Deshalb hab ichs im Moment so:

Delphi-Quellcode:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
        if Key=VK_UP then
                KeyUP_pressed := true;
        if Key=VK_DOWN then
                KeyDOWN_pressed := true;

        if Key=VK_LEFT then
                Dec(X,2);
        if Key=VK_RIGHT then
                Inc(X,2);

        if KeyUP_pressed then
                Dec(Y,2);
        if KeyDOWN_pressed then
                Inc(Y,2);
end;

procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
        if Key=VK_UP then
                KeyUP_pressed := false;
        if Key=VK_DOWN then
                KeyDOWN_pressed := false;
end;
Aber das bringt ein paar Probleme mit sich:
  • Man kann nicht beide gleichzeitig anfangen zu drücken
  • Wenn man mal schrägt fährt, und dann z.B. Rechts loslässt, fährt er nicht weiter Runter, obwohl nach Unten immer noch gedrückt ist

Gibt es da eine bessere/einfachere/funktionierend(ere) Lösung

MfG,
air
Ingo Bürk
Es nimmt der Augenblick, was Jahre geben.

Johann Wolfgang von Goethe
  Mit Zitat antworten Zitat
Oxmyx

Registriert seit: 21. Sep 2004
499 Beiträge
 
#2

Re: Problem mit Tastendruck

  Alt 3. Jan 2005, 13:54
Mach's mit GetAsyncKeyState (fragt eine Taste der Tastatur ab) oder mit GetKeyboardState (fragt alle Tasten der Tastatur ab und kopiert sie in ein 256-Byte-Array).
  Mit Zitat antworten Zitat
Benutzerbild von Airblader
Airblader

Registriert seit: 29. Okt 2004
Ort: Geislingen an der Steige
742 Beiträge
 
#3

Re: Problem mit Tastendruck

  Alt 3. Jan 2005, 13:57
Zitat von Oxmyx:
Mach's mit GetAsyncKeyState
Hm...auf die Idee hätt ich auch kommen können (hab früher mal ein wenig mit C++ hantiert).

Aber wenn GetAsyncKeyState nur eine taste abfragt, müsste ich dann nicht sogar zwangsweise GetKeyboardState nehmen?

und wo kann ich das anwenden? auch im OnKeyDown?

air

edit: Ok...geht swoeit.
Aber wenn ich links-unten drücke, und dann links loslasse, bleibt er trotz gedrückter unten-taste stehen
Ingo Bürk
Es nimmt der Augenblick, was Jahre geben.

Johann Wolfgang von Goethe
  Mit Zitat antworten Zitat
Oxmyx

Registriert seit: 21. Sep 2004
499 Beiträge
 
#4

Re: Problem mit Tastendruck

  Alt 3. Jan 2005, 14:06
Du kannst doch in der Timer-Prozedur schreiben...

Delphi-Quellcode:
if GetAsyncKeyState(VK_TOP) <> 0 then begin
  ...
end;
if GetAsyncKeyState(VK_DOWN) <> 0 then begin
  ...
end;
if GetAsyncKeyState(VK_LEFT) <> 0 then begin
  ...
end;
if GetAsyncKeyState(VK_RIGHT) <> 0 then begin
  ...
end;
  Mit Zitat antworten Zitat
Benutzerbild von Airblader
Airblader

Registriert seit: 29. Okt 2004
Ort: Geislingen an der Steige
742 Beiträge
 
#5

Re: Problem mit Tastendruck

  Alt 3. Jan 2005, 14:08
hm..ja...in der timer wär es fast besser...ich teste es mal

Edit:

Ok...danke es klappt
War wieder mal schnelle DP-Hilfe
Ingo Bürk
Es nimmt der Augenblick, was Jahre geben.

Johann Wolfgang von Goethe
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#6

Re: Problem mit Tastendruck

  Alt 3. Jan 2005, 14:10
Mal ganz brutal: Bau' doch einen Keyboard-Hook ein und checke dort (vielleicht mit GetAsyncKeyState), welche Taste gedrückt/losgelassen wurde. So brauchst du keine Timer mehr und hälst die Systemauslastung niedriger.
  Mit Zitat antworten Zitat
Benutzerbild von Airblader
Airblader

Registriert seit: 29. Okt 2004
Ort: Geislingen an der Steige
742 Beiträge
 
#7

Re: Problem mit Tastendruck

  Alt 3. Jan 2005, 14:11
Zitat von Dax:
Mal ganz brutal: Bau' doch einen Keyboard-Hook ein und checke dort (vielleicht mit GetAsyncKeyState), welche Taste gedrückt/losgelassen wurde. So brauchst du keine Timer mehr und hälst die Systemauslastung niedriger.
Ich brauch den Timer so oder so, schon allein für andere Zwecke
Ingo Bürk
Es nimmt der Augenblick, was Jahre geben.

Johann Wolfgang von Goethe
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:26 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz