Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
laboratornye_Delphi.doc
Скачиваний:
16
Добавлен:
17.05.2015
Размер:
2.78 Mб
Скачать

Процедуры и функции, реализующие диалоговые окна

Delphi предлагает ряд специальных процедур и функций для отображения простых диалоговых окон общего назначения:

  • Procedure ShowMessage(const Msg: string); отображает окно сообщения с кнопкой OK. Заголовок содержит название исполняемого файла приложения, а строка Msg выводится как текст сообщения (рис. 14.2);

  • Function MessageDlg(const Msg: string; DlgType: TMsgDlgType; Buttons: TMsgDlgButtons; HelpCtx: Longint): Word;

отображает окно сообщения в центре экрана и позволяет получить ответ пользователя. Параметр Msg содержит отображаемое сообщение. Окно сообщения может относиться к различным типам и наряду с сообщением содержать картинки. Тип окна определяется параметром DlgType, который может принимать следующие значения:

  • mtWarning;

  • mtError;

  • mtInformation;

  • mtConfirmation;

  • mtCustom.

Параметр Buttons является множеством, определяет набор кнопок окна и может принимать любые комбинации следующих значений:

  • mbYes кнопка Yes;

  • mbNo кнопка No;

  • mbOK кнопка OK;

  • mbCancel кнопка Cancel;

  • mbHelp кнопка Help;

  • mbAbort кнопка Abort;

  • mbRetry кнопка Retry;

  • mbIgnore кнопка Ignore;

  • mbAll кнопка All.

Для значения параметра Buttons имеются константы, задающие предопределенный набор кнопок:

mbYesNoCancel=[ mbYes, mbNo, mbCancel];

mbOKCancel=[ mbOK, mbCancel];

mbYesAllNoAllCancel = [mbYes, mbYesToAll, mbNo, mbNoToAll, mbCancel];

mbOKCancel = [mbOK, mbCancel];

mbAbortRetryIgnore = [mbAbort, mbRetry, mbIgnore];

mbAbortIgnore = [mbAbort, mbIgnore].

При нажатии любой из указанных кнопок (кроме Help) диалоговое окно закрывается, а результат (свойство ModalResult) возвращается функцией MessageDlg. Различные виды окон сообщений, созданные этой функцией, показаны на рис. 14.3;

  • function MessageBox(const Text, Caption: PChar; Flags: Longint = MB_OK): Integer;

отображает окно сообщения с заголовком Caption и позволяет получить ответ пользователя. Параметр Text содержит отображаемое сообщение. Параметр Flags задает кнопки окна и может принимать значения:

  • MB_ABORTRETRYIGNORE (кнопки Abort, Retry,Ignore)

  • MB_OK (кнопка OK, определена по умолчанию).

  • MB_OKCANCEL (кнопки OK, Cancel)

  • MB_RETRYCANCEL (кнопки Retry, Cancel)

  • MB_YESNO (кнопки Yes, No)

  • MB_YESNOCANCEL (кнопки Yes, No, Cancel)

В зависимости от выбора пользователя, функция возвращает значения:

IDOK =1 выбрана кнопка OK;

IDCANCEL =2 Cancel;

IDABORT =3 Abort;

IDRETRY =4 Retry;

IDIGNORE =5 Ignore;

IDYES =6 Yes;

IDNO =7 No.

Рис. 14.3. Виды окон сообщений функции MessageDlg

Обработчики исключений

В Object Pascal предусмотрены средства перехвата ошибок, возникающих при выполнении программы в виде исключений. В приложениях, использующих модуль SysUtils, исключение генерируется, когда происходит ошибка или другое событие, нарушающее нормальную работу программы. Сгенерированное исключение передает управление обработчику исключения, т.е. фрагменту кода, выполняющемуся при наступлении ошибки. Синтаксис операторов защиты от ошибок имеет вид

Try

{Защищенные операторы}

Except

{операторы обработки исключения}

[Else

{ операторы обработки исключения по умолчанию}

]

End;

Операторы, следующие за ключевым словом try, называются защищенными операторами и реализуют нормальную логику программы. Если при выполнении защищенных операторов происходит ошибка, то генерируется исключение и выполняются операторы, расположенные за ключевым словом except. Таким образом, раздел except выполняется, если исключение произошло при выполнении раздела try. Обработчик исключений, возникших в защищенных операторах, обрабатывает также исключения, появившиеся в программах, вызванных из защищенного фрагмента.

Когда защищенный оператор генерирует исключение, управление немедленно передается в раздел except. Затем приложение пытается определить обработчик, применимый для текущего исключения. Если поиск успешен, то выполняются его операторы, после этого объект исключения автоматически уничтожается. Если применимый обработчик не найден, то выполняется раздел else, содержащий обработчик по умолчанию (если он есть). Затем выполнение программы продолжается начиная с оператора, следующего за блоком except (т.е. расположенного за ключевым словом end).

Оператор on определяет обработчик заданного типа исключений. Операторы on располагаются в разделе except блока try.. except. Общий синтаксис оператора on имеет следующий вид

on [идентификатор_исключения:] тип_исключения do begin

[операторы_обработки_исключения; ] end;

Необязательный идентификатор исключения используется для ссылки на объект исключения, тип которого задан в операторе on. Типы исключений перечислены в приложении.

Чтобы обработчик исключений не прерывал выполнения программы в среде разработки Delphi (которая сама перехватывает ошибки), нужно отключить режим интегрированной отладки: меню Tools→Debugger Options... (Инструменты→Параметры отладки...), активизировать вкладку Language Exceptions (Исключения языка), снять флажок Stop on Delphi Exception (Перехват исключений средой разработки) и нажать кнопку ОК (рис. 14.4).

Рис. 14.4. Окно Debugger Options с флажком Integrated debugging

Кроме блока tryexcept в Delphi есть конструкция try .. finally, имеющая следующую форму:

try

// Операторы, выполнение которых может вызвать ошибку

finally

// Операторы, которые должны быть выполнены даже в случае ошибки

end;

Она применяется для выполнения всех необходимых действий перед передачей управления на следующий уровень обработки ошибки или глобальному обработчику. В результате таких действий может произойти, например, освобождение опера­тивной памяти или закрытие файла. Эта конструкция не обрабатывает объект исключительной ситуации и не удаляет его, а выполняет действия, которые должны быть осуществлены даже в случае возникновения ошибки.

Работает конструкция tryfinally следующим образом: если в любом из операторов блока try возникает исключительная ситуация, то управление пере­дается первому оператору блока finally. Если же исключительная ситуация не возникла, то последовательно выполняются все операторы обоих блоков.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]