Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi OnKeyDown funktionert nicht (https://www.delphipraxis.net/130955-onkeydown-funktionert-nicht.html)

Lumpiluk 16. Mär 2009 16:38


OnKeyDown funktionert nicht
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo!

Ich habe ein Problem, und zwar habe ich auf meiner Form für ein Snake-Spiel einen Button, einen Timer, eine PaintBox und zwei Label. Der Button ist da, um ein neues Spiel zu starten und vorerst habe ich es so eingestellt, dass OnCreate der Button gedrückt wird und man gleich damit loslegen kann, die Schlange über die Pfeiltasten zu steuern.
Das funktioniert auch einwandfrei, bis bei "Game Over" Alles zurückgesetzt und der Timer gestoppt wird. Wenn man dann auf den Button klickt, um neu anzufangen, läuft auch alles ganz normal mit der Ausnahme, dass Alles, was ich in OnKeyDown eingegeben habe, nicht mehr funktioniert, obwohl KeyPreview = True und bei dem Button Default = False ist...

Ich hoffe, mir kann hier jemand helfen.
Danke im Voraus!

alleinherrscher 16. Mär 2009 18:20

Re: OnKeyDown funktionert nicht
 
Das Problem ist, dass in dem Moment, wo Button1 geklickt wird, der Focus, also im Endeffekt das Objekt deines Formulars, bei welchem das Event bei Tastatureingabe ausgelöst wird, nicht mehr bei Form1 liegt, sondern auf dem Button.

Wenn du jedoch in die Prozedur des "OnClick" ereignisses am schluss den Focus wieder wieder an Form1 zurückgibst:

Delphi-Quellcode:
 form1.SetFocusedControl(self);
Wirst du sehen, dass dann auch wieder die Tastatureingaben funktionieren.

Achtung: Es gibt Probleme, wenn du in der Form.create schon den Button.OnClick auflöst, da dann versucht wird, dem Formular schon den Fokus zu geben, obwohl selbiges noch nicht angezeigt wird. Evtl musst du den Code, den du in Form.create hast einfach mal in Form.OnShow schreiben, oder das auslösen des Button.OnClick aus dem Form.create löschen.


Grüße,
Michael

Luckie 16. Mär 2009 18:36

Re: OnKeyDown funktionert nicht
 
Eventuell hilft es auch schon wenn du im OI KeyPreview auf true setzt.

Lumpiluk 16. Mär 2009 18:39

Re: OnKeyDown funktionert nicht
 
Danke, das hat mein Problem im Grunde gelöst!
Allerdings funktioniert es noch nicht ganz, wenn ich pausiere... Vielleicht liegt's an 'was Anderem.

an Luckie:
Zitat:

Zitat von Lumpiluk
..., obwohl KeyPreview = True...


Edit: Hat sich erledigt. Man muss jetzt zum Pausieren auf einen Button klicken. Da habe ich das gleiche wie mit dem "Neues Spiel"-Button gemacht. Vielen Dank nochmal!

alleinherrscher 16. Mär 2009 18:50

Re: OnKeyDown funktionert nicht
 
Selbes Problem: Das PauseLabel erhält den Fokus. Du musst direkt nach dem PauseLabel.visible=True den Fokus wieder zurück an Form1 geben!

Lumpiluk 17. Mär 2009 19:41

Re: OnKeyDown funktionert nicht
 
Liste der Anhänge anzeigen (Anzahl: 1)
So, ich glaube, weitestgehend bin ich jetzt fertig. Hier ist das fertige Spiel. Gesteuert wird natürlich mit den Pfeiltasten.


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