Thema: Delphi VCL MaskEdit mit Datum

Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#6

AW: VCL MaskEdit mit Datum

  Alt 16. Mär 2023, 23:29
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
$2B or not $2B

Geändert von himitsu (16. Mär 2023 um 23:35 Uhr)
  Mit Zitat antworten Zitat