"Aufzwingen" sollte man einem User schon mal keinen Punkt oder Komma zu nutzen, das geht heutzutage doch viel eleganter:
Code: Alles auswählen
function GetFloat(ss: string): double;
var
bNeg: boolean;
iPos: integer;
begin
bNeg := Copy(ss, 1, 1) = '-';
if bNeg then
Delete(ss, 1, 1);
iPos := 1;
while iPos <= Length(ss) do
begin
if not (ss[iPos] in ['0'..'9', '.', ',']) then
Delete(ss, iPos, Length(ss) - iPos + 1);
Inc(iPos);
end;
ss := StringReplace(ss, '.', DefaultFormatSettings.DecimalSeparator, []);
ss := StringReplace(ss, ',', DefaultFormatSettings.DecimalSeparator, []);
Result := StrToFloatDef(ss, 0);
if bNeg then
Result := Result * (-1);
end;
Und auch beim Datum geht das Userfreundlicher und Flexiebler.
Code: Alles auswählen
dt := StrToDateDef(s, 0);
if dt = 0 then
begin
s := StringReplace(s, '.', DefaultFormatSettings.DateSeparator, [rfReplaceAll]);
dt := StrToDateDef(s, 0);
if dt = 0 then
begin
s := StringReplace(s, '/', DefaultFormatSettings.DateSeparator, [rfReplaceAll]);
dt := StrToDateDef(s, 0);
if dt = 0 then
begin
s := StringReplace(s, '/', '.', [rfReplaceAll]);
s := StringReplace(s, '-', '.', [rfReplaceAll]);
dt := StrToDateDef(s, 0);
end;
end;
end;
Also damit zwingt man einem gar nichts auf und die Konvertierung klappt immer. Schließlich programmiert man für einen User, der auch mal sich vertippt (. / ,). Versuche niemals den User zu ändern, sondern mache dein Programm flexibler und damit Benutzerfreundlicher.
Grüße Markus
PS: Meine Software läuft in vielen Ländern der Welt, sogar auch in Kyrillisch und niemand hatte sich bisher über eine Datums oder Zahleneingabe beschwert. Und ich kompiliere für Windows und Linux (32/64 Bit)