![]() |
Anderes Verhalten in 12.3
Hallo,
diese Woche von Delphi 10.4 auf 12.3 umgestiegen. Folgender Quellcode verhält sich unterschiedlich:
Delphi-Quellcode:
FormatSettings wird nicht gesetzt.
var
StrWert: String; fWert: Single; begin StrWert := '71.4'; fWert := StrToFloatDef(StrWert, 0); //in 10.4 ist fWert 71,4 und in 12.3 ist es 0 end; |
AW: Anderes Verhalten in 12.3
Wie ist denn der Decimalseparator bei dir in Windows eingestellt?
|
AW: Anderes Verhalten in 12.3
Der Decimalseparator ist wie bei Standard Windows eingestellt. Also ",".
Damit macht die Version 12.3 es korrekt. Das Problem ist nur das geänderte Verhalten. Es rächt sich wenn man mit dem Update zu lange wartet. Jetzt die ganzen Versions Änderungen seit 10.4 durch zu gehen währe mühsam. |
AW: Anderes Verhalten in 12.3
PS: Genau für sowas gibt es natürlich eine Überladung dieser Funktion, wo du ein passendes FormatSetting übergeben kannst. (für "english" gibt es ein Vordefiniertes)
Alternativ den String zu Laufzeit mit dem aktuellen DecimalSeparator zusammenbauen. |
AW: Anderes Verhalten in 12.3
Hallo Edelfix,
damit beim Umsteigen von einer auf eine andere Delphi-Versionen sich soche Überraschungen in Grenzen halten, verwende ich zum eindeutigen Setzen meiner Format-Settings folgende Routine:
Delphi-Quellcode:
MyFormatSettings wird per Initialisierung in allen betroffenen eigenen Units eingebunden:
Procedure MyFormatSettings;
// Setzt DecimalSeparator etc. per Initialization // Quelle: // DecimalSeparator in SysUtils and System.SysUtils - Stack Overflow.pdf // http://stackoverflow.com/questions/25109497/decimalseparator-in-sysutils-and-system-sysutils // von Rodrigo Garcia Var MyFormat: TFormatSettings; // --> TFormatSettings = record, daher KEIN MyFormat.Free! Begin MyFormat:= TFormatSettings.Create; MyFormat.DecimalSeparator := '.'; // ','; MyFormat.ThousandSeparator:= ','; // '.'; MyFormat.CurrencyDecimals := 2; MyFormat.DateSeparator := '/'; MyFormat.ShortDateFormat := 'dd/mm/yyyy'; MyFormat.LongDateFormat := 'dd/mm/yyyy'; MyFormat.TimeSeparator := ':'; MyFormat.TimeAMString := 'AM'; MyFormat.TimePMString := 'PM'; MyFormat.ShortTimeFormat := 'hh:nn'; MyFormat.LongTimeFormat := 'hh:nn:ss'; MyFormat.CurrencyString := 'R€'; // 'R$'; System.SysUtils.FormatSettings:= MyFormat; // // TFormatSettings = record, daher KEIN MyFormat.Free! End;{Procedure MyFormatSettings} {------------------------------}
Delphi-Quellcode:
Vielleicht hilft es Dir.
Unit Meine_Mathematische_Bibliothek; // etc.
Interface ... Implementation Uses System.SysUtils; ... Initialization MyFormatSettings; ... Finalization // ExitProcedures ... End. Viel Erfolg! |
AW: Anderes Verhalten in 12.3
Das Setzen von System.SysUtils.FormatSettings würde ich als höchst fragwürdig einstufen.
Nicht ohne Grund gibt es die Überladungen mit einem TFormatSettings Parameter. Damit kann man dann ja einen speziellen Record übergeben. Der globale Parameter wird ja immer anhand der Windows-Einstellungen initialisiert. Diese sollte man für die Darstellung eigentlich respektieren. Lediglich beim Speichern und Lesen ist es gegebenenfalls sinnvoll ein invariantes Format zu verwenden. |
AW: Anderes Verhalten in 12.3
Jo, vor allem da die VCL standardmäßig gern dieses globale Setting überschreibt / neu lädt,
z.B. wenn sich an den SystemSettings etwas ändert und bei anderen Gelegenheiten.
Delphi-Quellcode:
anschließend vielleicht noch ein zwei Dinge anpassen, wenn abweichend, wie z.B. MySettings.CurrencyString.
MySettings := TFormatSettings.Invariant;
MySettings := TFormatSettings.Create($0409); MySettings := TFormatSettings.Create('en-US'); ... |
AW: Anderes Verhalten in 12.3
Zitat:
Mein alter Arbeitgeber hat auch die Settings, wie von Andreas13, überschrieben. Ich suche jetzt nach einer Lösung, wo ich Benutzerabhängig Dezimalzeichen und Tausender Zeichen unabhängig von den Regioneinstellungen ändern kann. D.h. je nach angemeldetem Benutzer soll sich das ändern. Gibt es da eine bessere Möglichkeit als die von Andreas13? |
AW: Anderes Verhalten in 12.3
Zitat:
|
AW: Anderes Verhalten in 12.3
Zitat:
Windos Benutzer ist immer der gleiche. |
AW: Anderes Verhalten in 12.3
In dem Fall kannst du die FormatSettings nach jeder Anmeldung entsprechend setzen. Die automatische Anpassung bei Änderungen in Windows kannst du mit
Delphi-Quellcode:
unterbinden.
Application.UpdateFormatSettings := False
|
AW: Anderes Verhalten in 12.3
Zitat:
Leider zeigt uns FireDac (D11.1) ganz fröhlich den dritten Finger von rechts wenn es ums Auswerten von Filtern geht. Sind die globalen Settings nicht überschrieben, müsste ich auf jedem System die Filter anders erstellen, was absolut Banane ist. |
AW: Anderes Verhalten in 12.3
Und der zugehörige Bugreport hat welche Nummer?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:40 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