- •Глава 4. Базовые компоненты интерфейса
- •4.1. Компонент форма
- •4.1.1. Основные свойства формы
- •4.1.2. Разновидности форм
- •4.1.3. События формы
- •4.1.4. Методы формы
- •4.2. Создание пиктограммы для приложения
- •4.3. Общие свойства и события визуальных компонентов
- •4.3.1. Иерархия классов Delphi
- •4.3.1. Ключевые свойства элементов управления
- •4.3.2. Виды событий для элементов управления
- •4.4. Определение принадлежности к классу и приведение типов
- •4.5. Компоненты для отображения текста
- •4.5.1. Компонент метка Label
- •4.5.2. Компонент текстовая метка StaticText
- •4.6. Кнопки
- •4.6.1. Стандартная кнопка Button
- •4.6.2. Кнопка с рисунком BitBtn
- •4.6.3. Кнопка с фиксацией SpeedButton
- •4.7. Image – компонент для работы с изображениями
- •Image1.Picture.LoadFromFile('картинка.Bmp);
- •Interface
- •Implementation
- •Interface
- •Implementation
- •4.8. Поддержка справочной службы - всплывающие подсказки
- •Контрольные вопросы
- •Лабораторная работа
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