La logica non è esattamente... quella che sceglierei.
Se utilizzi componenti che possono contenere qualsiasi valore, devi incapsulare i cast espliciti, ogni volta, in un blocco try...except
try
converti
except
scrivi "non va bene"
end
try
converti
except
scrivi "non va bene2"
end
e così via, un unico blocco come fai non ha un gran senso (anzi, diciamocelo, nessuno).
riguardo poi alla pre-conversione, ovvero essere sicuro di passare una stringa che sia un float a strtofloat, ci sono vari approcci.
il più banale è quello di definire una funzione
purgafloat cui passi una stringa e che ti ritorna il float, con qualcosa del tipo
s:='';
i_stringa:=trim(i_stringa);
for i:=1 to length(i_stringa) do
begin
if (i_stringa[i]='.') then
s:=s+DECIMALSEPARTOR
else
if (i_stringa[i]=',' then
s:=s+DECIMALSEPARATOR
else
if (i_stringa[i] in ['0'..'9']) then
s:=s+i_stringa;
end;
puoi "condire" con un test sul segno (iniziale), potrebbe essere + e -, e sull'esistenza di uno (e un solo) separatore decimale o comunque carattere non numerico
Poi passi alla conversione