![]() |
Delphi-Version: 5
Mehrere Tasten in einer Procedure abfragen?
Hallo,
ich habe eine Form erstellt und will von einem Textfeld in das nächste wechseln mit Enter, Tab oder Mausklick. Mit Enter das funktioniert super. Jetzt geht leider meine Tab-Taste nicht mehr. Ist es möglich mit folgender Procedure mehrere Tasten abzufragen? procedure TForm3.Edit13KeyPress(Sender: TObject; var Key: Char); begin if Key=#13 Key=#01 then begin try mo2x:=StrToFloat(Edit13.Text); Edit14.SetFocus; mo2x:=mo2x; except ShowMessage('Please enter only Numbers!'); Edit13.Clear; Edit13.SetFocus; end; end; end; end; Vielen Dank für eure Hilfe. Bitte etwas Nachsicht, ich habe erst angefangen mit Delphi zu programmieren. Gruss Matthias |
AW: Mehrere Tasten in einer Procedure abfragen?
Z.B. mit case geht sowas ganz einfach:
Delphi-Quellcode:
case Key of
#13, #27, #255: MachIrgendwas; end; |
AW: Mehrere Tasten in einer Procedure abfragen?
Boolesche Operatoren und Klammern verwenden?
Das sollte aber in jedem billigen Delphi-Tutorial genannt sein.
Delphi-Quellcode:
if (Key=#13) or (Key=#01) then
if Key in [#13, #01] then if CharInSet(Key, [#13, #01]) then // Korrekte Behandlung für UnicodeDelphis |
AW: Mehrere Tasten in einer Procedure abfragen?
Hallo himitsu,
ich habe deinen Vorschlag mal ausprobiert.
Code:
Leider nimmt das Programm die Tab-Taste und die linke Maustaste nicht.
procedure TForm3.Edit1KeyPress(Sender: TObject; var Key: Char);
begin if Key in [#13, #01, #09] then begin try ol:=StrToFloat(Edit1.Text); Edit2.SetFocus; ol:=ol; except ShowMessage('Please enter only Numbers!'); Edit1.Clear; Edit1.SetFocus; end; end; end; Mit Enter kann ich die Werte übernehmen. Habe ich noch einen Fehler in der Procedure? Danke. |
AW: Mehrere Tasten in einer Procedure abfragen?
Verlagere die Prüfung einmal ins OnExit.
|
AW: Mehrere Tasten in einer Procedure abfragen?
Hast Du Keypreview auf true gesetzt?
Mavarik |
AW: Mehrere Tasten in einer Procedure abfragen?
Zitat:
Haltepunkt auf
Delphi-Quellcode:
und nachsehn.
if Key in [#13, #01, #09] then
|
AW: Mehrere Tasten in einer Procedure abfragen?
Hallo,
ich habe es gerade ausprobiert. Mit #09 und #01 kommt keine Antwort. Die Codes habe ich von hier ![]() Gibt es eine andere Möglichkeit? Vielen Dank. |
AW: Mehrere Tasten in einer Procedure abfragen?
Hallo,
wenn Du mit virtuellen Tastencodes arbeitest, musst du die Ereignisse OnKeyDown und/oder OnKeyUp benutzen. Diese Tastencodes funktionieren so nicht (richtig) im OnKeyPress-Event. Da bekommst Du z.B. nicht mit, ob mit der Maus ins Editfeld geklickt wurde. Tab ist nicht #09 sondern nur #9. |
AW: Mehrere Tasten in einer Procedure abfragen?
Hallo,
auch mit OnKeyDown und/oder OnKeyUp, bekomme ich nicht das gewünschte Ergebnis. Ich habe eine Matrix von 8 Textfeldern, über die ich Zahlen eingebe. Mit Enter oder Tab oder linke Maustaste soll in das nächste Feld gesprungen werden. Wenn ich nur Enter nehme, funktioniert es. Mit Key=VK_TAB Key=#9 geht es nicht. Hat noch jemand eine Idee? Danke für eure Hilfe. Gruss Matthias |
AW: Mehrere Tasten in einer Procedure abfragen?
für Tab ins OnShortCut des Forms hängen
Delphi-Quellcode:
procedure TForm2.FormShortCut(var Msg: TWMKey; var Handled: Boolean);
var KeyCode: TShortCut; begin KeyCode := Menus.ShortCut(Msg.CharCode, KeyDataToShiftState(Msg.KeyData)); case KeyCode of VK_TAB: ShowMessage ('tab'); else Exit; end; Handled := True; end; |
AW: Mehrere Tasten in einer Procedure abfragen?
Ne schnellere Lösung wäre diese (TApplicationEvent aus der Registerkarte "Zusätzlich"):
Delphi-Quellcode:
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean); begin if msg.message = WM_KEYDOWN then begin if msg.wParam = 9 then begin ShowMessage('Tab wurde gedrückt!'); end; end; end; |
AW: Mehrere Tasten in einer Procedure abfragen?
Ich hätte eher an sowas gedacht (Events sind allen betroffenen Edits per OI zugewiesen):
Delphi-Quellcode:
procedure TfrmTest.Edit1Exit(Sender: TObject);
var Edit: TEdit; dummy: integer; begin Edit := Sender as TEdit; if (Edit.Text <> '') then if not TryStrToInt(Edit.Text, dummy) then begin ShowMessage('Bitte nur Zahlen eintragen'); Edit.SetFocus; end; end; procedure TfrmTest.Edit1KeyPress(Sender: TObject; var Key: Char); begin if Key = #13 then Perform(WM_NEXTDLGCTL, 0, 0); end; |
AW: Mehrere Tasten in einer Procedure abfragen?
OnKeyPress + KeyPreview = True
Delphi-Quellcode:
if key = #13 then
begin //Enter key: TEdit, oder auch mehr... if (ActiveControl.ClassType = TEdit) then begin Key := #0; Perform(WM_NEXTDLGCTL, 0, 0); end; end; |
AW: Mehrere Tasten in einer Procedure abfragen?
Danke für eure Hilfe.
Ich habe das ganze jetzt so gelöst.
Delphi-Quellcode:
Gruß
procedure TForm3.Edit1KeyPress(Sender: TObject; var Key: Char);
begin if (Key=#13) then Edit2.SetFocus; end; procedure TForm3.Edit1Exit(Sender: TObject); begin try ol:=StrToFloat(Edit1.Text); except ShowMessage('Please enter only Numbers!'); Edit1.Clear; Edit1.SetFocus; end; end; Matthias |
AW: Mehrere Tasten in einer Procedure abfragen?
Du könntest auch gleich
![]() |
AW: Mehrere Tasten in einer Procedure abfragen?
Dem Detlef stimme ich vollkommen zu.
Beim Debuggen breitet soein sinnloser Try-Except-Missbrauch richtig viel Freude. :wall: Zitat:
aber nun darf ich alles neu eingeben, nur weil jemand so nett war alles zu löschen? |
AW: Mehrere Tasten in einer Procedure abfragen?
Sehe ich auch so, SelectAll statt Clear wäre evtl. benutzerfreundlicher.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21: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-2025 by Thomas Breitkreuz