Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Tastendruck im Gesamten Form erkennen! (https://www.delphipraxis.net/108606-tastendruck-im-gesamten-form-erkennen.html)

Torley 16. Feb 2008 12:29


Tastendruck im Gesamten Form erkennen!
 
Ich habe ein problem mit der steuerung meines Spieles.
ich programmiere es grade für eine arbeit neu. im alten spiel habe ich die tasten in einem timer jede ms abgefragt, nun will ich aber onkeydown oder onkeypress benutzen.

mein problem dabei ist das ich auf dem form natürlich buttons und anderes habe und onkeydown nur reagiert wenn ich keine drauf habe und das form angewählt ist. :wall:

Delphi-Quellcode:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if Key = VK_Right then begin if ((richtung = 1)or(richtung = 3)) then richtung:=2; end;
  if Key = VK_LEFT then begin if ((richtung = 1)or(richtung = 3)) then richtung:=4; end;
  if Key = VK_UP   then begin if ((richtung = 2)or(richtung = 4)) then richtung:=1; end;
  if Key = VK_DOWN then begin if ((richtung = 2)or(richtung = 4)) then richtung:=3; end;
end;
der code funktioniert bestens aber halt nur wenn ich keine buttons habe, aber ich brauch welche für start neu usw.

gibts da irgendeine andere art die tastendrücke zu empfangen ohne in jeden button eine keydown zu schreiben :?:
ich hab hier im forum schon viel gesucht doch leider nicht das richtige gefunden. :(

Torley

toms 16. Feb 2008 12:38

Re: Tastendruck im Gesamten Form erkennen!
 
Hallo, setze KeyPreview der Form auf True.

taaktaak 16. Feb 2008 12:39

Re: Tastendruck im Gesamten Form erkennen!
 
Moin, Moin,
im Form "KeyPreview=true" setzen und die Tasten im "ONKey~~" des Forms auswerten

HHennig 16. Feb 2008 12:53

Re: Tastendruck im Gesamten Form erkennen!
 
Hallo,

mit dem folgenden Code bekommst du die Tasten in der ganzen Applikation, bevor irgend eine andere Komponente sie kriegt:

type
TMyForm
.
.
procedure OnAppMsg(var Msg: TMsg; var Handled: Boolean);
end;

constructor TMyForm.Create;
begin
.
.
Application.OnMessage := OnAppMsg;
end;

.
.

procedure TMyForm.OnAppMsg(var Msg: TMsg; var Handled: Boolean);
begin
Handled := False;
if Msg.message = WM_KEYDOWN then
begin
if Msg.wParam = VK_TAB then // oder irgendeine andere Taste deiner Wahl
begin
// tue irgendwas
Handled := True;
end;

if Msg.wParam = VK_... then
begin
// tue irgendwas
Handled := True;
end;
end;
end;


Viel Erfolg!

Nuclear-Ping 16. Feb 2008 13:28

Re: Tastendruck im Gesamten Form erkennen!
 
[OT]
Bitte den Delphi-Code in [ delphi ] ... [ /delphi ]-Tags einschließen. :warn:
:mrgreen:
[/OT]

Torley 16. Feb 2008 15:27

Re: Tastendruck im Gesamten Form erkennen!
 
Ich habe jetzt Keypreview auf true gestellt jedoch ohne erfolg! der focus ist auf dem button womit ich die ganzen befehle für keydown darein schreiben müsste, jedoch wechselt der focus beim drücken der pfeiltasten die ich ja benutzen will! (Kann man das irgendwie unterbinden?)

Problem wegen steuerung ist aber gelöst:

@hhening

Dein Code geht bestens jedoch hab ich einiges ausgelassen und es geht trotzdem?!
Delphi-Quellcode:
 procedure OnAppMsg(var Msg: TMsg; var Handled: Boolean);
end;

constructor TMyForm.Create;
begin
.
.
Application.OnMessage := OnAppMsg; // den teil hab ich nur in on create geschoben
end;

taaktaak 16. Feb 2008 15:32

Re: Tastendruck im Gesamten Form erkennen!
 
Vermutlich hast du vergessen nach Auswertung/Reaktion von KEY diesen im OnKeyDown-Event auf Null zu setzen - das ist natürlich wichtig...


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:21 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