Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.05.26;
Скачать: 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 вся ветка

Текущий архив: 2003.05.26;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.018 c
3-83414
Gnom
2003-05-06 17:16
2003.05.26
как напечатать отчет целиком (горизонталь)


4-83820
vvhedgehog
2003-03-31 17:17
2003.05.26
Написание своего компонента с отловом сообщений


6-83625
Жорик
2003-03-24 11:19
2003.05.26
Indy, D7 & HTTP....


1-83491
AstraS
2003-05-15 17:08
2003.05.26
QReport


7-83778
DimonZh
2003-03-25 21:39
2003.05.26
Работа с Force Feedback