![]() |
Auf Pfeiltasten reagieren
Hallo Leute,
Bin gerade dabei ein Spiel zu proken welches auf die pfeiltasten (zum bewegen der grafik) reagieren soll. Nur leider funktioniert
Delphi-Quellcode:
nicht.
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin if Key = Ord('a') then ShowMessage('bla'); end; falls der obenstehende code total falsch is, dann bitte nicht beachten ;-) [edit=sakura] [delphi]-Tags gesetzt. Mfg, sakura[/edit] |
Re: Auf Pfeiltasten reagieren
Hier:
Delphi-Quellcode:
Musst das ganze einfach noch auf deine Bedürfnisse anpassen.
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState); begin if key = vk_left then ShowMessage('Hallo'); end; :hi: |
Re: Auf Pfeiltasten reagieren
Ein Hallöle von
![]() Ja, mit FormKeyPress geht das nicht, aber in FormKeyUp oder FormKeyDown geht das. Siehe "OnKeyUp (Ereignis von TWinControl)" und "Virtuelle Tastencodes" in der OH. http://www.delphipraxis.net/images/common/divider.jpg ![]() ![]() ![]() |
Re: Auf Pfeiltasten reagieren
:hi:
nimm doch OnKeyDown :
Delphi-Quellcode:
, dann kannst du die
procedure TMainForm.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState); begin if key = VK_UP then ... end; ![]() mfg Tobias |
Re: Auf Pfeiltasten reagieren
Ach ja, das andere geht natürlich auch nicht.
Zitat:
Delphi-Quellcode:
http://www.delphipraxis.net/images/common/divider.jpg
Procedure TForm1.FormKeyPress(Sender: TObject; Var Key: Char);
Begin If Key = 'a' Then ShowMessage('Das Kleine a wurde gedrückt'); End; ![]() ![]() ![]() |
Re: Auf Pfeiltasten reagieren
danke fuer die vielen antworten (man ging das schnell :-)
aber irgendwie will der bei mir nicht ?!
Code:
was mach ich falsch ?
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type TForm1 = class(TForm) private { Private-Deklarationen } public Procedure FormKeyPress(Sender: TObject; Var Key: Char); { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} Procedure TForm1.FormKeyPress(Sender: TObject; Var Key: Char); Begin If Key = 'a' Then ShowMessage('Das Kleine a wurde gedrückt'); End; end. :wall: |
Re: Auf Pfeiltasten reagieren
Moin Peter,
erst einmal herzlich willkommen hier in der Delphi-PRAXiS. Ich nehme mal an, dass Du nicht nur ein leeres Formular sondern auch noch einige sonstige Komponenten auf demselben hast. Dies hat zur Folge, dass der Tastendruck an die jeweilige Komponente, die den Tastaturfokus hat weitergeleitet wird, und im OnKeyPress des Formulares kommt es dann nicht mehr an. Um das OnKeyPress des Formulares trotzdem verwenden zu können, musst Du noch die Eigenschaft KeyPreview auf true setzen. |
Re: Auf Pfeiltasten reagieren
Falsche Stelle:
Code:
Tipp: Zum Erstellen des Ereignisses/der Prozedur einfach im OI in das leere Feld neben OnKeyPress klicken.
[b]type[/b]
TForm1 = [b]class[/b](TForm) [color=red][b]Procedure[/b] FormKeyPress(Sender: TObject; [b]Var[/b] Key: Char);[/color] [b]private[/b] { Private-Deklarationen } [b]public[/b] [s][b]Procedure[/b] FormKeyPress(Sender: TObject; Var Key: Char);[/s] { Public-Deklarationen } [b]end[/b]; Und auf Chris hören. http://www.delphipraxis.net/images/common/divider.jpg ![]() ![]() ![]() |
Re: Auf Pfeiltasten reagieren
ich danke euch!
manchmal hat man halt doch ein brett vorm kopf (oder 2 oder 3) ;-) also herzlichen dank! bis zum naechsten mal, Peter |
AW: Auf Pfeiltasten reagieren
Liste der Anhänge anzeigen (Anzahl: 1)
Entschuldigung, wenn ich jetzt noch mal diesen Eintrag von vor über 10 Jahren erweitern muss,
aber ich stehe hier grade vor einem mir unerklärlichen Problem: Ich hab alles wie erklärt abgeschrieben und bei mir startet das Programm auch, aber es passiert einfach nichts, wenn ich die belegte Taste drücke. (Ich habs schon mit verschieden Tasten versucht) |
AW: Auf Pfeiltasten reagieren
Hast Du KeyPreview vom Formular im Objektinspektor auf True gesetzt?
|
AW: Auf Pfeiltasten reagieren
Ich glaube eher er hat alles blind abgeschrieben und hat nun tote, nicht funktionierende Fake-Events in seinem Code.
|
AW: Auf Pfeiltasten reagieren
Zitat:
Wo kann ich das ändern? |
AW: Auf Pfeiltasten reagieren
Ich denke auch dass die OnKeyDown-Zuweisung fehlt.
Einfach "Form1" markieren, dann im Objektinspektor unter dem Reiter "Ereignisse" einen beherzten Doppelklick in die leere Zeile bei "OnKeyDown". Dann sollte das Event zugewiesen sein. "KeyPreview" muss auch auf True stehen. |
AW: Auf Pfeiltasten reagieren
Wenn Du es nicht im Objektinsteptor ändern willst, dann musst Du das irgendwo im Quelltext machen. Geeignet wäre da wohl das FormCreate.
Sinnvollerweise solltest Du aber im Objektinspektor den Vorgabewert False auf True ändern. |
AW: Auf Pfeiltasten reagieren
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe die KeyPreview jetzt auf True gesetzt und jetzt sieht der Code so aus:
Es tut sich aber trotzdem nichts wenn ich die Taste drücke :( |
AW: Auf Pfeiltasten reagieren
Nimm das KeyUp-Event und nicht das KeyDown:
Delphi-Quellcode:
procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin if Key = Ord(VK_UP) then begin Key := 0; ShowMessage('Hi'); end; end; |
AW: Auf Pfeiltasten reagieren
Ändere mal bitte die Routine FormKeyDown und füge am Anfang ein
Delphi-Quellcode:
ein. Was wird beim Betätigen welcher Taste ausgegeben?
ShowMessage(IntToStr(key));
Wird die Meldung überhaupt angezeigt? Kannst Du mal mit dem Debugger prüfen, ob die Routine überhaupt aufgerufen wird? |
AW: Auf Pfeiltasten reagieren
Ich glaube KeyDown wird nie aufgerufen wenn irgendein anderes Control außer dem Formular den Focus hat.
Habe es eben schnell getestet und so gesehen, dass man besser KeyUp nimmt statt KeyDown. |
AW: Auf Pfeiltasten reagieren
Und wenn jemand das mit KeyPreview immer wieder überliest, dann kann man auch nicht viel helfen.
Aber vorallem wurde ständig das mit dem zugewiesenen Event vergessen. :zwinker: |
AW: Auf Pfeiltasten reagieren
Zitat:
|
AW: Auf Pfeiltasten reagieren
Hatte mein Edit vergessen abzusenden, nachdem ich den ersten Satz schon zu früh absendete. :oops:
Nja, das hatte er schon oft genug überlesen. Mal sehn, wie lange es mit dem nicht zugewiesenen Event dauert. |
AW: Auf Pfeiltasten reagieren
Zitat:
|
AW: Auf Pfeiltasten reagieren
Vor wenigen Wochen gab es doch schon einmal so ein Thema hier mit genau demselben Problem.
Dabei ging es darum Shapes per Tastendruck zu verschieben. Leider finde ich das Thema nicht wieder. KeyUp hat nämlich einen Nachteil... beim gedrückt-halten der Taste passiert bei dir nichts wenn du KeyUp verwendet. Denn es wird ja erst ausgelöst wenn der Key... losgelassen wird. |
AW: Auf Pfeiltasten reagieren
Zitat:
|
AW: Auf Pfeiltasten reagieren
Zitat:
![]() |
AW: Auf Pfeiltasten reagieren
...
|
AW: Auf Pfeiltasten reagieren
Hallo ...
ich möchte mich ebenfalls zum Thema "auf Tasteneingabe reagieren melden". Ich habe ebenfalls das Problem, dass ich auf cursor- links und rechts in meinem Programm reagieren will. Durch Versuche habe ich herausgefunden, dass bei keyPreview:=true; nur dann alle Tasteneingaben weiter gegeben werden, wenn in TForm in keinem Objekt der Focus gesetz ist. Den Focus in TForm für "alle Objekte ausschalten" (ActiveControl:=none; gibt es nicht), weil Windows es nicht zulässt. Zufälligerweise habe ich festgestellt, dass wenn ich in TForm den focus auf das letzte Objekt in der Reihenfolge setze und die cursor Tasten drücke die cursor Eingaben weiter gegeben werden. Der focus ist aus TForm anschließend von allen Objekten verschwunden. Das Objekt mit dem Focus ist ein TlabeledEdit Objekt. Grüße Jürgen |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:56 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