Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - OnKeyPress


Aceman - So 06.03.05 17:13
Titel: OnKeyPress
Kann mir jemand sagen wie das mit dem ereignis OnKeyPress geht.
Ich will jetzt z.B. das wenn ich die "enter" taste drücke dass
dann die die label1.Caption auf z.B. aktiviert unspringt

Also irgendwas mit Labe1.Caption ('Akriviert')
Aber wo stelle ich ein welche taste gedrückt werden soll usw.

Brauche Hilfe!! :?:


Moderiert von user profile iconKlabautermann: Topic aus Multimedia / Spiele / Grafik verschoben am Di 20.09.2005 um 21:58


wdbee - So 06.03.05 17:50


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
  case Key of
   'X': DoXAction;
   'Y': DoYAction;
   'Z': DoZAction;
  else
    DoDefaultAction;
  end;
end;


Karlson - So 06.03.05 17:51

Im OnKeyPress Event wird die Variable Key mit übergeben. In der wird gespeichert welche taste gedrückt wurde.
Ergo:


Delphi-Quelltext
1:
2:
3:
4:
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
 if key=#13 then label1.Caption := 'aktiviert';  // #13 = Enter.  // bspw. 'a' würde auch gehen.
end;


Aceman - Mo 07.03.05 19:34

Wo kann ich den nachgucken welche Zahl welche taste ist??


spaxxn - Di 08.03.05 12:14

http://www.torsten-horn.de/techdocs/ascii.htm <- hier zum beispiel


Born-to-Frag - Di 20.09.05 20:09

Es geht bei mir einfach nicht.. Ich hab es mit allen möglichkeiten Probiert


Delphi-Quelltext
1:
2:
3:
4:
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
 if key=#49 then Button1.Caption := 'test';
 end;


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);   
begin   
  case Key of   
   '1': Button1.Caption:='TEST';   
  end;   
end;


Es geht einfach nicht :'( :'( :'(
Irgendwelche Ideen? :D

greetz

Moderiert von user profile iconGausi: Code- durch Delphi-Tags ersetzt


GTA-Place - Di 20.09.05 20:11

Benutze OnKeyDown, statt OnKeyPress.


Born-to-Frag - Di 20.09.05 20:19

Es geht, nur das ist nicht ganz was ich meine :(
Das problem ist, das ich es in meinen Taschenrechner einfügen will, und dieser mehrere Panels hat. Ich glaube es würde gehen, wenn der taschenrechner überhaupt keine panels hätte, aber das ist ja nicht was ich möchte.

Also noch mal zum verständnis: Man soll z.B. 1 drücken können, egal "wo" man gerade beim Taschenrechner ist (z.B. gerade auf Panel1, Panel2, oder Edit1)

Ich habe es natürlich versucht mit Form1, aber das geht ja leider nicht :(:(:(

greetz


Lannes - Di 20.09.05 20:35

Hallo,

@GTA-Place: genau!

Dazu ein Auszug aus der Delphi-Hilfe:
Zitat:
Da der Parameter Key den Datentyp Char hat, registriert das Ereignis OnKeyPress das ASCII-Zeichen der gedrückten Taste. Tasten, die keinem ASCII-Char-Wert entsprechen (z.B. UMSCHALT oder F1), generieren kein Ereignis OnKeyPress. Tastenkombinationen (z.B. UMSCHALT+A) führen nur zu einem Ereignis OnKeyPress (in diesem Beispiel ergibt UMSCHALT+A den Key-Wert „A“, wenn die Feststelltaste deaktiviert ist). Soll auf Nicht-ASCII-Tasten oder Tastenkombinationen reagiert werden, verwenden Sie die Ereignisbehandlungsroutine für OnKeyDown oder OnKeyUp.


@Born-to-Frag: setz KeyPreview der Form auf True.


Born-to-Frag - Di 20.09.05 20:48

OK, thx Lannes, das hat jetzt geholfen!!
Aber jetzt noch ne blöde Frage, wo ich aber keinen neuen Threat anfangen brauch:
Wie kann ich KeyPreview der Form1 standardmäßig auf True setzten, damit ich OnKeyPress nutzen kann :)?

greetz


Born-to-Frag - Di 20.09.05 20:55

Habs schoon gelöst :D