Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Probleme mit FormatSettings.DecimalSeparator (https://www.delphipraxis.net/191392-probleme-mit-formatsettings-decimalseparator.html)

Hunni 10. Jan 2017 17:22

Probleme mit FormatSettings.DecimalSeparator
 
Hallo,

der Befehl FormatSettings.DecimalSeparator gibt mir machmal den Falschen Wert zurück

Wir haben mehrere Win7 (64bit) Rechner, die mir hin und wieder anstelle eines ',' einen '.' zurückgeben

Ist das ein bekanntes Problem ?

Lösen kann ich das Problem meistens dadurch, das ich in der System Einstellung unter "Region Sprache" ein anders Land auswähle und dann wieder zurück auf Deutsch wechsel


Beispiel
Code:
  label1.Caption := '1' + FormatSettings.DecimalSeparator + '00';

Gruß

Torsten

Zacherl 10. Jan 2017 17:29

AW: Probleme mit FormatSettings.DecimalSeparator
 
Reine Spekulation, aber das klingt doch so, als ob das Problem bei Windows liegen würde. Hast du auf einem der betroffenen Rechner mal geschaut, ob da vielleicht wirklich '.' als Trennzeichen eingestellt war?

mm1256 10. Jan 2017 17:43

AW: Probleme mit FormatSettings.DecimalSeparator
 
Dieses Phänomen hatte ich schon des öfteren mit HP-Rechnern. Allerdings mit der Einschränkung, dass dies nicht "hin und wieder" passierte, sondern ein einmaliger Vorgang nach der Auslieferung bzw. erstmaligen Inbetriebnahme war. D.h. wenn man einmalig die Ländereinstellung gewechselt, übernommen, und wieder zurück gewechselt hat, dann war es behoben.

Und, richtig, wie Zacherl schon geschrieben hat, das ist ein Windows Problem, das nichts mit Delphi zu tun hat.

Hunni 10. Jan 2017 17:52

AW: Probleme mit FormatSettings.DecimalSeparator
 
Zitat:

Zitat von Zacherl (Beitrag 1358608)
Reine Spekulation, aber das klingt doch so, als ob das Problem bei Windows liegen würde. Hast du auf einem der betroffenen Rechner mal geschaut, ob da vielleicht wirklich '.' als Trennzeichen eingestellt war?

Hi,

Ja, In den Windows Einstellungen ist immer ein ',' eingetragen

Eigentlich habe ich auch gelesen, das dieser Fehler durch einmaliges ändern der System Einstellungen behoben sein soll

Aber der Fehler tritt leider immer wieder mal sporadisch auf


Gruß

Torsten

HolgerX 10. Jan 2017 18:14

AW: Probleme mit FormatSettings.DecimalSeparator
 
Das ist ein bekannte Bug von Windows7.

Wenn Windows 7 als Englich installiert wurde und dann das deutsche Sprachpaket darüber kommt es zu diesem Problem.

Es gibt unter Windows 7 einmal die System-Sprache und einmal die User-Sprache.

Auch wenn in deinem Profil DE eingestellt ist und der richtige Dezimalseparator angezeigt wird, nimmt u.a. Delphi nicht die User-Sprache, sondern die System-Sprache.
Vor Windows 7 gab es nur die Systemsprache.

Eine einfache Fehlerbehandlung ist, in die Spracheinstellungen zu gehen und dort "auf Standard zurücksetzen" machen.
Dann wird auch die System-Sprache richtig eingestellt und es kommt der richtige Dezimalseparator.

Der Bug wird übrigens bei einem Upgrade von Win7 auf Win10 sogar mitgenommen ;)

Wurde hier übrigens schon behandelt:
http://www.delphipraxis.net/156447-d...lsettings.html
http://www.delphipraxis.net/160539-d...p-vs-win7.html

t.roller 10. Jan 2017 18:37

AW: Probleme mit FormatSettings.DecimalSeparator
 
Zitat:
ms-help://embarcadero.rs_xe7/libraries/System.SysUtils.TFormatSettings.Create.html
Ein TFormatSettings-Datensatz muss vor der Verwendung initialisiert werden. Mit Create können Sie alle Felder gemäß des angegebenen Gebietsschemas füllen.

Delphi-Quellcode:
procedure TForm1.Button11Click(Sender: TObject);
var FS: TFormatSettings;
begin
  FS := TFormatSettings.Create('de-DE');
  Caption:= '1'+ FS.DecimalSeparator+'00';
end;

procedure TForm1.Button12Click(Sender: TObject);
var FS: TFormatSettings;
begin
  FS := TFormatSettings.Create('en-US');
  Caption:= '1'+ FS.DecimalSeparator+'00';
end;

Hunni 10. Jan 2017 19:55

AW: Probleme mit FormatSettings.DecimalSeparator
 
Zitat:

Zitat von t.roller (Beitrag 1358615)
Zitat:
ms-help://embarcadero.rs_xe7/libraries/System.SysUtils.TFormatSettings.Create.html
Ein TFormatSettings-Datensatz muss vor der Verwendung initialisiert werden. Mit Create können Sie alle Felder gemäß des angegebenen Gebietsschemas füllen.

Delphi-Quellcode:
procedure TForm1.Button11Click(Sender: TObject);
var FS: TFormatSettings;
begin
  FS := TFormatSettings.Create('de-DE');
  Caption:= '1'+ FS.DecimalSeparator+'00';
end;

procedure TForm1.Button12Click(Sender: TObject);
var FS: TFormatSettings;
begin
  FS := TFormatSettings.Create('en-US');
  Caption:= '1'+ FS.DecimalSeparator+'00';
end;

Hallo

Ok, ich werde es mal ausprobieren


Gruß

Torsten

Stevie 12. Jan 2017 15:53

AW: Probleme mit FormatSettings.DecimalSeparator
 
Da FormatSettings eine globale Variable ist, würde ich mal untersuchen, ob nicht irgendwelcher Code, darauf herumschreibt - wurde früher durchaus gern gemacht, einfach mal temporär DecimalSeparator umändern, eine Methode aufrufen und danach wieder zurück ändern - thread sicherheit, was ist das?

bra 12. Jan 2017 16:10

AW: Probleme mit FormatSettings.DecimalSeparator
 
Wir hatten das Problem auch schon ein paarmal. Ich vermute hier werden irgendwelche Einstellungen (z.B. Registry) gelesen, die nicht richtig initialisiert sind. Einzige mir bekannte Lösung: Das schon erwähnte Umstellen der Sprache auf was anderes und zurückstellen auf Deutsch.

himitsu 12. Jan 2017 16:35

AW: Probleme mit FormatSettings.DecimalSeparator
 
Das Problem ist einfach.
Es gibt mehrere Speicherorte für diese Settings und bei einigen "vorinstallierten" Windowsen werden/wurden nicht alle Speicherorte richtig initialisiert.
Die eine API liest von da, eine andere von dort, manche Programme gehen garnicht über APIs und denken sie sind schlauer, wenn sich selber in der Registrie rumfummeln und am Ende wundert sich jemand, wenn er die "falschen" Settings ausliest.

Nach dem Ändern über den Windowsdialog steht es dann aber überall richtig drin.

Manchmal werden Speicherorte verschoben oder Neue erfunden, weil z.B. früher ein Setting global war und nun userabhängig ist ......


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:59 Uhr.
Seite 1 von 2  1 2      

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