Autor Beitrag
Szebin
Hält's aus hier
Beiträge: 7

Win XP
Delphi 7
BeitragVerfasst: Di 24.01.06 13:09 
Hallo,

ich habe im FrmEingang ein TMaskEdit mit der Eingabemaske "!99/99/00;1;_" und dem Namen "Datum". Nun möchte ich vor dem Verlassen der TMaskEdit prüfen, ob die Datumeingabe richtig ist. Wenn nicht soll eine Meldung erscheinen und das Ereignis OnExit abgebrochen werden, d.h. TMaskEdit "Datum" kann nicht verlassen werden.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure TFrmEingang.DatumExit(Sender: TObject);
var
  PruefDate: TDateTime;
begin
  try
    PruefDate := StrToDate(Datum.Text);
  except
    showmessage('Bitte geben Sie ein gültiges Datum ein');
    //Das Ereignis soll jetzt abgebrochen werden und TMaskEdit mit dem Namen Datum soll nicht verlassen werden können.  
  end;
end;


Ich danke schon im Voraus für jede Hilfe.
Schöne Grüße von der dänischen Grenze
Sabine

_________________
Wer viel fragt ist ein Plagegeist, wer nichts fragt ist ein unwissender Geist. Lieber ein Plagegeist als gar keinen !!
Schumi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 33

Win XP, Linux
D7 Prof., D2006 Entpr.
BeitragVerfasst: Di 24.01.06 13:17 
Hallo Szebin,

dafür benutze ich immer die Eigenschaft ActiveControl. Sie legt das aktive Element des Fensters fest. Falls der Fehler entdeckt wird, setze einfach ActiveControl:=<KomponentenName>

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure TFrmEingang.DatumExit(Sender: TObject);  
var  
  PruefDate: TDateTime;  
begin  
  try  
    PruefDate := StrToDate(Datum.Text);  
  except  
    showmessage('Bitte geben Sie ein gültiges Datum ein'); 
    ActiveControl:=Datum;
  end
end;


Gruß
Schumi
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6393
Erhaltene Danke: 147

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Di 24.01.06 13:24 
Hall Szebin :wink:

Eine andere Möglichkeit wäre:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure TFrmEingang.DatumExit(Sender: TObject);  
var  
  PruefDate: TDateTime;  
begin  
  try  
    PruefDate := StrToDate(Datum.Text);  
  except  
    showmessage('Bitte geben Sie ein gültiges Datum ein'); 
    Datum.SetFocus;
  end
end;

Welche Variante "besser" ist, weiß ich nicht.
btw:
Ich persönlich benutze TMaskEdit nicht. Es gibt bessere Komponenten in der Jedi-Bibliothek. Dort ist dann eine fehlerhafte Eingabe im Prinzip auch nicht mehr möglich.
Szebin Threadstarter
Hält's aus hier
Beiträge: 7

Win XP
Delphi 7
BeitragVerfasst: Di 24.01.06 13:28 
Hallo Schumi,

ich habe den Quelltext exakt so eingegeben, wie von Dir angegeben. Jetzt kommt eine "Benachrichtigung über Debugger-Exception" mit folgendem Text: Im Projekt xyz.exe ist eine Exception mit der Klasse EConvertError aufgetreten. Meldung: ''24.51.06' ist kein gültiges Datum'. Prozess wurde angehalten ...", wenn ich mit der Tabtaste das TMaskEdit 'Datum' verlassen will.

Hast Du evtl. noch einen anderen Rat!?

@[quote]Peter
Da ich ja noch ein absoluter Neuling bin, was ist die Jedi-Bibliothek ???

Gruß Sabine

_________________
Wer viel fragt ist ein Plagegeist, wer nichts fragt ist ein unwissender Geist. Lieber ein Plagegeist als gar keinen !!
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6393
Erhaltene Danke: 147

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Di 24.01.06 13:34 
Den Fehler bekommst du, weil du das Programm aus Delphi heraus gestartet hast. Im Debug-Modus werden Exceptions in der Standard-Einstellung weiterhin ausgelöst. Irgendwo im Einstellungsmenü kann man das ausstellen. Die CheckBox heißt "Bei Exception anhalten", afair. Ich stelle das aber nur in Ausnahmen aus.
Wenn du das Programm ganz normal startest, sollte die Fehlermeldung nicht mehr kommen.

Hier noch eine Variante. Habe ich aus dem Kopf getippt, aber ich meine, dass eine einfaches "raise" das Verlassen der Komponente abbricht.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure TFrmEingang.DatumExit(Sender: TObject);  
var  
  PruefDate: TDateTime;  
begin  
  try  
    PruefDate := StrToDate(Datum.Text);  
  except  
    raise('Bitte geben Sie ein gültiges Datum ein'); 
  end
end;


Für Jedi guckst du hier
Es ist eine sehr umfangreiche Komponenten-Bibliothek.
Schumi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 33

Win XP, Linux
D7 Prof., D2006 Entpr.
BeitragVerfasst: Di 24.01.06 13:37 
Da hat die eigene Fehlerbehandlung des MaskEdit-Felds Dir einen Streich gespielt. Das prüft die Eingaben zuerst, noch bevor Deine Prozedur "OnExit" greift. Die Debugger-Exception bekommst Du nur bei Ausführung über Delphi. Bei Ausführung der EXE-Datei kommt nachher nur sowas wie "Ungültige Eingabe! Mit ESC rückgängig machen".

Wie Du diese eigene Fehlerbehandlung abstellen kannst, weiss ich leider auch nicht :(
Szebin Threadstarter
Hält's aus hier
Beiträge: 7

Win XP
Delphi 7
BeitragVerfasst: Di 24.01.06 13:55 
Hallo Schumi, Hallo Peter,

vielen und herzlichen Dank für Eure schnelle Hilfe. Funktioniert alles. Danke nochmals

Gruß Sabine

_________________
Wer viel fragt ist ein Plagegeist, wer nichts fragt ist ein unwissender Geist. Lieber ein Plagegeist als gar keinen !!