AGB  ·  Datenschutz  ·  Impressum  







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

Anderes Verhalten in 12.3

Ein Thema von Edelfix · begonnen am 17. Apr 2025 · letzter Beitrag vom 18. Apr 2025
Antwort Antwort
Seite 1 von 2  1 2      
Edelfix

Registriert seit: 6. Feb 2015
Ort: Stadtoldendorf
236 Beiträge
 
Delphi 10.4 Sydney
 
#1

Anderes Verhalten in 12.3

  Alt 17. Apr 2025, 11:55
Hallo,

diese Woche von Delphi 10.4 auf 12.3 umgestiegen.

Folgender Quellcode verhält sich unterschiedlich:

Delphi-Quellcode:
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;
FormatSettings wird nicht gesetzt.
  Mit Zitat antworten Zitat
Benutzerbild von Olli73
Olli73

Registriert seit: 25. Apr 2008
Ort: Neunkirchen
781 Beiträge
 
#2

AW: Anderes Verhalten in 12.3

  Alt 17. Apr 2025, 12:33
Wie ist denn der Decimalseparator bei dir in Windows eingestellt?
  Mit Zitat antworten Zitat
Edelfix

Registriert seit: 6. Feb 2015
Ort: Stadtoldendorf
236 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Anderes Verhalten in 12.3

  Alt 17. Apr 2025, 13:34
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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Anderes Verhalten in 12.3

  Alt 17. Apr 2025, 13:36
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.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Andreas13

Registriert seit: 14. Okt 2006
Ort: Nürnberg
722 Beiträge
 
Delphi XE5 Professional
 
#5

AW: Anderes Verhalten in 12.3

  Alt 18. Apr 2025, 10:51
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:
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}
{------------------------------}
MyFormatSettings wird per Initialisierung in allen betroffenen eigenen Units eingebunden:
Delphi-Quellcode:
Unit Meine_Mathematische_Bibliothek; // etc.

Interface
...

Implementation

Uses
  System.SysUtils;
...

Initialization
  MyFormatSettings;
...
Finalization // ExitProcedures
...
End.
Vielleicht hilft es Dir.
Viel Erfolg!
Grüße, Andreas
Wenn man seinem Nächsten einen steilen Berg hinaufhilft, kommt man selbst dem Gipfel näher. (John C. Cornelius)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.643 Beiträge
 
Delphi 12 Athens
 
#6

AW: Anderes Verhalten in 12.3

  Alt 18. Apr 2025, 11:51
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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Anderes Verhalten in 12.3

  Alt 18. Apr 2025, 14:29
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:
MySettings := TFormatSettings.Invariant;
MySettings := TFormatSettings.Create($0409);
MySettings := TFormatSettings.Create('en-US');
...
anschließend vielleicht noch ein zwei Dinge anpassen, wenn abweichend, wie z.B. MySettings.CurrencyString.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (18. Apr 2025 um 14:33 Uhr)
  Mit Zitat antworten Zitat
Mantrid

Registriert seit: 6. Jun 2022
Ort: Deutschland
31 Beiträge
 
#8

AW: Anderes Verhalten in 12.3

  Alt 18. Apr 2025, 14:41
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.
Dazu eine Frage, weil ich auch damit ein Problem habe.

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?
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.643 Beiträge
 
Delphi 12 Athens
 
#9

AW: Anderes Verhalten in 12.3

  Alt 18. Apr 2025, 14:51
D.h. je nach angemeldetem Benutzer soll sich das ändern.
Angemeldet bei Windows oder bei eurer Anwendung?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Mantrid

Registriert seit: 6. Jun 2022
Ort: Deutschland
31 Beiträge
 
#10

AW: Anderes Verhalten in 12.3

  Alt 18. Apr 2025, 16:00
D.h. je nach angemeldetem Benutzer soll sich das ändern.
Angemeldet bei Windows oder bei eurer Anwendung?
An unserer Anwendung.

Windos Benutzer ist immer der gleiche.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 10:07 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