OnEnter Ereignis [gelöst]

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Marc
Lazarusforum e. V.
Beiträge: 208
Registriert: Fr 11. Nov 2016, 14:09
OS, Lazarus, FPC: Linux Mint 20 (WinXP VBox)
CPU-Target: 64Bit
Wohnort: Schweiz

OnEnter Ereignis [gelöst]

Beitrag von Marc »

Hallo

Ich muss in einem 'Tedit' eine Eingabe machen. Diese soll nur gültig sein wenn ich mit Enter/Return bestätigt habe.
Wenn ich die Eingabe mit Enter bestätige komme ich aber auf den Event 'OnEditingDone'.
Dasselbe habe ich aber auch wenn 'Tedit' den Focus verliert, ist also für dieses Problem unbrauchbar.


Habe mir gedacht 'OnEnter' könnte vieleicht die Lösung sein.
In der Hilfe heist es das es ausgelöst wird wenn 'Tedit' den Focus erhält.
Und so funktioniert es auch.
Also müsste 'OnEnter' eigentlich 'OnFocus' heissen?

Gibt es einen Event der wirklich auf eine Eingabe mit Enter reagiert?


Version ist 1.8.4 auf Windows7
Zuletzt geändert von Marc am Mi 25. Jul 2018, 23:32, insgesamt 1-mal geändert.
Good code comes from experience, experience comes from bad code.

Benutzeravatar
kupferstecher
Beiträge: 418
Registriert: Do 17. Nov 2016, 11:52

Re: OnEnter Ereignis

Beitrag von kupferstecher »

Du kannst das Ereignis OnKeyDown verwenden.

Darin wird dir über die Variable Key mitgeteilt, welche Taste gedrückt wurde:

Code: Alles auswählen

uses LCLType
 
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  if key=VK_RETURN then begin
    //Werte übernehmen...
  end else if key=VK_ESCAPE then begin
    //Werte verwerfen
  end;
end;


Wenn du nicht willst, dass die Tasten weiter verarbeitet werden, z.B. du willst dass bei Enter nicht OnEditingDone ausgelöst wird, kannst du den mit key=0 den Tastenwert verwerfen.

Marc
Lazarusforum e. V.
Beiträge: 208
Registriert: Fr 11. Nov 2016, 14:09
OS, Lazarus, FPC: Linux Mint 20 (WinXP VBox)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: OnEnter Ereignis

Beitrag von Marc »

Danke für die schnelle Antwort

Habs gerade selbst gefunden (Google).
OnKeypress Habdler und dann 'if Key = #13 '
Wenn mann weis wie es geht ist's einfach.

Ist #13 irgendwie schlechter als VK_RETURN?
Key ist in meinem Beispiel nur ein Char bei Dir ein Word?
Good code comes from experience, experience comes from bad code.

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: OnEnter Ereignis

Beitrag von Socke »

Marc hat geschrieben:Ist #13 irgendwie schlechter als VK_RETURN?

Viele Menschen müssen bei #13 erst überlegen, welche Taste das ist. VK_RETURN ist das wesentlich schneller zu lesen und einzuordnen.

Marc hat geschrieben:Key ist in meinem Beispiel nur ein Char bei Dir ein Word?

Das sind zwei verschiedene Events. OnKeyDown gibt einen Word zurück; nicht jede Tast auf der Tastatus ist auch eine Zeichen (z.B. Funktionstasten).
OnKeyPress sehe ich sowieso als veraltet an, da hier nur ein 8-Bit langes Zeichen (ASCII/ANSI) verarbeitet werden kann. Willst du alle Unicode-Zeichen verarbeiten, nimm besser OnUTF8KeyPress (wobei das in diesem konkreten Anwendungsfall egal ist).
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Mathias
Beiträge: 6164
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: OnEnter Ereignis [gelöst]

Beitrag von Mathias »

Willst du alle Unicode-Zeichen verarbeiten, nimm besser OnUTF8KeyPress
Das stimmt generell sollte man diese verwenden. Nur das grosse Problem, dieses Ereignis ist sehr weit unten im Objektinspektor, so das man es übersieht, wen man es nicht kennt.
Man hätte es besser OnKeyPressUTF8 genannt, dann wäre es unterhalb von OnKeyPress gewesen. Aber dies jetzt nachträglich zu ändern geht natürlich nicht mehr.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Marc
Lazarusforum e. V.
Beiträge: 208
Registriert: Fr 11. Nov 2016, 14:09
OS, Lazarus, FPC: Linux Mint 20 (WinXP VBox)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: OnEnter Ereignis [gelöst]

Beitrag von Marc »

Danke für die vielen Antworten.
Muss das alles mal ausprobieren.
Im Moment reicht es mir die Return Taste zu 'sehen'.
Aber mit dem Essen kommt der Hunger. :-)
Good code comes from experience, experience comes from bad code.

Antworten