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