Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.04.2008, 01:25   #1
Rend1
Пользователь
 
Регистрация: 21.01.2008
Сообщений: 26
По умолчанию try

Код:
procedure TForm1.SpeedButton4Click(Sender: TObject);
var
i:integer;
begin
try
if Edit2.Text<>'' then
 begin
i:=StrToInt(Edit2.Text);
Edit1.Text:=IntToHex(i,1);
 end;
  except
end;
 Edit1.Text:=IntToStr(0);
end;
что я делаю не так
вроде бы если ввести буквы а не цифры то программа не должна вылететь но почему-то не помогает
Rend1 вне форума Ответить с цитированием
Старый 24.04.2008, 01:38   #2
Баламут
Баламучу слегка...
Участник клуба
 
Аватар для Баламут
 
Регистрация: 01.11.2006
Сообщений: 1,585
По умолчанию

Так собственно и не вылетает... Исполняемый файл запускай не из под Делфи и должно быть все нормально. Иначе среда разработки берет на себя отработку исключений.
Баламут вне форума Ответить с цитированием
Старый 24.04.2008, 08:01   #3
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

такие вещи делать ( StrToInt ) лучше через val()
BOBAH13 вне форума Ответить с цитированием
Старый 24.04.2008, 09:23   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
такие вещи делать ( StrToInt ) лучше через val()
Не обязательно. Все равно все к val идет.
Автор, делай через TryStrToInt
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.04.2008, 14:31   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Stilet
Не обязательно. Все равно все к val идет.
Виталий, или я не понял, что Вы сказали, или, если правильно, понял, то тогда я с Вами не согласен... :-)
Дело в том, что VAL (который пришёл ещё из стандартного Pascal) не генерит исключение! Не при каких раскладах ;-))
Код:
var
  MyNumber, iErrCode : integer;
begin
  Val('ВОТ И ГУД!', MyNumber, iErrCode);
end;
вот, например, Exception'а не будет!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 24.04.2008, 15:18   #6
_Dmitry
Участник клуба
 
Аватар для _Dmitry
 
Регистрация: 02.09.2007
Сообщений: 1,193
По умолчанию

Цитата:
что я делаю не так
вроде бы если ввести буквы а не цифры то программа не должна вылететь но почему-то не помогает
Чтобы программа не "вылетала" убери галку из: Tools->Debugger Options...->Language Exceptions->Stop on Delphi Exceptions.
Посчитайте количество end-ов, строку Edit1.Text:=IntToStr(0); наверно, нужно поместить сразу после except.
Цитата:
Дело в том, что VAL (который пришёл ещё из стандартного Pascal) не генерит исключение! Не при каких раскладах ;-))
Зато исключение генерит StrToInt, вот эта функция из модуля SysUtils
Код:
function StrToInt(const S: string): Integer;
var
  E: Integer;
begin
  Val(S, Result, E);
  if E <> 0 then ConvertErrorFmt(@SInvalidInteger, [S]);
end;
_Dmitry вне форума Ответить с цитированием
Старый 24.04.2008, 15:32   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Серж, я имел ввиду что все равно вызывается функция val )
Просто она ну никак не лучше той же StrToInt )) - она просто исключения не вызывает.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.04.2008, 17:01   #8
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Серж, я имел ввиду что все равно вызывается функция val )
Просто она ну никак не лучше той же StrToInt )) - она просто исключения не вызывает.
странно, а кто говорил что она лучше ? я ее использую чтобы самому проверять, если надо, на не правильность ввода, т.е. ошибка <> 0 поэтому и предложил
BOBAH13 вне форума Ответить с цитированием
Старый 24.04.2008, 23:01   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Угу. Полностью согласен с ВОВАН!
Немного странно заключать в TRY
EXCEPT и обрабатывать исключение, которое сам же и вызваешь функцией StrToInt :-))

я уже не говорю о том. что блоки обработки исключений ИМХО, очень влияют на производительность! Поэтому искользовать их в больших циклах вычислений — тормозить своё приложение... ;-(
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц