![]() |
Problem mit Tastendruck
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:
Aber das bringt ein paar Probleme mit sich:
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;
Gibt es da eine bessere/einfachere/funktionierend(ere) Lösung :?: MfG, air |
Re: Problem mit Tastendruck
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).
|
Re: Problem mit Tastendruck
Zitat:
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 :| |
Re: Problem mit Tastendruck
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; |
Re: Problem mit Tastendruck
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 :thumb: :dp: |
Re: Problem mit Tastendruck
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.
|
Re: Problem mit Tastendruck
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:12 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz