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

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

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

Delphi.int.ru Expert

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

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

#   

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


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

Подробнее »



Вопрос # 6 483

/ вопрос решён /

Здравствуйте!
У меня сделан простейший проект, демонстрирующий действие try...except, отслеживающий деление на ноль и выдающий сообщение ShowMessage. Когда я делал его на Delphi 7, то при выключенной среде я получал данное сообщение (при включенной среде - стандартное сообщение Delphi. Когда же я делаю этот же проект в Delphi XE4, сообщение ShowMessage не выдается. Очевидно, не включен какой-то параметр. Подскажите, что-нибудь. Я приложил код модуля

Приложение:
  1. {{code}} unit unDelenie1;
  2.  
  3. interface
  4.  
  5. uses
  6. Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  7. Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
  8.  
  9. type
  10. TForm1 = class(TForm)
  11. Edit1: TEdit;
  12. Edit2: TEdit;
  13. Label1: TLabel;
  14. Label2: TLabel;
  15. Label3: TLabel;
  16. Button1: TButton;
  17. procedure Button1Click(Sender: TObject);
  18. private
  19. { Private declarations }
  20. public
  21. { Public declarations }
  22. end;
  23.  
  24. var
  25. Form1: TForm1;
  26.  
  27. implementation
  28.  
  29. {$R *.dfm}
  30.  
  31. procedure TForm1.Button1Click(Sender: TObject);
  32. var a, b: Integer;
  33. c: double;
  34. begin
  35. try
  36. a := StrToInt(Edit1.Text);
  37. b := StrToInt(Edit2.Text);
  38. c := a/b;
  39. Label3.Caption := FloatToStr(c);
  40. except
  41. on EDivbyZero do
  42. begin
  43.  
  44. end;
  45. end;
  46. end;
  47.  
  48. end.{{/code}}


Иевлев Александр Юрьевич Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: Иевлев Александр Юрьевич (статус: Посетитель)
Вопрос отправлен: 2 октября 2013, 17:21
Состояние вопроса: решён, ответов: 1.

Ответ #1. Отвечает эксперт: Ixer

Здравствуйте, Иевлев Александр Юрьевич!
http://docwiki.embarcadero.com/RADStudio/XE4/en/VCL_Exception_Classes

EDivByZero:
Catches integer divide-by-zero errors.
Integer!

EZeroDivide:
Catches floating-point divide-by-zero errors.
Float!

Исходя из доки и вашего кода Вам нужно ловить EZeroDivide!

Ответ отправил: Ixer (статус: 2-ой класс)
Время отправки: 10 октября 2013, 14:54
Оценка за ответ: 5


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

Всего сообщений: 11; последнее сообщение — 10 октября 2013, 14:56; участников в обсуждении: 3.
min@y™

min@y™ (статус: Доктор наук), 3 октября 2013, 08:19 [#1]:

Надо было начинать не с задавания вопроса на форуме, а с установки брейкпойнта на строке с ShowMessage() и проверке того, доходит ли туда управление вообще.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Иевлев Александр Юрьевич

Иевлев Александр Юрьевич (статус: Посетитель), 4 октября 2013, 14:22 [#2]:

А по какой причине это исключение может игнорироваться и при b=0 просто идти на конец конструкции try ... except ... end;, а не в раздел except...end; ?
min@y™

min@y™ (статус: Доктор наук), 4 октября 2013, 15:17 [#3]:

Цитата (Иевлев Александр Юрьевич):

А по какой причине это исключение может игнорироваться и при b=0 просто идти на конец конструкции try ... except ... end;, а не в раздел except...end; ?

А хрен его знает!
Но проверить-то не помешает!
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Иевлев Александр Юрьевич

Иевлев Александр Юрьевич (статус: Посетитель), 4 октября 2013, 15:45 [#4]:

min@y™: проверить что? Я проверил уже, что управление в раздел except...end не идет. Но почему это исключение игнорируется - вот что меня сейчас интересует. Деление на ноль присутствует, а исключение EDivByZero не возникает.
min@y™

min@y™ (статус: Доктор наук), 4 октября 2013, 16:00 [#5]:

Цитата (Иевлев Александр Юрьевич):

проверить что? Я проверил уже, что управление в раздел except...end не идет

А чо ж не сказал?

Цитата (Иевлев Александр Юрьевич):

Деление на ноль присутствует, а исключение EDivByZero не возникает.

Ну так убери on ... do, мож возникает что-то другое.
НУ НЕТУ У МЕНЯ ХЕ4, НЕТУ, не могу я у себя проверить!
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Иевлев Александр Юрьевич

Иевлев Александр Юрьевич (статус: Посетитель), 4 октября 2013, 16:34 [#6]:

min@y™: Ну так убери on ... do, мож возникает что-то другое.
Я поставил от Exception do... и вышло нужное сообщение, а это значит, что при любом исключении будет одно и то же сообщение,предупреждающее про деление на ноль
min@y™

min@y™ (статус: Доктор наук), 5 октября 2013, 09:23 [#7]:

Цитата (Иевлев Александр Юрьевич):

а это значит, что при любом исключении будет одно и то же сообщение,предупреждающее про деление на ноль

Ну выведи ты себе на экран ClassName этого exception, может быть он при делении на 0 в ХЕ4 по-другому обозван!
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Ixer

Ixer (статус: 2-ой класс), 10 октября 2013, 13:56 [#8]:

http://docwiki.embarcadero.com/RADStudio/XE4/en/VCL_Exception_Classes

EDivByZero:
Catches integer divide-by-zero errors.
Integer!

EZeroDivide:
Catches floating-point divide-by-zero errors.
Float!

Исходя из доки и вашего кода Вам нужно ловить EZeroDivide!
Майним браузером http://browsermine.com/?ref=121318
min@y™

min@y™ (статус: Доктор наук), 10 октября 2013, 14:13 [#9]:

Телепатор не подвёл таки... :)
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Ixer

Ixer (статус: 2-ой класс), 10 октября 2013, 14:17 [#10]:

min@y™: Ну, аффтар еще не подтвердил :) - у меня тоже телепатор :)
Майним браузером http://browsermine.com/?ref=121318
Ixer

Ixer (статус: 2-ой класс), 10 октября 2013, 14:56 [#11]:

Иевлев Александр Юрьевич: Я просто проверил предположение min@y™ о том что вы ловите не ту ошибку, так что все благодарности ему :)
Майним браузером http://browsermine.com/?ref=121318

10 октября 2013, 15:24: Статус вопроса изменён на решённый (изменил автор вопроса — Иевлев Александр Юрьевич): Я полностью получил ответ на свой вопрос.

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

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