![]() |
Tastendruck Ausgeben
Guten Tag,
ich bins mal wieder, tut mir leid das ich immer so viele Fragen hab aber ich weiß auch nie genau nach was ich suchen soll da die Suche mir nie die ganze Wahrheit offenbart :D Also ich bräuchte eine Function, die ich in die OnKeyPress Prozedur reinschreiben kann. Diese Function sollte mir dann genau die Taste ausgeben, die als letztes gedrückt wurde und in ein Edit-Feld schreiben. Hatte mir das so gedacht: - Der Benutzer drückt auf das Edit-Feld - Der Benutzer drückt als Beispiel "E" - "E" steht im Edit-Feld und ist die neue Taste um meine Spielschlange zu bewegen. Ich habe schon "aSyncKeyPress" oder so gefunden, weiß aber leider nicht genau wie das funktioniert und ob das das richtige ist. Über Anregungen und Lösungen freu ich mich. Viele Grüße, MaToBe |
Re: Tastendruck Ausgeben
Im OnKeyPress bekommst du nicht die Taste welche gedrückt wurde sondern das Zeichen welches daraus resultiert. Im OnKeyDown hingegen bekommst du die Taste welche gedrückt ist. Unabhängig davon verschweigst du uns worin genau dein Problem liegt.
[Edit]Die Taste welche gedrückt wurde bzw. das resultierende Zeichen wird der in der entsprechenden Ereignisprocedure (onKeyPress/OnKeyDown) übergeben |
Re: Tastendruck Ausgeben
Hallo,
Du möchtest als das zurückgelieferte Zeichen - bei "E" also ein "E" Im Formular die Eigenschaft "KeyPreview" auf TRUE stellen und dann das KeyPress Ereignis auswerten:
Delphi-Quellcode:
Man kann aber auch die Tastendrücke auswerten :-)
procedure MeineForm.FormKeyPress(Sender: TObject; var Key: Char);
begin MeinEditFeld.Text := Key; // <- Deine Ausgabe der gedrückten Taste an beliebiger Stelle end; |
Re: Tastendruck Ausgeben
Delphi-Quellcode:
bei dieser Procedure kommt für E jetzt die Zahl 69 heraus.
procedure TfPlayerSteuerung.edtLinksKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState); begin edtLinks.Text := inttostr(Key); vKey := inttostr(Key); end; Heißt das, dass wenn ich dann beispielsweise abfrage
Delphi-Quellcode:
dass dann die ShowMessage kommt? Irgendwas klappt da nämlich noch nicht ganz.
procedure TfPlayerSteuerung.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState); begin case key of VK_ + vKey : ShowMessage('Hallo'); end; end; |
Re: Tastendruck Ausgeben
Wie SirThornberry schon angemerkt hat:
Zitat:
|
Re: Tastendruck Ausgeben
Zitat:
Mit der 2. Prozedure will ich erreichen, dass wenn die Taste gedrükt wird, eine ShowMessage kommt. Nur leider geht das
Delphi-Quellcode:
nicht =(
case key of
VK_ + vKey : ShowMessage('Hallo'); end; |
Re: Tastendruck Ausgeben
Dann bring doch alles im Ereignis KeyPress unter.
Bei Dir geht es wohl wegen der Case-Abfrage nicht. Laß die mal weg, dann sollte ShowMessage gehen. Ich sehe aber keinen Sinn darin, mehrere Ereignisse zu benutzen. Bei einem gedrückten 'h' liefert dort Key ='h' und ord(Key) den ASCII-Code 72, also den Ordinalwert der ASCII-Tabelle. |
Re: Tastendruck Ausgeben
Hallo MaToBe,
hier ist ein anderer Ansatz: 1. Lege eine THotKey-Komponente (Register "Win32") auf dein Formular, stelle bei deren Eigenschaft InvalidKeys alle Schalter auf den Wert False und gib der Komponente den Namen "HotKey". 2. Verbinde die folgende Routine mit dem Ereignis OnShortCut deines Formulars:
Delphi-Quellcode:
Wenn du die Applikation nun startest, kannst du nach einem Mausklick in das HotKey-Feld eine (fast) beliebige Taste oder Tastenkombination drücken, die dann als neuer Hotkey gespeichert wird. Jedes weitere Drücken der gelernten Tastenkombination sollte den MessageDialog erscheinen lassen. Durch das Drücken der ESC-Taste im HotKey-Feld kannst du die gespeicherte Tastenkombination löschen.
procedure TForm1.FormShortCut(var Msg: TWMKey; var Handled: Boolean);
var Key : TShortCut; begin Key := {Menus.}ShortCut(Msg.CharCode, KeyDataToShiftState(Msg.KeyData)); if (Key = HotKey.HotKey) then begin ShowMessage ('Gotcha!'); Handled := True; end; end; Gruß Hawkeye |
Re: Tastendruck Ausgeben
Zitat:
Habe es bereits so:
Delphi-Quellcode:
aber deine lösung ist besser danke =)
procedure TfPlayerSteuerung.btnFertigClick(Sender: TObject);
begin if (edtLinks.Text <> '') and (edtRechts.Text <> '') then begin fMain.HotKeyRegister; fMain.Enabled := true; fPlayerSteuerung.Close; end else ShowMessage('Bitte legen sie die Steuerung fest.'); end; procedure TfPlayerSteuerung.edtLinksKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin fMain.tempLeft := Key; edtLinks.Text := inttostr(Key); end; procedure TfMain.HotKeyRegister; begin case ActualPlayerSteuerung of 1:begin RegisterHotKey(Handle, 1, 0, tempLeft); RegisterHotKey(Handle, 2, 0, tempRight); end; end; |
Re: Tastendruck Ausgeben
Muss mich leider doch noch mal melden.
Delphi-Quellcode:
1. Sagt er mir bei
procedure TfMain.FormShortCut(var Msg: TWMKey; var Handled: Boolean);
var Key : TShortCut; begin Key := {Menus.}ShortCut(Msg.CharCode, KeyDataToShiftState(Msg.KeyData)); if (Key = fPlayerSteuerung.HkP1Left.HotKey) then begin ShowMessage ('Gotcha!'); Handled := true; end; end;
Delphi-Quellcode:
"undefinierter Bezeichner ShortCut" - und ich weiß auch nicht was diese Zeile machen soll ?!?
Key := {Menus.}ShortCut(Msg.CharCode, KeyDataToShiftState(Msg.KeyData));
2. Tut er nichts. - Kein "Gotcha!" Die Komponente HotKey liegt auf dem Form "fPlayerSteuerung", die ShortCut Prozedure ist auf der Form fMain. fPlayerSteuerung ist einfach ein kleins Fensterchen, da ich die Eingabe der Hotkeys nicht auf die Hauptform legen wollte. |
Re: Tastendruck Ausgeben
Die Funktion ShortCut befindet sich in der Unit Menus. Mit dem eingestreuten Kommentar wollte ich dich darauf hinweisen, dass du die USES-Anweisung entsprechend erweitern musst. ShortCut baut aus dem Inhalt des Nachrichten-Records Msg ein Tastenkürzel zusammen, das anschließend in der Variablen Key abgelegt wird.
Wie hast du eigentlich festgestellt, dass das Programm "nichts tut"? Du konntest den Quelltext doch aufgrund der Fehlermeldung gar nicht übersetzen. Ist die Methode FormShortCut mit dem Ereignis OnShortCut des Formulars fMain verbunden? Gruß Hawkeye |
Re: Tastendruck Ausgeben
Zitat:
Delphi-Quellcode:
einfach auskommentiert habe :D
Key := {Menus.}ShortCut(Msg.CharCode, KeyDataToShiftState(Msg.KeyData));
nicht haun bitte =P Jetzt läufts supper, danke schön =) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:46 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