AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Hilfe bei onExit-Ereignis

Ein Thema von Grolle · begonnen am 26. Okt 2005 · letzter Beitrag vom 31. Okt 2005
Antwort Antwort
Grolle

Registriert seit: 5. Nov 2004
Ort: Coesfeld
1.268 Beiträge
 
Delphi 2010 Professional
 
#1

Hilfe bei onExit-Ereignis

  Alt 26. Okt 2005, 13:26
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;

  Mit Zitat antworten Zitat
Phistev
(Gast)

n/a Beiträge
 
#2

Re: Hilfe bei onExit-Ereignis

  Alt 26. Okt 2005, 13:45
Führ beim Abspeichern doch noch einmal die gesamten Tests durch, entweder direkt oder durch Aufrufen der Methoden. Das dürfte am Einfachsten sein.
  Mit Zitat antworten Zitat
Grolle

Registriert seit: 5. Nov 2004
Ort: Coesfeld
1.268 Beiträge
 
Delphi 2010 Professional
 
#3

Re: Hilfe bei onExit-Ereignis

  Alt 26. Okt 2005, 13:55
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).

  Mit Zitat antworten Zitat
Benutzerbild von sh17
sh17

Registriert seit: 26. Okt 2005
Ort: Radebeul
1.643 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Hilfe bei onExit-Ereignis

  Alt 26. Okt 2005, 13:57
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.
Sven Harazim
  Mit Zitat antworten Zitat
Grolle

Registriert seit: 5. Nov 2004
Ort: Coesfeld
1.268 Beiträge
 
Delphi 2010 Professional
 
#5

Re: Hilfe bei onExit-Ereignis

  Alt 26. Okt 2005, 14:28
Das Problem ist, das die ganzen OnExits auf verschiedene Werte überprüft werden,
oder habe ich dich da falsch verstanden?

  Mit Zitat antworten Zitat
Benutzerbild von sh17
sh17

Registriert seit: 26. Okt 2005
Ort: Radebeul
1.643 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Hilfe bei onExit-Ereignis

  Alt 26. Okt 2005, 14:33
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;
Sven Harazim
--
  Mit Zitat antworten Zitat
Grolle

Registriert seit: 5. Nov 2004
Ort: Coesfeld
1.268 Beiträge
 
Delphi 2010 Professional
 
#7

Re: Hilfe bei onExit-Ereignis

  Alt 26. Okt 2005, 14:41
Werde ich testen. THX!

  Mit Zitat antworten Zitat
Grolle

Registriert seit: 5. Nov 2004
Ort: Coesfeld
1.268 Beiträge
 
Delphi 2010 Professional
 
#8

Re: Hilfe bei onExit-Ereignis

  Alt 30. Okt 2005, 01:40
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?

  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#9

Re: Hilfe bei onExit-Ereignis

  Alt 30. Okt 2005, 08:24
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
  Mit Zitat antworten Zitat
Benutzerbild von sh17
sh17

Registriert seit: 26. Okt 2005
Ort: Radebeul
1.643 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: Hilfe bei onExit-Ereignis

  Alt 31. Okt 2005, 14:18
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;
Sven Harazim
--
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:05 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