^ Проектирование графического интерфейса пользователя______________321

Application->MessageBox(("Требуется параметров — " +
IntToStr(st.i2) + "\п3адно параметров — " +

IntToStrfst. il)-) .c_str () ,

"He хватает информации",MB_ICONHAND I MB_OK) ;

>

Пример выдачи информации таким обработчиком исключения приведен на
рис. 4.31.

Пример выдачи сообщения об объекте исключения в виде        »^^^.-,^^^..^^^,-^^^^

:' m~mk Требуется параметров • Ъ
\   структуры                                                                            Задно параметров 2    ;

:^i;yii??^p^'""""'"Q^""""|j          ^

4.9.4.2 Исключение EAbort и функция Abort

В C++Builder имеется исключение EAbort, несколько отличающееся от рас-
смотренных ранее. Генерация этого исключения, как и любых других, прерывает
процесс вычисления. Но если приложение не отлавливает соответствующим бло-
ком catch исключений этого класса, то они попадают в обработчик TApplicati-
on::HandleException и там, в отличие от других исключений, разрушаются без
всяких сообщений. Таким образом, это «молчаливое» прерывание процесса вычис-
ления, при котором не должно отображаться диалоговое окно с сообщением об
ошибке.

Простейший путь генерации исключения EAbort — вызов функции Abort.
Например:

if (...) Abort() ;

Только нельзя путать две похожие внешне функции: Abort — генерация
«молчаливого» исключения, и abort — аварийное завершение программы.

Обычное применение EAbort — прерывание вычислений при выполнении не-
которого условия окончания или условия прерывания пользователем (например,
при нажатии клавиши Esc или какого-то оговоренного сочетания клавиш). Функ-
ция Abort прерывает текущую процедуру и все вызвавшие ее процедуры, переда-
вая управление на самый верх. Таким образом это наиболее простой выход из глу-
боко вложенных процедур. Впрочем, можно при необходимости перехватить иск-
лючение на каком-то промежуточном уровне, предусмотрев на нем блок try...catch
и вставив соответствующий оператор обработки:

catch(EAbort&)
(

)

4.9.5 Некоторые итоги

Мы кратко рассмотрели многие из вопросов, связанных с исключениями, но,
конечно, далеко не все. Был описан механизм работы с исключениями, свойствен-
ный C++. Однако, C++Builder может работать еще с другим механизмом — struc-
tured exceptions, использующим реализацию, свойственную 32-разрядным Win-
dows . По смыслу он подобен рассмотренному, но его синтаксис отличается от при-
веденного выше. Если вы хотите ознакомиться с этим механизмам, можете по-
смотреть его во встроенной справке C++Builder.

II Зак.764