AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

VCL MaskEdit mit Datum

Ein Thema von ConnorMcLeod · begonnen am 16. Mär 2023 · letzter Beitrag vom 17. Mär 2023
Antwort Antwort
Benutzerbild von ConnorMcLeod
ConnorMcLeod

Registriert seit: 13. Okt 2010
Ort: Bayern
490 Beiträge
 
Delphi 10.4 Sydney
 
#1

VCL MaskEdit mit Datum

  Alt 16. Mär 2023, 17:36
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:
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;
Haben wir hier tatsächlich einen Bug in MaskDoFormatText? Ich habe einen Verdacht, möchte aber (noch) nicht die Antworten beeinflussen.
Nr.1 Delphi-Tool: [F7]
  Mit Zitat antworten Zitat
ghubi01

Registriert seit: 18. Nov 2017
129 Beiträge
 
Delphi 12 Athens
 
#2

AW: VCL MaskEdit mit Datum

  Alt 16. Mär 2023, 22:17
Versuch mal:
    LedtTest.EditMask := '!09909909999;1;';
  Mit Zitat antworten Zitat
Benutzerbild von ConnorMcLeod
ConnorMcLeod

Registriert seit: 13. Okt 2010
Ort: Bayern
490 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: VCL MaskEdit mit Datum

  Alt 16. Mär 2023, 23:00
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.
Nr.1 Delphi-Tool: [F7]
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: VCL MaskEdit mit Datum

  Alt 16. Mär 2023, 23:00
[-]: das Ergebnis ist: ' 16.03.2023' - also mit führendem Blank.
die erste 0 ist etwas zuviel
vermutlich wollte es eher so werden !0900909999;1;


PS:
Delphi-Quellcode:
    LedtTest.EditMask := '!99/99/9999;1;_';
    LedtTest.Text := DateToStr(Date); // '16.03.2023'
    Result := LedtTest.Text; // '16.03.2023'
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

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

Registriert seit: 13. Okt 2010
Ort: Bayern
490 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: VCL MaskEdit mit Datum

  Alt 16. Mär 2023, 23:07
@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.
Nr.1 Delphi-Tool: [F7]
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.062 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
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

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

Registriert seit: 13. Okt 2010
Ort: Bayern
490 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: VCL MaskEdit mit Datum

  Alt 17. Mär 2023, 09:02
Nja, richtig macht man es mit einem TDateEdit.
Leider waren die TMS anderer Meinung. Es geht um TPlannerMaskDatePicker.

Und ich verstehe nie, warum jemand EmptyStr benutzt?
Das ist OT und esoterisch und würde ich auch nicht trefflich diskutieren wollen
Nr.1 Delphi-Tool: [F7]
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:56 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz