Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Editfeld als Sender
colaka - Sa 29.09.12 10:43
Titel: Editfeld als Sender
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:
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ß
mandras - Sa 29.09.12 10:49
Weise allen Datums-Edit-Feldern die gleiche Exit-Funktion zu:
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.
bummi - Sa 29.09.12 10:49
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
Martok - 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.
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 ;-)
colaka - 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
DonManfred - Mo 01.10.12 07:06
Du könntest deinen Usern auch noch ein Feature da einbauen und eine Funktion einsetzen.
Delphi-Quelltext
1: 2: 3: 4:
| procedure Tfrmkunden.edit_gebdatumExit(Sender: TObject); begin fnc.CheckDatumExit(Sender); end; |
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.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!