Hast du theo's Vorschlag nicht verstanden? Das ist doch viel einfacher!
Hier nochmal dein Code aus dem 1.Beitag (deine eigenen Kommentare habe ich entfernt). Entferne einfach deine eigene Deklaration von DefaultFormatSettings, dann funktioniert alles ohne weitere Änderung. Denn DefaultFormatSettings in der Original-Deklaration in SysUtils wird für die String-Zahl-Konvertierung verwendet. Durch deine eigene Deklaration unter demselben Namen wird die richtige nicht mehr verwendet.
Code: Alles auswählen
var
Form1: TForm1;
// DefaultFormatSettings: TFormatSettings; <--- das muss weg, denn des ist bereits in SysUtils deklariert
implementation
{$R *.lfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
DefaultFormatSettings.DecimalSeparator:= '.'; // <--- Nun bezieht sich das auf die DefaultSettings in SysUtils, die in den Konvertierungsfunktionen verwendet werden
end;
//Test
procedure TForm1.Button1Click(Sender: TObject);
var
L_wert: UnicodeString; // <--- und warum hier UnicodeString und nicht String?
Lwert: Extended;
begin
L_wert:= '1.0';
Lwert:= StrTofloat(L_wert);
end;
Aber mein üblicher Vorbehalt in diesem Zusammenhang: Es ist bei uns nun mal üblich, Dezimalzahlen mit Komma zu schreiben, nicht mit Punkt. Eigens dafür gibt es die entsprechenden Betriebssystemeinstellungen. Wenn du das umgehst, wird dein Programm für jeden Nicht-Programmierer unnötig schwer benutzbar. Denn er erhält bei jeder Eingabe des für ihn gewohnten Kommas eine Fehlermedlung. Solche Software überlebt auf meinem Rechnen nur den 1. Start. Wenn du unbedingt Zahlen mit Punkt eingeben willst, dann ändere es im Betriebssystem deines Rechners, dann verhalten sich auch alle anderen Programme so. Und wenn deine Kunden lieber das Komma wollen, dann funktioniert alles wie gewohnt.