Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 3 111

/ вопрос открыт /

Доброго времени суток, уважаемые эксперты!
Чтобы защититься от вылета по неправильному заполнения входных данных, предпринял стандартное, как мне казалось, действие : <Пример 1> см. аттач. Результат никакой - ругается в окошко, что данные неправильные.


Думаю, может эта проверка может включается - отключается в опциях компилятора? Пересмотрел все, что было под рукой, и ничего не нашел. Да и по логике : если есть такой обработчик искл. ситуации, то он ее обрабытывает, а нет - стандартная реакция. Но - не работает.
В одном Helpe, который у меня числится как kuliba2000.chm, нашел такой вариант : <Пример 2.>
Это укрепило меня в мысли, что нечего надеяться на try, а нужно писать свой простой фильтр входной инф.

Приложение:
  1.  
  2.  
  3. try
  4. i := StrToInt (EdAd.Text) ;
  5. except
  6. on EConvertError do i := -1 ;
  7. end ;
  8.  
  9.  
  10.  
  11.  
  12.  
  13.  
  14.  
  15.  
  16. -----------------------------------------------------------
  17. procedure MyException(Sender:TObject; E:Exception);
  18.  
  19. --------------------------------------------------------
  20. procedure TMyForm.MyException(Sender:TObject; E:Exception);
  21. begin
  22.  
  23. if (E.ClassType.ClassName='EConvertError') then
  24. begin
  25.  
  26. end
  27.  
  28. end;
  29.  
  30.  
  31. --------------------------------------------------------
  32. procedure TMyForm.FormCreate(Sender: TObject);
  33. begin
  34.  
  35. Application.OnException := MyException;
  36.  
  37. end;
  38.  


Яуген Таляныч Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Яуген Таляныч (статус: Посетитель)
Вопрос отправлен: 22 августа 2009, 17:53
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: min@y™

Не буду говорить тут эпитетов типа "хорош хренотенью занимаццо", а скажу, как делаю я.
В таких случаях я просто юзаю функцию TryStrToInt(). В модуле SysUtils.pas подобных функций полно:

Цитата:


TryEncodeDate function

Creates a TDateTime value that represents a specified Year, Month, and Day.

TryEncodeTime function

Creates a TDateTime value for a specified Hour, Min, Sec, and MSec.

TryFloatToCurr function

Converts a floating-point value to a Currency value.

TryFloatToDateTime function

Converts a floating-point value to a TDateTime value.

TryStrToBool function

Converts a string to a Boolean value, with a Boolean success code.

TryStrToCurr function

Converts a string to a Currency value, with a Boolean success code.

TryStrToDate function

Converts a string to a TDateTime value, with a Boolean success code.

TryStrToDateTime function

Converts a string to a TDateTime value with a Boolean success code.

TryStrToFloat function

Converts a given string to a floating-point value with a boolean success code.

TryStrToInt function

Converts a string that represents an integer (decimal or hex notation) to a number with Boolean success code.

TryStrToInt64 function

Converts a string that represents an integer (decimal or hex notation) to a number.

TryStrToTime function

Converts a string to a TDateTime value with an error default.


Судя по контексту вопроса, это именно то, что тебе и нужно.

Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 22 августа 2009, 18:25
Оценка за ответ: 4

Комментарий к оценке: Я дельфист начинающий, потому иногда мои попытки напоминают тень от этого растения. Указанные функции попробую. Но ворос остался открытым - почему штатная фича не работает. Для себя я проблему решил, и моя п/п, разобравшись, какая кодировка, сама переводит стоку каr Hex, так и Int, и только если уж совсем наворочено, выдает Error.

Мини-форум вопроса

Всего сообщений: 1; последнее сообщение — 23 августа 2009, 13:13; участников в обсуждении: 1.
lx

lx (статус: Посетитель), 23 августа 2009, 13:13 [#1]:

потому что надо отключить в настройках ide вылеты про обработке исключений. запусти свою программу не из под ide - всё будет нормально.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:29
Выполнено за 0.02 сек.