Guten Morgen.
Wir sollten immer daran denken, dass die von der
Unit SysUtils importierten Systemeinstellungen (DecimalSeparator, ThousandsSeparator) das Format der interaktiven Eingaben (TEdit) diktieren. Ist nicht schön, wenn eine Anwendung von vielen, die eventuell sogar gleichzeitig geöffnet sind, sich nicht an die Systemvorgaben hält.
Ein Sonderfall ist die nicht interaktive Übernahme von Display-Daten z.B. aus Dateien. Hier würde ich (D3) die Zeichenketten vorbehandeln und dann der normalen Verarbeitung zuführen:
Delphi-Quellcode:
function Translate(const s, sOld, sNew: String): String;
var
i, iPos, iLen: integer;
begin
SetLength(Result, Length(s));
iLen := 0;
for i := 1 to Length(s) do
begin
iPos := Pos(s[i], sOld);
if iPos > Length(sNew) then
Continue;
Inc(iLen);
if iPos > 0
then Result[iLen] := sNew[iPos]
else Result[iLen] := s[i];
end;
SetLength(Result, iLen);
end;
procedure TDemoForm.ButtonClick(Sender: TObject);
var
e: Extended;
begin
e := StrToFloat(Translate('123,456.78', '.,', ',.'));
end;
In D7 ist das nicht nötig. Dort stehen GetLocaleFormatSettings() und die überladenen Konvertierungsfunktionen zur Verfügung.
Grüße vom marabu
Edit: Fehler in Translate() korrigiert...