AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Tastendruck Ausgeben

Ein Thema von MaToBe · begonnen am 15. Feb 2009 · letzter Beitrag vom 15. Feb 2009
Antwort Antwort
Seite 1 von 2  1 2      
MaToBe

Registriert seit: 2. Aug 2008
162 Beiträge
 
#1

Tastendruck Ausgeben

  Alt 15. Feb 2009, 17:28
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

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
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Tastendruck Ausgeben

  Alt 15. Feb 2009, 17:45
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
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
HaJo

Registriert seit: 28. Apr 2004
Ort: Würselen
140 Beiträge
 
Delphi 8 Enterprise
 
#3

Re: Tastendruck Ausgeben

  Alt 15. Feb 2009, 17:51
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:
procedure MeineForm.FormKeyPress(Sender: TObject; var Key: Char);
begin

   MeinEditFeld.Text := Key; // <- Deine Ausgabe der gedrückten Taste an beliebiger Stelle

end;
Man kann aber auch die Tastendrücke auswerten
Hans-Joachim Brosius
  Mit Zitat antworten Zitat
MaToBe

Registriert seit: 2. Aug 2008
162 Beiträge
 
#4

Re: Tastendruck Ausgeben

  Alt 15. Feb 2009, 18:18
Delphi-Quellcode:
procedure TfPlayerSteuerung.edtLinksKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
    edtLinks.Text := inttostr(Key);
    vKey := inttostr(Key);
end;
bei dieser Procedure kommt für E jetzt die Zahl 69 heraus.

Heißt das, dass wenn ich dann beispielsweise abfrage

Delphi-Quellcode:
procedure TfPlayerSteuerung.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
    case key of
         VK_ + vKey : ShowMessage('Hallo');
     end;
end;
dass dann die ShowMessage kommt? Irgendwas klappt da nämlich noch nicht ganz.
  Mit Zitat antworten Zitat
HaJo

Registriert seit: 28. Apr 2004
Ort: Würselen
140 Beiträge
 
Delphi 8 Enterprise
 
#5

Re: Tastendruck Ausgeben

  Alt 15. Feb 2009, 18:29
Wie SirThornberry schon angemerkt hat:
Zitat:
m 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.
Schau doch mal nach den Funktionen "ORD" oder "CHR"
Hans-Joachim Brosius
  Mit Zitat antworten Zitat
MaToBe

Registriert seit: 2. Aug 2008
162 Beiträge
 
#6

Re: Tastendruck Ausgeben

  Alt 15. Feb 2009, 18:58
Zitat von MaToBe:
Delphi-Quellcode:
procedure TfPlayerSteuerung.edtLinksKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
    edtLinks.Text := inttostr(Key);
    vKey := inttostr(Key);
end;

Delphi-Quellcode:
procedure TfPlayerSteuerung.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
    case key of
         VK_ + vKey : ShowMessage('Hallo');
     end;
end;
dass dann die ShowMessage kommt? Irgendwas klappt da nämlich noch nicht ganz.
Mit der ersten Prozedure will ich die Taste speichern.

Mit der 2. Prozedure will ich erreichen, dass wenn die Taste gedrükt wird, eine ShowMessage kommt.

Nur leider geht das
Delphi-Quellcode:
case key of
         VK_ + vKey : ShowMessage('Hallo');
     end;
nicht =(
  Mit Zitat antworten Zitat
HaJo

Registriert seit: 28. Apr 2004
Ort: Würselen
140 Beiträge
 
Delphi 8 Enterprise
 
#7

Re: Tastendruck Ausgeben

  Alt 15. Feb 2009, 19:41
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.
Hans-Joachim Brosius
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#8

Re: Tastendruck Ausgeben

  Alt 15. Feb 2009, 20:24
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:
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;
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.

Gruß Hawkeye
  Mit Zitat antworten Zitat
MaToBe

Registriert seit: 2. Aug 2008
162 Beiträge
 
#9

Re: Tastendruck Ausgeben

  Alt 15. Feb 2009, 20:35
Zitat von Hawkeye219:
Hallo MaToBe,

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".
genau das hatte ich vor, wusste nur nich das es bereits eine vorgefertigte Komponente gibt.

Habe es bereits so:
Delphi-Quellcode:
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;
aber deine lösung ist besser danke =)
  Mit Zitat antworten Zitat
MaToBe

Registriert seit: 2. Aug 2008
162 Beiträge
 
#10

Re: Tastendruck Ausgeben

  Alt 15. Feb 2009, 21:10
Muss mich leider doch noch mal melden.

Delphi-Quellcode:
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;
1. Sagt er mir bei
Key := {Menus.}ShortCut(Msg.CharCode, KeyDataToShiftState(Msg.KeyData)); "undefinierter Bezeichner ShortCut" - und ich weiß auch nicht was diese Zeile machen soll ?!?

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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:24 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