![]() |
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:
der code funktioniert bestens aber halt nur wenn ich keine buttons habe, aber ich brauch welche für start neu usw.
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; 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 |
Re: Tastendruck im Gesamten Form erkennen!
Hallo, setze KeyPreview der Form auf True.
|
Re: Tastendruck im Gesamten Form erkennen!
Moin, Moin,
im Form "KeyPreview=true" setzen und die Tasten im "ONKey~~" des Forms auswerten |
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! |
Re: Tastendruck im Gesamten Form erkennen!
[OT]
Bitte den Delphi-Code in [ delphi ] ... [ /delphi ]-Tags einschließen. :warn: :mrgreen: [/OT] |
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; |
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 11:11 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 by Thomas Breitkreuz