Вниз
Скачать: 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.012 c
7-83755
Andrio
2003-03-25 14:40
2003.05.26
Штрих-код ???


3-83377
gizar
2003-05-05 08:33
2003.05.26
ADOStoreProc и DBGrid


1-83468
Grac
2003-05-15 10:47
2003.05.26
Перевод в Integer


11-83425
Gandalf
2002-08-19 10:42
2003.05.26
KOLnMCK 1.41 !


14-83703
Manulo
2003-05-06 15:03
2003.05.26
*.h + Delphi = work




   Наверх