![]() |
Probleme mit Ini Dateien wg. Englischer Windows Verision
Ich schreibe zwei einstellungen in eine Ini Datei mit folgendem Aufruf:
Delphi-Quellcode:
Genauso lese ich sie auch wieder aus:
Ini.WriteFloat('Wavelength', 'Specmin', Specmin);
Ini.WriteFloat('Wavelength', 'Stepsize', Stepsize);
Delphi-Quellcode:
Das funktioniert auf meinem PC mit deutschem Windows prima. Auf einem PC mit einer englischen Windows Version geht das nicht mehr. Da liefert er mir beim lesen immer die Default Werte zurück. Da die Werte zuvor auf dem Rechner mit der deutschen Version abgelegt wurden.
Specmin := Ini.ReadFloat('Wavelength', 'Specmin', 0);
Stepsize := Ini.ReadFloat('Wavelength', 'Stepsize', 1); Ich habe herausgefunden, dass er die Werte mit einem Komma speichert, und ich sie dann von Hand in einen Punkt ändern muss, so dass die Werte auch auf dem englischen System gelesen werden können. Gibt es eine Möglichkeit Delphi zu sagen, dass er pauschal immer einen Floatwert mit einem Punkt in einer INI Datei speichern soll, so dass ich dieses Problem damit umschiffen kann? Vielen Dank schon mal im Vorraus :-D |
Re: Probleme mit Ini Dateien wg. Englischer Windows Verision
es gibt eine globale variable DecimalSeperator. den kannst du setzen wie du möchtest. vllt ist auch gangbar die werte als strings zu speichern und sie dann in beim lesen in floats zu wandeln.
|
Re: Probleme mit Ini Dateien wg. Englischer Windows Verision
In der Unit SysUtils gibt es die globale Variablen DecimalSeparator und ThousandSeparator.
Diese werden beim Programmstart mit den Spracheinstellungen des Systems (Windows) geladen. Allerdings kannst du diese auch selber zuweisen:
Delphi-Quellcode:
Achtung: dieses gild dann für dein gesamtes Programm
// wenn du möchtest daß es immer in Englisch ist
DecimalSeparator := '.'; ThousandSeparator := ','; also entweder möchtest du daß es überall so ist, oder du setzt vorm Zugriff auf die INI diese Werte und setzt sie nach dem Zugriff wieder zurück (Werte natürlich vorher gespeichert) |
Re: Probleme mit Ini Dateien wg. Englischer Windows Verision
Achtung, wenn Du DecimalSeparator := '.' dauerhaft in Deinem Programm setzt, solltest Du auch Application.UpdateFormatSettings:=False setzen, da ansonsten eine WM_WININICHANGE Botschaft den Decimalseparator wieder überschreibt
|
Re: Probleme mit Ini Dateien wg. Englischer Windows Verision
Super :) Dass ich so schnell dank Euch schon eine Lösung habe, hätte ich gar nicht gedacht. Ihr seid genial.
|
Re: Probleme mit Ini Dateien wg. Englischer Windows Verision
Der "minimal-invasive" Ansatz für das Problem wäre allerdings nicht, programmweit die Einstellung zu ändern (du bekommst sonst mit Usereingaben wieder das gleiche Problem in Grün) sondern die Werte als Strings einzulesen und dann mit der erweiterten Version von StrToFloat in eine Fliesskommazahl zu konvertieren. Dieser Version kann man ein Template mitliefern, wie welche Zeichen zu interpretieren sind. Ich habe das ganze schonmal dokumentiert, weil die Frage immer wieder auftaucht. Ich such mal eben den Thread raus und reiche ihn nach.
Nachtrag: ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:52 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