Если вы хотите продолжить использовать тот же подход проверки, просто улучшите свой алгоритм, чтобы учесть крайние случаи (и как вы хотите управлять этим).
Например, вы можете рассмотреть возможность принятия пустой строки какдопустимый ввод и просто не выбрасывайте исключение, или нет.Вы также должны подумать, как вы хотите выполнить взаимодействие с пользователем в случае неправильного ввода.Например, если пользователь вводит недопустимое число, вы хотите запретить пользователю вводить значения в ту же миллисекунду ... или вы можете использовать более естественный подход (например, проверку, пока пользователь не решит, что все правильно).
Вы также можете управлять проверкой, просто уведомив пользователя непрерывным способом во время ввода, просто создав видимый эффект над полями с ошибками и стоп-сигнал (например, с помощью сообщения).окно), если пользователь пытается сохранить данные.
Простая функция проверки может выглядеть следующим образом:
function IsEditValidFloat(Sender: TEdit; const AcceptBlank: Boolean = True): Boolean;
var
sValue: string;
Temp: Extended;
begin
sValue := Trim(Sender.Text);
if (sValue.Text = '') then
Result := AcceptBlank
else
Result := TryStrToFloat(sValue, Temp);
end;
//you might call this on the OnChangeEvent:
procedure TForm1.Edit1Change(Sender: TObject);
begin
if IsEditValidFloat(Sender as TEdit) then
ChangeDisplayState(Sender, dsValid)
else
ChangeDisplayState(Sender, dsError);
end;