![]() |
VCL MaskEdit mit Datum
Hallo Schwarm mit Wissen!
Die SuFu hat mir leider nicht weitergeholfen, somit die Frage: wie kommt es, daß das Datum so verunstaltet wird?
Delphi-Quellcode:
Haben wir hier tatsächlich einen Bug in MaskDoFormatText? Ich habe einen Verdacht, möchte aber (noch) nicht die Antworten beeinflussen.
function MaskEditTest: string;
var LedtTest: TMaskEdit; begin Result := EmptyStr; LedtTest := TMaskEdit.Create(nil); try LedtTest.Text := DateToStr(Date); // '16.03.2023' LedtTest.EditMask := '!99/99/9999;1;_'; Result := LedtTest.Text; // '160.....2023' finally FreeAndNil(LedtTest); end; end; |
AW: VCL MaskEdit mit Datum
Versuch mal:
Delphi-Quellcode:
LedtTest.EditMask := '!09909909999;1;';
|
AW: VCL MaskEdit mit Datum
Danke, besser, aber nicht perfekt.
[+]: es ist lesbar und ein (halbwegs) gültiges Datum [-]: das Ergebnis ist: ' 16.03.2023' - also mit führendem Blank. |
AW: VCL MaskEdit mit Datum
Zitat:
vermutlich wollte es eher so werden !0900909999;1; PS:
Delphi-Quellcode:
:angle:
LedtTest.EditMask := '!99/99/9999;1;_';
LedtTest.Text := DateToStr(Date); // '16.03.2023' Result := LedtTest.Text; // '16.03.2023' |
AW: VCL MaskEdit mit Datum
@himitsu: ja, so paßt es, aber ist das nicht widersinnig? Der Schrägstrich sollte lt. Doku als Platzhalter für das Datumstrennzeichen stehen.
d.h. kaum macht man's richtig, erzeugt das einen Fehler. Hm. |
AW: VCL MaskEdit mit Datum
Nja, richtig macht man es mit einem TDateEdit. :zwinker:
Delphi-Quellcode:
Erst Text und dann Maske macht ein TCustomMaskEdit.ReformatText
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' 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
Delphi-Quellcode:
anstatt
_UStrLAsg(var Dest: UnicodeString; const Source: UnicodeString)
Delphi-Quellcode:
.
_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. :stupid: Noch mehr Spaß hat man nur noch mit anderen Strings. (ShortString, AnsiString, UTF8String uvm.)
Delphi-Quellcode:
_LStrFromUStr(var Dest: _AnsiStr; const Source: UnicodeString; CodePage: Word);
Delphi-Quellcode:
_UStrToString(Dest: _PShortStr; const Source: UnicodeString; MaxLen: Integer);
oder noch Schlimmeres |
AW: VCL MaskEdit mit Datum
Zitat:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:15 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz