Autor |
Beitrag |
Nersgatt
      
Beiträge: 1581
Erhaltene Danke: 279
Delphi 10 Seattle Prof.
|
Verfasst: Mo 13.12.10 16:06
Moin,
kann mir jemand sagen, wie ich an die Werte komme, die ich auf dem Screenshot markiert habe?
Ich brauche die Angaben, um den richtigen Wert für SysUtils.TwoDigitYearCenturyWindow zu berechnen (damit mein Programm auch das macht, was der User erwartet  )
Danke!
Jens
Einloggen, um Attachments anzusehen!
_________________ Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
|
|
chrisw
      
Beiträge: 439
Erhaltene Danke: 3
W2K
D7
|
Verfasst: Mo 13.12.10 16:41
Steht in der registry unter HKEY_CURRENT_USER\Control Panel\International\Calendars\TwoDigitYearMax, wenn er vom Standard 1930-2029 abweicht !
_________________ Man sollte keine Dummheit zweimal begehen, die Auswahl ist schließlich groß genug.
|
|
Klabautermann
      

Beiträge: 6366
Erhaltene Danke: 60
Windows 7, Ubuntu
Delphi 7 Prof.
|
Verfasst: Mo 13.12.10 19:07
Hi,
chrisw hat folgendes geschrieben : | Steht in der registry unter HKEY_CURRENT_USER\Control Panel\International\Calendars\TwoDigitYearMax, wenn er vom Standard 1930-2029 abweicht ! |
kleine Interessensfrage: Ist das immer 1930-2029 oder (CurYear - 70) bis (CurYear + 19)? Ich nehme mal an letzteres, weiß da jemand genaueres?
Eigentlich dachte ich ja, dass TFormatSettings.TwoDigitYearCenturyWindow dafür verantwortlich wäre diesen wert zu halten. Aber folgende kleine Funktion liefert leider kein zufriedenstellendes Ergebnis, oder übersehe ich da etwas:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| function GetTwoDigitYearBorder : Word; var FormatSettings :TFormatSettings; begin GetLocaleFormatSettings(LOCALE_USER_DEFAULT, FormatSettings); Result := FormatSettings.TwoDigitYearCenturyWindow; end; |
Gruß
Klabautermann
|
|
Tranx
      
Beiträge: 648
Erhaltene Danke: 85
WIN 2000, WIN XP
D5 Prof
|
Verfasst: Mo 13.12.10 20:32
Wahrscheinlich ist voreingestellt - unabhängig vom Jahr - 1930 - 2029
Aber warum benötigst Du denn diese Grenzen, denn die Umwandlung von vier- in zweistellige Jahresangaben sind doch mit FormatDateTime möglich.
_________________ Toleranz ist eine Grundvoraussetzung für das Leben.
|
|
Nersgatt 
      
Beiträge: 1581
Erhaltene Danke: 279
Delphi 10 Seattle Prof.
|
Verfasst: Mo 13.12.10 21:49
Ich hatte es getestet, indem ich einfach das Datum des Rechners umgestellt hab. Es blieb bei 1930 - 2029.
Aber durch die Voreinstellung von TwoDigitYearCenturyWindow = 50 wandert bei Delphi diese Grenze. Also macht das Programm nicht das, was der User (aufgrund der Einstellung in der Systemsteuerung) erwartet. Aufgefallen war es, weil ich eine Option eingebaut hab, dass der User in der ganzen Anwendung das Jahr 2-stellig hat. Ich persönlich mag das zwar nicht, aber einigen User wollen es scheinbar. Und da fiel auf, dass bei der Eingabe von Geburtsdaten das Jahr falsch interpretiert wurde.
Bleibt also nur, beim Programmstart den richtigen Wert für TwoDigitYearCenturyWindow auszurechnen, damit das Programm zu den Einstellungen in der Systemsteuerung passt.
Jens
_________________ Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
|
|
Tranx
      
Beiträge: 648
Erhaltene Danke: 85
WIN 2000, WIN XP
D5 Prof
|
Verfasst: Di 14.12.10 04:32
Da haben wir wieder den Salat. In Windows7 ist die Registrierung wieder mal anders. Den o. angegebenen Schlüssel
HKEY_CURRENT_USER\Control Panel\International\Calendars\TwoDigitYearMax
gibt es bei meinem Rechner nicht.
_________________ Toleranz ist eine Grundvoraussetzung für das Leben.
|
|
Gerd Kayser
      
Beiträge: 632
Erhaltene Danke: 121
Win 7 32-bit
Delphi 2006/XE
|
Verfasst: Di 14.12.10 05:21
Tranx hat folgendes geschrieben : | gibt es bei meinem Rechner nicht. |
Der Schlüssel wird erst dann angelegt, wenn man an den Einstellungen rumgefummelt hat.
|
|
jaenicke
      
Beiträge: 19314
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 14.12.10 06:36
|
|
Nersgatt 
      
Beiträge: 1581
Erhaltene Danke: 279
Delphi 10 Seattle Prof.
|
Verfasst: Di 14.12.10 08:41
Sehr seltsame Sache. Ich hab jetzt mal den Wert geändert und er wurde in die Registry geschrieben. Soweit in Ordnung. Aber dann steht der Wert dort unter den Namen "1", "2", "9" - "12" drin. Warum das denn?
Und dass der Wert als String gespeichert wird, ist auch nicht wirklich logisch, oder? 
_________________ Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
|
|
jaenicke
      
Beiträge: 19314
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 14.12.10 08:51
Wofür die Zahlen stehen, weiß ich auch nicht, wenn ich jedenfalls nur unter 1 einen Wert eintrage, klappt das. Beim Ändern via CP werden wieder alle Werte geschrieben.
Jedenfalls solltest du die richtigen Ergebnisse bekommen, wenn du den ersten Wert ausliest, falls er existiert, denke ich.
Schließlich steht das eh unter HKCU. Und wenn ich verschiedene Lokalisationen auswähle, wird der Wert immer bei den selben Zahlen eingetragen, also nicht je nach Lokalisation.
// EDIT:
Microsoft selbst gibt in der KB auch nur den Wert unter 1 an:
support.microsoft.com/kb/244664
|
|
Klabautermann
      

Beiträge: 6366
Erhaltene Danke: 60
Windows 7, Ubuntu
Delphi 7 Prof.
|
Verfasst: Di 14.12.10 12:26
jaenicke hat folgendes geschrieben : | Klabautermann hat folgendes geschrieben : | Aber folgende kleine Funktion liefert leider kein zufriedenstellendes Ergebnis | Das liegt daran, dass dieser Wert in FormatSettings schlicht nicht befüllt wird. Der Standardwert ist 50 bei der globalen Variable, die Auslesefunktionen ignorieren den Wert schlicht.  |
Ja, so in etwa erschien es mir in meinem Test auch, auch wenn ich dem nicht weiter nachgegangen bin. Auch wenn ich zweistellige Jahreszahlen nicht mag, scheint mir das doch ein ziemlicher Mängel zu sein, zumal in den TFormatSettings ja ein Wert hierfür vorgesehen ist.
Gruß
Klabautermann
|
|
jaenicke
      
Beiträge: 19314
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 14.12.10 12:33
Der Mangel ist vor allem, dass es nicht zumindest beim Füllen der FormatSettings auf den gleichen Wert wie die globale Variable initial gesetzt wird. Dadurch entsteht ein inkonsistentes Verhalten.
Weshalb sie es nicht auslesen, dürfte daran liegen, dass es anscheinend keine API zum Auslesen gibt, und sie nicht die Registry direkt nutzen wollten. Gut ist das aber nicht, ja.
|
|
chrisw
      
Beiträge: 439
Erhaltene Danke: 3
W2K
D7
|
Verfasst: Di 14.12.10 13:02
hiermit funktioniert es übrigens ohne die Registry auslesen zu müssen !
_________________ Man sollte keine Dummheit zweimal begehen, die Auswahl ist schließlich groß genug.
|
|
jaenicke
      
Beiträge: 19314
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 14.12.10 13:04
Genau dort hatte ich in der Doku geschaut, aber GetCalendarInfo ist mir irgendwie durchgerutscht. 
|
|
Nersgatt 
      
Beiträge: 1581
Erhaltene Danke: 279
Delphi 10 Seattle Prof.
|
Verfasst: Di 14.12.10 13:21
Sehr schön, das gefällt mir besser als der Registryzugriff. Dankeschön!
_________________ Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
|
|