Autor Beitrag
colaka
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 200
Erhaltene Danke: 4

Win XP, W7
Delphi 2005 Prof.
BeitragVerfasst: Sa 29.09.12 10:43 
Hallo,

in einem Editfeld soll der Benutzer ein Datum eingeben, und ich möchte überprüfen, ob das Datum im richtigen Format eingegeben wurde. Dazu habe ich die folgende Prozedur in das On-Exit-Ereignis geschrieben:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure TFKunden.Edit1Exit(Sender: TObject);
var
  Tag : TDateTime;
begin
  try
    Tag :=StrToDate(Edit1.Text);
  except
    ShowMessage('Das Datum muss im Format TT.MM.JJJJ eingegeben werden');
    Edit1.SetFocus;
  end;
end;


Das funktioniert auch, aber da ich 28 Editfelder habe, möchte ich den Code nicht 28 mal schreiben. Irgendwo habe ich schon mal gelesen, dass man das dann mit einem "Sender" machen kann. Alle meine bisherigen Versuche sind leider fehlgeschlagen.

Für einen kleinen Denkanstoss wäre ich sehr dankbar.

Gruß

_________________
Mit 2 Stunden Ausprobieren kann man sich oft 5 Minuten Nachdenken ersparen


Zuletzt bearbeitet von colaka am Sa 29.09.12 11:46, insgesamt 1-mal bearbeitet
mandras
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 432
Erhaltene Danke: 107

Win 10
Delphi 6 Prof, Delphi 10.4 Prof
BeitragVerfasst: Sa 29.09.12 10:49 
Weise allen Datums-Edit-Feldern die gleiche Exit-Funktion zu:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
procedure TForm1.Edit1Exit(Sender: TObject);
var
  Tag : TDateTime;
  S: TEdit;
begin
 if Sender is TEdit then begin
  S:=Sender as TEdit;
  try
    Tag :=StrToDate(S.Text);
  except
    ShowMessage('Das Datum muss im Format TT.MM.JJJJ eingegeben werden');
    S.SetFocus;
  end;
 end;
end;


Die Zwischenvariable S ist nicht erforderlich, erspart es einem aber jedesmal als "as TEdit" zu schreiben.

Für diesen Beitrag haben gedankt: colaka
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Sa 29.09.12 10:49 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure TFKunden.Edit1Exit(Sender: TObject);
var
  Tag : TDateTime;
begin
  try
    Tag :=StrToDate(TEdit(Sender).Text);
  except
    ShowMessage('Das Datum muss im Format TT.MM.JJJJ eingegeben werden');
    TEdit(Sender).SetFocus;
  end;
end;


wobei Tag etwas unglücklich gewählt sein könnte

_________________
Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS

Für diesen Beitrag haben gedankt: colaka
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: Sa 29.09.12 20:13 
Die Meldung stimmt übrigens nicht, StrToDate verwendet das Systemformat - und das muss nicht zwingend TT.MM.JJJJ sein. Außerdem ist das mit der Exception doof, wenn du nur prüfen willst.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure TFKunden.Edit1Exit(Sender: TObject);
var
  TestTag : TDateTime;
begin
  if not TryStrToDate(TEdit(Sender).Text, TestTag) then begin
    ShowMessage('Das Datum muss im Format '+ShortDateFormat+' eingegeben werden');
    TEdit(Sender).SetFocus;
  end;
end;



Und dann gibts da noch die Komponente TDateTimePicker, die auch noch einen Dropdown-Kalender mitbringt. Davon sind meine User immer total begeistert, weil das halt wesentlich mehr Komfort ist als selber tippen zu müssen ;-)

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."

Für diesen Beitrag haben gedankt: colaka
colaka Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 200
Erhaltene Danke: 4

Win XP, W7
Delphi 2005 Prof.
BeitragVerfasst: So 30.09.12 10:21 
Hallo,

ich bin immer wieder erstaunt, wie elegant sich viele Sachen mit Delphi lösen lassen - wenn man weiss, wie es geht.

Vielen Dank

_________________
Mit 2 Stunden Ausprobieren kann man sich oft 5 Minuten Nachdenken ersparen
DonManfred
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 148
Erhaltene Danke: 2

Windows 7
Delphi XE3 Pro + HTML5Builder
BeitragVerfasst: Mo 01.10.12 07:06 
Du könntest deinen Usern auch noch ein Feature da einbauen und eine Funktion einsetzen.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
procedure Tfrmkunden.edit_gebdatumExit(Sender: TObject);
begin
  fnc.CheckDatumExit(Sender);
end;


ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure CheckDatumExit(obj: TPlannerDatePicker);
var dummy : string;
begin
  dummy :=  obj.Text;
  if LastPos('.', dummy) = 0 then begin
    if StrLen(pchar(trim(dummy))) = 6 then begin
      obj.Text := copy(dummy,0,2)+'.'+copy(dummy,3,2)+'.20'+copy(dummy,5,2);
    end;
    if StrLen(pchar(trim(dummy))) = 4 then begin
      obj.Text := copy(dummy,0,2)+'.'+copy(dummy,3,2)+'.'+FormatDateTime('yyyy', Now);
    end;
  end;
end;


So kann man sann "151011" eingeben und es wird daraus der 15.10.2011.
Oder einfch "1510" und es wird daraus 15.10.2012

Diese Procedure wird bei uns in allen Datumsfeldern verwendet und wird sehr intensiv von den Benutzern benutzt.

_________________
Gruss Manfred