Вниз
Скачать: CL | DM;

Прерывание рассчета в случае исключения   Найти похожие ветки 

 
R2D2   (2003-05-13 20:45) [0]

Программа осуществляет рассчет (по нажатию кнопки). В этой процедуре вызываются функции (те в свою очередь вызывают еще "более глубокие" функции). В "опасной" функции вставлен обработчик try...except. Проблема состоит в том, чтобы в случае перехвата исключения перепрыгнуть (goto) сразу в конец процедуры-обработчика нажатия кнопки. Т.е: как выйти из "опасной" функции сразу в procedure TMain_Form.SolveButtonClick(Sender: TObject); (не проверять же в каждой функции было ли исключение в какой-нибудь из "подфункций")


 
shane54 ©   (2003-05-13 21:16) [1]

Если не ошибаюсь, вроде бы после возникновения исключения выполнение прерывается и ищется ловушка except. Соответственно не делая обработку исключения в "подфункциях", а только в самом обработчике на кнопку, можно добиться того, что он сработает в любом случае. Только его надо грамотно построить - т.е. сначала проверять ошибки деления на 0 (или что у тебя там может выскочить в твоих функциях), потом выход за пределы типов и уже в конце конструкцию типа

on E: Exception do

которая перехватит любое исключение.

Всё IMHO т.к. точно не помню.


 
Proton ©   (2003-05-14 06:46) [2]

procedure TForm1.Button1Click(Sender: TObject);
procedure sub;
begin
try
showmessage(inttostr(strtoint("0") mod strtoint("0")));
except
showmessage("??????? ?? ????!!!");
abort;
end;
end;
begin
sub;
showmessage("test");
end;


 
Спрашивающий   (2003-05-14 07:47) [3]

Любая подфункция может быть прописана в теле основной
с проверкой исключения
..................
try
Подфункция1(имя)
Подфункция2(имя)
.....................
except
Здесь если написать Exit основная
завершит свою работу, поэтому проблемы я не вижу.

end
.......................


 
JohnnyJ ©   (2003-05-14 12:19) [4]

Породить в блоке try..except "опасной" ф-йии исключение EAbort и все дела.


 
Bel ©   (2003-05-14 13:01) [5]

В процедуре TMain_Form.SolveButtonClick вызов функции сделать в блоке try...except. А в "более глубоких" функциях после обработки исключения, если надо, возбудить его опять (raise). Тогда исключение попадёт в блок except из TMain_Form.SolveButtonClick, а дальше делай, что хочешь.



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.013 c
1-83571
Sharik_212
2003-05-12 19:05
2003.05.26
Как запустить почтовую программу, которая определена по умолчанию


4-83792
Programmer1
2003-03-26 17:29
2003.05.26
Вызов функции PlaySound


14-83680
dbDev
2003-05-05 06:27
2003.05.26
Ресурсы.


7-83777
_sMile
2003-03-25 12:00
2003.05.26
Сжатие в памяти


14-83689
Dimius
2003-05-06 10:33
2003.05.26
KDR-1321 карт-риадер (card reader)




   Наверх