События, обрабатываемые формой

   
На этом шаге мы перечислим основные события, которые могут быть
обработаны формой.

   
Так как форма (компонент типа TForm) является базовым
интерфейсным элементом для
всех программ, создаваемых в среде Delphi, уместно начать знакомство
с обработчиков,
имеющихся у компонента TForm. Напомним, что их перечень можно
увидеть в Инспекторе
Объектов на вкладке Events:


Рис.1. Перечень событий, обрабатываемых
формой

   
Перечислим наиболее часто используемые:

  • OnActivate - возникает при активизации
    формы;
  • OnClose - возникает при закрытии формы;
  • OnCloseQuery - разрешает/отменяет
    закрытие формы;
  • OnCreate - возникает при создании формы;
  • OnDestroy - возникает при закрытии
    формы;
  • OnHide - возникает при "скрытии" формы;
  • OnPaint - возникает при необходимости
    перерисовки формы;
  • OnResize - возникает при изменении
    размеров формы;
  • OnShow - возникает при отображении
    формы.

   
Большинство событий и их обработчиков присущи и другим компонентам,
поэтому они рассматриваются в
следующих шагах. Здесь мы остановимся на событиях, характерных
непосредственно для формы.
Отметим, что эти события носят в большинстве своем нотификационный
(уведомляющий)
характер и имеют тип TNotifyEvent, описанный следующим образом:

   TNotifyEvent = procedure (Sender: TObject) of object;

но ряд обрабатываемых формой событий требует передачи дополнительной
информации. К их
числу относятся, например, события OnActivate, OnClose и
OnCloseQuery. Нотификационные
сообщения не несут в себе никакой информации о самом событии, только
содержат указатель на
источник события - параметр Sender.

Событие OnActivate

   
Форма получает событие OnActivate при ее активизации. Активизация
формы может произойти
при получении ею фокуса, например, когда пользователь нажал кнопку мыши в
рабочей области
формы. Для дочерних окон MDI-форм (форм, созданных со значением свойства
FormStyle, равным
fsMDIChild) событие OnActivate возникает при переключении
фокуса на данное
окно. Если же происходит переключение фокуса с обычного дочернего окна на
MDI-дочернее окно,
то это событие получает родительское MDI-окно.

   
Событие OnActivate носит нотификационный характер.

   
К началу

Событие
OnClose

   
Событие OnClose наступает при закрытии формы. Форма получает это
событие перед
закрытием формы, которое может наступить либо при вызове метода
Close, либо при
выборе команды Close из системного меню.

   
Событие OnClose имеет тип TCloseEvent, описанный следующим
образом:

   TCloseEvent = procedure (Sender: TObject; 
                         var Action: TCloseAction) of object;

   
Параметр Action определяет тип закрытия формы и может принимать
одно из следующих значений:

Таблица 1. Значения параметра
Action

ЗначениеОписание
caNoneФорму нельзя закрыть.
caHideФорма не закрывается, а становится невидимой.
caFreeФорма закрывается.
caMinimizeФорма минимизируется (окно формы сворачивается).

   
Проиллюстрируем использования параметра Action. Создадим новый
проект, выполнив
File | New | Application. Обработчик события OnClose выглядит
следующим
образом:

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  //Подтверждение на закрытие.
  If MessageDlg('Завершить приложение?',
     mtConfirmation, mbOkCancel,0)=mrOk Then
     Action:=caFree //Нажата Ok - закрываем форму.
  Else
     Action:=caNone; //Нажата Cancel - игнорируем закрытие.
end;

   
При закрытии формы на экран будет выведено диалоговое окно (рисунок 2):


Рис.2. Диалоговое окно, появляющееся при закрытии
приложения

Текст этого примера можно взять здесь.

   
К началу

Событие OnCloseQuery

   
С помощью этого события можно разрешить или отменить закрытие формы. Это
событие может наступить
либо при вызове метода Close, либо при выборе команды Close
из системного меню.
В обработчике этого события можно изменять значение параметра
CanClose сообщения OnCloseQuery.

   
Пример закрытия формы с подтверждением в этом случае может выглядеть
следующим образом:

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  //Подтверждение на закрытие.
  If MessageDlg('Завершить приложение?',
     mtInformation, [mbOk,mbNo], 0)=mrOk Then
     CanClose:=True //Нажата Ok - закрываем форму.
  Else
     CanClose:=False; //Нажата Cancel - игнорируем закрытие.
end;

Текст этого примера можно взять здесь.

   
Таким образом, событие OnCloseQuery имеет тип
TCloseQueryEvent, описанный следующим образом:

 TCloseQueryEvent = procedure (Sender: TObject; var CanClose: Boolean) of object;

   
К началу

Событие OnCreate

   
Это событие возникает при начальном создании формы. В обработчике данного
события можно,
например, задавать начальные значения свойствам формы и предусматривать
другие различные действия,
которые должны происходить в момент создания формы. Форма создается при
запуске приложения либо
при вызове метода Create.

Примечание. При создании формы события происходят в следующем
порядке:

  • OnCreate;
  • OnShow;
  • OnActivate;
  • OnPaint.

   
Это событие имеет тип TNotifyEvent.

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

   procedure TForm1.FormCreate(Sender: TObject);
   begin
      Form1.Color:=clAppWorkSpace;
   end;

Текст этого примера можно взять здесь.

   
К началу

Событие
OnDestroy

   
Событие OnDestroy возникает на финальной стадии закрытия формы и
может быть
вызвано с помощью методов Destroy или Free либо закрытием
главной формы приложения.
Это событие имеет тип TNotifyEvent.

   
К началу

Событие OnHide

   
Событие OnHide возникает при "скрытии" формы, то есть когда ее
свойство Visible принимает
значение False. Это событие имеет тип TNotifyEvent.

   
К началу

Событие
OnPaint

   
Событие OnPaint возникает при необходимости перерисовки
содержимого формы. Например,
оно может возникнуть при получении формой фокуса. Обработчик этого события
может отображать
информацию в рабочей области формы. Сообщение OnPaint имеет тип
TNotifyEvent.

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

unit Un_4_4;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm1 = class(TForm)
    procedure FormPaint(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
    TheBMP: TBitmap;//Создание ссылки на изображение.
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

//Обработчик события OnPaint.
procedure TForm1.FormPaint(Sender: TObject);
begin
    Form1.Canvas.Draw(0,0,TheBMP);//Вывод изображения.
end;

//Обработчик события OnCreate.
procedure TForm1.FormCreate(Sender: TObject);
begin
   TheBMP:=TBitmap.Create;//Создание нового объекта.
   //Загрузка изображения.
   TheBMP.LoadFromFile('C:\Windows\SYSTEM\pdbrowse.bmp');
end;

end.

Текст этого примера можно взять здесь.

   
К началу

Событие
OnResize

   
Событие OnResize возникает при изменении размеров формы во время
работы приложения.
Обработчик этого события необходим только в том случае, если вы планируете
выполнять какие-либо
действия при изменении размеров формы. Например, это может быть
перемещение интерфейсных элементов
или другие действия. Сообщение OnResize имеет тип
TNotilyEvent.

   
К началу

Событие
OnShow

   
Событие OnShow возникает, когда форма отображается (то есть когда
ее свойство
Visible принимает значение True). Это событие имеет тип
TNotifyEvent.

   
К началу

   
На следующем шаге мы рассмотрим основные события от клавиатуры и мыши.



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий