Nja, richtig macht man es mit einem TDateEdit.
Delphi-Quellcode:
LedtTest.Text := DateToStr(Date); // '16.03.2023' Text und EditText sind hier identisch, da noch keine Maske
LedtTest.EditMask := '!99/99/9999;1;_';
Result := LedtTest.Text; // '160.....2023'
Result := LedtTest.EditText; // '16.0.3..2023'
Erst Text und dann Maske macht ein TCustomMaskEdit.ReformatText
und dort kommt der irgendwo durcheinander, weil sich Zeichen verschieben. (Steuerzeichen reinschieben)
Also erst enodieren, merken, umformatieren und wieder neu dekodieren.
Erst Mask und dann Text macht nur noch
AddEditFormat/MaskDoFormatText oder PadInputLiterals und anschließend Validate,
also bloß dekodieren+validieren
Und ich verstehe nie, warum jemand EmptyStr benutzt?
Ich finde das unnötig groß und schwerer zu lesen.
Außerdem ist dieses räudige Mistding eine typisierte Konstante (somit eigentlich eine schreibgeschützte Variable) und keine "echte" Konstante,
also
_UStrLAsg(var Dest: UnicodeString; const Source: UnicodeString)
anstatt
_UStrClr(var S);
.
Und wenn durch irgendwass diese "Variable" verändert wird, dann hat man einen geilen Spaß.
z.B. DevExpressGrids nutzen es und dann steht plötzlich in allen "leeren" NULL-
DB-Columns "etwas" drin.
Noch mehr Spaß hat man nur noch mit anderen Strings. (ShortString, AnsiString, UTF8String uvm.)
_LStrFromUStr(var Dest: _AnsiStr; const Source: UnicodeString; CodePage: Word);
_UStrToString(Dest: _PShortStr; const Source: UnicodeString; MaxLen: Integer);
oder noch Schlimmeres