Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi OnExit eines TEdits nicht auslösen, wenn Abbruch... (https://www.delphipraxis.net/102511-onexit-eines-tedits-nicht-ausloesen-wenn-abbruch.html)

bingo72 30. Okt 2007 09:56


OnExit eines TEdits nicht auslösen, wenn Abbruch...
 
Hallo Leute!!

Gibt es eine Möglichkeit in einem OnExit-Event eines TEdits festzustellen, wohin mein Focus wandert?? Das Edit soll keine Plausibilitätsprüfungen durchführen, wenn 'Abbrechen'-Button gedrückt wurde.
In der Regel wird aber OnExit-Event immer vor dem Button-OnClick-Event ausgeführt...das ist momentan mein Problem!! Damit hilft mir auch das Setzen einer Bool-Variable im OnClick des Buttons nichts...

ModalResult (es handelt sich um ein modales Fenster) ist zu diesem Zeitpunkt noch nicht belegt...reagiert innerhalb des OnExit-Event zumindest nicht, wenn ich 'Abbrechen' drücke!!

Hat jemand eine Idee??

Deep-Sea 30. Okt 2007 10:00

Re: OnExit eines TEdits nicht auslösen, wenn Abbruch...
 
Das wird so nicht ganz gehen. Man denke an das MaskEdit, wenn man etwas ungültiges eingegeben hat und den Fokus wechselt, kommt eine Fehlermeldung. In dieser steht, dass man auf Esc drücken soll, um die Änderungen rückgängig zu machen. Also wäre so etwas wohl deine Lösung :-D
Oder du führst die Prüfung des Edits erst durch, wenn der Benutzer auf den "Ok"-Button etc. geklickt hat ...

raiguen 30. Okt 2007 10:18

Re: OnExit eines TEdits nicht auslösen, wenn Abbruch...
 
Zitat:

Zitat von Deep-Sea
Oder du führst die Prüfung des Edits erst durch, wenn der Benutzer auf den "Ok"-Button etc. geklickt hat ...

Genau so mache ich es auch, um die von bingo72 geschilderten 'Probleme' zu vermeiden...

marabu 30. Okt 2007 11:42

Re: OnExit eines TEdits nicht auslösen, wenn Abbruch...
 
Hallo Thomas,

Zitat:

Zitat von bingo72
... Das Edit soll keine Plausibilitätsprüfungen durchführen, wenn 'Abbrechen'-Button gedrückt wurde. ...

wird der Button durch ein explizites oder implizites Tastenkürzel gedrückt, dann wird der Dialog geschlossen, ohne dass die OnExit-Routine der TEdit-Komponente durchlaufen wird. Dein Problem tritt doch nur auf, wenn der Benutzer den Button per Tabulator fokusiert und dann ist das auch in Ordnung - finde ich.

Freundliche Grüße

bingo72 30. Okt 2007 11:46

Re: OnExit eines TEdits nicht auslösen, wenn Abbruch...
 
Hallo Achim!!

Gibt es da eine Möglichkeit im OnExit-Event einen 'Parameter' oder so ähnlich abzufragen, welcher nur gesetzt wird, wenn zuvor die 'Abbrechen'-Taste gedrückt wurde??
Dann wäre mein Problem gelöst...

Deep-Sea 30. Okt 2007 12:02

Re: OnExit eines TEdits nicht auslösen, wenn Abbruch...
 
Zitat:

Zitat von bingo72
Hallo Achim!!

Gibt es da eine Möglichkeit im OnExit-Event einen 'Parameter' oder so ähnlich abzufragen, welcher nur gesetzt wird, wenn zuvor die 'Abbrechen'-Taste gedrückt wurde??
Dann wäre mein Problem gelöst...

Nein. Das OnClick Event des Buttons kommt erst nach dem OnExit des Edits. Logischerweise.
Wie gesagt, ggf. solltest du erst beim Klick auf den Ok-Button prüfen...

marabu 30. Okt 2007 13:02

Re: OnExit eines TEdits nicht auslösen, wenn Abbruch...
 
Hallo Thomas,

Zitat:

Zitat von bingo72
Gibt es da eine Möglichkeit im OnExit-Event einen 'Parameter' oder so ähnlich abzufragen, welcher nur gesetzt wird, wenn zuvor die 'Abbrechen'-Taste gedrückt wurde?? ...

klar, wenn du es vom Design deiner Anwendung her brauchst:

Delphi-Quellcode:
procedure TTestDialog.EditExit(Sender: TObject);
begin
  if Screen.ActiveControl = Button
    then Exit
    else Validate(Sender);
end;
Freundliche Grüße

Deep-Sea 30. Okt 2007 13:29

Re: OnExit eines TEdits nicht auslösen, wenn Abbruch...
 
Zitat:

Zitat von marabu
Hallo Thomas,

Zitat:

Zitat von bingo72
Gibt es da eine Möglichkeit im OnExit-Event einen 'Parameter' oder so ähnlich abzufragen, welcher nur gesetzt wird, wenn zuvor die 'Abbrechen'-Taste gedrückt wurde?? ...

klar, wenn du es vom Design deiner Anwendung her brauchst:

Delphi-Quellcode:
procedure TTestDialog.EditExit(Sender: TObject);
begin
  if Screen.ActiveControl = Button
    then Exit
    else Validate(Sender);
end;
Freundliche Grüße

Das würde nicht funktionieren. Der Button kann auch aktiv sein, ohne das man darauf klickt! :stupid:


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:13 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