Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.05.26;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.008 c
8-83615
IvanUdalov@mail.ru
2003-02-10 12:24
2003.05.26
генерация звука


3-83410
Kirill_S
2003-05-06 18:36
2003.05.26
вывести данные из TEdit в QReport


1-83592
dimon1979
2003-05-14 14:36
2003.05.26
Canvas(CopyRect)


14-83668
pet
2003-05-05 17:13
2003.05.26
smtp


3-83325
smol_cerber
2003-05-07 10:48
2003.05.26
BDE + Paradox таблицы версии 3.5 в DOS-кодировке





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский