|
Вопрос # 3 111/ вопрос открыт / |
|
Доброго времени суток, уважаемые эксперты!
Чтобы защититься от вылета по неправильному заполнения входных данных, предпринял стандартное, как мне казалось, действие : <Пример 1> см. аттач. Результат никакой - ругается в окошко, что данные неправильные.
Думаю, может эта проверка может включается - отключается в опциях компилятора? Пересмотрел все, что было под рукой, и ничего не нашел. Да и по логике : если есть такой обработчик искл. ситуации, то он ее обрабытывает, а нет - стандартная реакция. Но - не работает.
В одном Helpe, который у меня числится как kuliba2000.chm, нашел такой вариант : <Пример 2.>
Это укрепило меня в мысли, что нечего надеяться на try, а нужно писать свой простой фильтр входной инф.
Приложение: Переключить в обычный режим-
-
- try
- i := StrToInt (EdAd.Text) ;
- except
- on EConvertError do i := -1 ;
- end ;
-
-
-
-
-
-
-
-
- -----------------------------------------------------------
- procedure MyException(Sender:TObject; E:Exception);
-
- --------------------------------------------------------
- procedure TMyForm.MyException(Sender:TObject; E:Exception);
- begin
-
- if (E.ClassType.ClassName='EConvertError') then
- begin
-
- end
-
- end;
-
-
- --------------------------------------------------------
- procedure TMyForm.FormCreate(Sender: TObject);
- begin
-
- Application.OnException := MyException;
-
- end;
-
 |
Вопрос задал: Яуген Таляныч (статус: Посетитель)
Вопрос отправлен: 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 (статус: Посетитель), 23 августа 2009, 13:13 [#1]:
потому что надо отключить в настройках ide вылеты про обработке исключений. запусти свою программу не из под ide - всё будет нормально.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|