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 Hilfe bei onExit-Ereignis (https://www.delphipraxis.net/55755-hilfe-bei-onexit-ereignis.html)

Grolle 26. Okt 2005 12:26


Hilfe bei onExit-Ereignis
 
Hallo!
Ich habe einige Editfelder auf einer Form liegen. Diese werden im onExit auf
ihre Korrektheit geprüft. Das passiert aber nicht, wenn ich diese übers Mainmenü
speichere (der Fokus bleibt erhalten). Wie kann ich das ändern? Hier mal nen
onExit-Ereigniss:
Delphi-Quellcode:
procedure TForm1.Edit16Exit(Sender: TObject);
begin
try
  if (StrToInt(Edit16.Text)< 200) and not (StrToInt(Edit16.Text)= 0)then
    begin
      MessageDlg(' Guthaben muss zwischen 200 und 999 oder bei 0 liegen!  ' + #13#10 +
                 ' Bitte korrigieren Sie die Eingabe!  ', mtError, [mbOK], 0);
      ActiveControl := Edit16;
    end;
except
  on EConvertError do
    Edit16.Text := '000';
  end;
end;

Phistev 26. Okt 2005 12:45

Re: Hilfe bei onExit-Ereignis
 
Führ beim Abspeichern doch noch einmal die gesamten Tests durch, entweder direkt oder durch Aufrufen der Methoden. Das dürfte am Einfachsten sein.

Grolle 26. Okt 2005 12:55

Re: Hilfe bei onExit-Ereignis
 
Das habe ich mir auch gedacht. Wenn ich allerdings OnExit
vor dem Speichern auslöse, wird der Focus zurückgesetzt (richtig),
aber der Savdialog wird auch runtergerattert (soll er dann aber
nicht). :gruebel:

sh17 26. Okt 2005 12:57

Re: Hilfe bei onExit-Ereignis
 
Das wirst Du wohl um eine zentrale Prüf-Prozedur nicht herum kommen. Die ganzen OnExists kannst Du Dir dann sparen.
Wäre dann auch etwas sauberer programmiert.

Grolle 26. Okt 2005 13:28

Re: Hilfe bei onExit-Ereignis
 
Das Problem ist, das die ganzen OnExits auf verschiedene Werte überprüft werden,
oder habe ich dich da falsch verstanden?

sh17 26. Okt 2005 13:33

Re: Hilfe bei onExit-Ereignis
 
Ja

Die Codes aller OnExits in eine Procedure packen und beim Speichern aufrufen

Delphi-Quellcode:
procedure TForm1.CheckInput;
begin
try
  if (StrToInt(Edit16.Text)< 200) and not (StrToInt(Edit16.Text)= 0)then
    begin
      MessageDlg(' Guthaben muss zwischen 200 und 999 oder bei 0 liegen!  ' + #13#10 + 
                 ' Bitte korrigieren Sie die Eingabe!  ', mtError, [mbOK], 0);
      ActiveControl := Edit16;
    end;
except
  on EConvertError do
    Edit16.Text := '000';
  end;

  //und so weiter

end;

Grolle 26. Okt 2005 13:41

Re: Hilfe bei onExit-Ereignis
 
Werde ich testen. THX!

Grolle 30. Okt 2005 00:40

Re: Hilfe bei onExit-Ereignis
 
Jetzt komme ich irgendwie nicht weiter. Die Funktion sieht jetzt so aus:
Delphi-Quellcode:
function TForm1.CheckInput : boolean;
begin
  if Edit15.Text = '' then
    begin
      Edit15.Text := '--.00:00';
      Result := false;
    end
  else
    Result := true;
try
  if (StrToInt(Edit16.Text)< 200) and not (StrToInt(Edit16.Text)= 0)then
    begin
      MessageDlg(' Guthaben muss zwischen 200 und 999 oder bei 0 liegen!  ' + #13#10 +
                 ' Bitte korrigieren Sie die Eingabe!  ', mtError, [mbOK], 0);
      ActiveControl := Edit16;
      Result := false;
    end
  else
    Result := true;
except
  on EConvertError do
    Edit16.Text := '000';
  end;
try
  if not (StrToInt(Edit19.Text) in [05..99]) then
    begin
      MessageDlg(' Die SMS-Wiederholzeit muss zwischen 05 und 99 liegen!  ' + #13#10 +
                 ' Bitte korrigieren Sie die Eingabe!  ', mtError, [mbOK], 0);
      ActiveControl := Edit19;
      Result := false;
    end
  else
    Result := true;
except
  on EConvertError do
    Edit19.Text := '05';
  end;
end;
Der Aufruf erfolg so:
Delphi-Quellcode:
    begin
    if (CheckInput = false) then
    begin
      if SaveDialog1.Execute then
        begin ...............
Leider klappt es nicht so wie es soll! (klappt nur im Edit 16)
Wo liegt der Fehler? :gruebel:

marabu 30. Okt 2005 07:24

Re: Hilfe bei onExit-Ereignis
 
Hi Grolle,

mir fällt auf, dass du in deinem Aufruf beim Eintreten des Fehlerfalls speicherst. Das Gegenteil hätte ich erwartet:

Delphi-Quellcode:
begin
  if CheckInput then
    with SaveDialog do
    begin
      // ...
      if Execute then
      begin
        //...
      end
    end;
end;
Wenn in einem TEdit nur 0 oder Werte von 200 bis 999 gültig sind, dann kannst du den Benutzer u.a. im Hint der Edit-Komponente vorher darüber informieren - ShowHint der Form muss dann eingeschaltet sein und ein StatusBar mit eingeschaltetem AutoHint sollte existieren. Im konkreten Fall wäre auch eine Edit-Maske oder ein SpinEdit möglich.

Wenn der Benutzer dann immer noch falsche Werte eingibt, dann darfst du seine Eingabe nicht einfach entfernen oder ersetzen. Entweder der Benutzer darf seine Eingaben korrigieren, die er dann auch noch sehen können muss, oder dein Programm arbeitet mit Standardannahmen, die du dann in einem Bestätigungsdialog anzeigst. Im konkreten Fall würde ich die fehlerhaften Eingaben stehen lassen.

Grüße vom marabu

sh17 31. Okt 2005 13:18

Re: Hilfe bei onExit-Ereignis
 
etwas so

Delphi-Quellcode:
function TForm1.CheckInput : boolean;
begin
  Result := false;

  if Edit15.Text = '' then
  begin
    MessageDlg('fehler bla...
    Edit15.Text := '--.00:00';
    exit;
  end

  try
  if (StrToInt(Edit16.Text)< 200) and not (StrToInt(Edit16.Text)= 0)then
    begin
      MessageDlg(' Guthaben muss zwischen 200 und 999 oder bei 0 liegen!  ' + #13#10 +
                 ' Bitte korrigieren Sie die Eingabe!  ', mtError, [mbOK], 0);
      ActiveControl := Edit16;
      exit;
    end;
except
  on EConvertError do begin
    MessageDlg('fehler bla...
    ActiveControl := Edit16;
    exit;
  end;
  end;

  ... usw.

  Result := true;

end;


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