Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаба 1 Delphi7.doc
Скачиваний:
12
Добавлен:
04.11.2018
Размер:
1.03 Mб
Скачать

4.1.3. События формы

Рассмотрим основные события, участвующие в "жизни формы", список которых приведен в табл. 4.2.

При создании формы (у которой свойство Visible установлено в true), события произойдут в следующем порядке: OnCreate, OnShow, OnPaint, OnActivate, OnPaint, OnResize и снова OnPaint.

Таблица 4.2. События, генерируемые для формы

Событие

Описание события

OnCreate

Событие происходит при создании формы после выполнения конструктора. В обработчике этого события обычно устанавливают начальные значения для свойств формы и помещенных на нее компонентов, запрашивают у Windows необходимые ресурсы и выполняют другие действия, которые следует совершить до вывода формы на экран. Любые объекты, созданные OnCreate, будут уничтожены событием OnDestroy

OnShow

Событие происходит после того, как форма была создана, но перед тем, как она становится видимой

OnActivate

Это событие генерируется, когда форма становится активной, то есть когда форма получает фокус ввода

OnDeactivate

Событие наступает, когда форма теряет активность (фокус ввода)

OnPaint

Событие вызывается каждый раз, когда необходима перерисовка окна, например, при его перекрытии другим окном

OnResize

Событие происходит при изменении размеров окна

OnHide

Событие происходит перед тем, как форма становится невидимой

OnCloseQuery

Событие наступает при попытке закрыть форму, оно задается пользователем (кнопка Close) или программно (вызван метод Close). Событие можно использовать, чтобы предотвратить закрытие формы, т.к. в обработчик события передается булевский параметр CanClose, разрешающий или запрещающий действительное закрытие формы. Обычно, событие OnCloseQuery используется для того, чтобы спросить пользователя – уверен ли он в завершении работы приложения (возможно в приложении остались несохраненные данные)

Окончание табл. 4.2

OnClose

Событие происходит после OnCloseQuery. Если OnCloseQuery вернул CanClose=true (что указывает на то, что форма должна быть закрыта), то будет сгенерировано событие OnClose. Событие OnClose дает последний шанс, чтобы предотвратить закрытие формы. Его обработчик имеет параметр Action со следующими четырьмя возможными значениями: caNone – форме не разрешено закрыться (аналогично установке CanClose в false в OnCloseQuery), caHide – вместо закрытия, форма будет скрыта, caFree – форма будет закрыта, и занятые ей ресурсы будут освобождены, caMinimize – вместо закрытия, форма будет минимизирована (по умолчанию у дочерних форм MDI)

OnDestroy

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

Жизнь формы продолжается до тех пор, пока кто-нибудь не попытается закрыть форму с помощью метода Close или другим доступным способом (комбинацией <Alt>+<F4>, либо через системное меню, либо нажатием на крестик в верхнем правом углу формы). При уничтожении формы, события генерируются в следующем порядке: OnCloseQuery, OnClose, OnDeactivate, OnHide, OnDestroy. Когда главная форма будет закрыта, то работа приложения будет завершена.

Рассмотрим пример использования события OnCloseQuery: пусть требуется перед закрытием приложения запросить подтверждение на завершение работы с ним? Тогда обработчик события OnCloseQuery должен иметь вид:

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);

begin

if MessageDlg('Завершить работу приложения?', mtConfirmation, [mbOk, mbCancel], 0) = mrCancel

then CanClose:= False;

end;

В обработчике события OnCloseQuery вызывается окно с сообщением (рис. 4.3). Нажатие на кнопку Cancel приведет к установке параметра CloseQuery в значение false, что предотвратит выполнение метода Close.

Рис. 4.3. Вызов окна с сообщением функцией MessageDlg

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