Hola.
Además de lo dicho por los compañeros, también podrías validar el valor flotante al momento del ingreso, v. gr.:
Código Delphi
[-]
...
implementation
const
PTOS = '...';
type
TConvertResult = (crOK, crCancel, crError);
function ChainToFloat(var Value: Double; const Title, Caption: string;
const DecimalSeparator: Char = '.'): TConvertResult;
var
str : string;
FS : TFormatSettings;
begin
FS.DecimalSeparator := DecimalSeparator;
str := InputBox(Title, Caption, PTOS);
Result := crError;
if str = PTOS then
Result := crCancel
else if TryStrToFloat(str, value, FS) then
Result := crOk
else
ShowMessage('Error de conversión');
end;
procedure TForm1.Button3Click(Sender: TObject);
var
nro: Double;
i : Integer;
r : TConvertResult;
begin
i := 1;
repeat
r := ChainToFloat(nro, 'Precio', 'Ingrese el precio:',',');
if r = crOk then
begin
Lista.Items.Add(FloatToStr(nro));
Inc(i);
end;
until (i = 4) or (r = crCancel)
end;
...
Y también agregar que, dependiendo con que Delphi estas trabajando, la función
StrToFloatDef ya está incluída en la unidad
SysUtils (al menos versión 7 y posteriores).
Saludos