От создания до уничтожения

 

Жизненный путь формы начинается в момент ее создания, когда инициируется событие:

propertyOnCreate: TNotifyEvent;

 

В табл. 9.3 приведена последовательность событий, возникающих при создании и выводе на экран новой формы.

 

Таблица 9.3. Основные события класса Tform

Собятия Описания
OnCreate() Создание формы. Обычно этот обработчик события используется для инициализации глобальных переменных формы и других подготовительных операций, необходимых для дальнейшей работы с формой.
OnShow() Форма с секунды на секунду будет выведена на экран. Событие происходит после вызова метода Show() или ShowModal() или присвоения свойству Visible формы значение true.
OnCanResize() Событие возникает перед изменением размера формы. Форма проверяет корректность своих новых размеров.
OnResize() Событие инициируется сразу после изменения размеров формы.
OnActivate() Форма становится ативной
OnPaint() Осуществляется перерисовка формы.

 

Особый интерес представляет событие, возникающее при перерисовке формы:

propertyOnPaint: TNotifyEvent;

 

Используя этот обработчик события, программист может рисовать на поверхности формы.

В череде событий перерисовки всех размещенных на форме элементов управления событие OnPaint() формы вызывается первым.

. . .

Public

BitMap:TBitMap;

end;

varForm1: TForm1;

Implementation

{$R *.DFM}

procedureTForm1.FormCreate(Sender: TObject);

Begin

BitMap:=TBitMap.Create;

BitMap.LoadFromFile('<Путь к растровому файлу .bmp>');

end;

procedureTForm1.FormPaint(Sender: TObject);

Begin

Form1.Canvas.Draw(0, 0, BitMap);

end;

procedureTForm1.FormClose(Sender: TObject; var Action: TCloseAction);

Begin

BitMap.Free;

end;

Старайтесь не злоупотреблять возможностями события OnPaint() формы. Перерисовка окна происходит довольно часто, поэтому вывод на холст формы больших изображений может значительно снизить производительность программы.

Не меньший интерес представляют события, возникающие при закрытии

формы. Для начала процесса закрытия формы необходимо вызвать метод:

procedureClose;

 

На рис. 9.4 представлена последовательность событий, возникающих у формы в процессе закрытия, а в табл. 9.4 приведено их краткое описание.

Таблица 9.4.События, сопровождающие процесс закрытия формы

События Описание
OnCloseQuery() Запрос разрешения на открытие формы.
OnClose() Форма закрывается.
OnDeactivate() Форма перестает быть активной.
OnHide() Форма скрывается с экрана.
OnDestroy() Форма уничтожена.

 

Перед закрытием формы производится вызов обработчика события:

propertyOnCloseQuery: TCloseQueryEvent;

typeTCloseQueryEvent = procedure(Sender: TObject; varCanClose: Boolean) of object;

 

Присвоение формальному параметру CanClose значения false отменяет закрытие формы. Ниже предложен пример, осуществляющий контроль за изменением текста в компоненте Memo1. Если текст модифицировался, то при попытке закрытия формы отображается диалоговое окно, предлагающее сохранить изменения.

procedureTForm1.FormCloseQuery(Sender: TObject; varCanClose: Boolean);

Begin

ifMemo1.Modified=true then

Begin

ifMessageDlg('Сохранить изменения в тексте?', mtConfirmation, [mbOk, mbCancel], 0) = mrOK then

Begin

//сохранение изменений в тексте

end elseCanClose := true;

end;

end;

 

Если форма получила разрешение на закрытие, далее генерируется событие:

propertyOnClose: TCloseEvent;

typeTCloseAction = (caNone, caHide, caFree, caMinimize);

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

 

Изменяя значение переменной Action (табл. 9.5), программист может управлять поведением закрываемой формы.

 

Таблица 9.5. Варианты закрытия формы TCloseAction

 

Значение Описание
caNone Ничего не происходит.
caHide Форма не закрывается, а только становится невидимой. К данной форме приложение имеет полный доступ. Значение по умолчанию для SID-форм.
caFree Форма закрывается и освобождает занимаемые ресурсы.
caMinimize Вместо закрытия форма сворачивается. Значение по умолчанию для MDI-форм.

 

Реальное уничтожение формы и освобождение всех задействованных ею системных ресурсов произойдет только в случае, если присвоить переменной

Action значение caFree. Только тогда будет вызвано событие:

 

propertyOnDestroy: TNotifyEvent;

 

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

компьютера.

Изменение размеров

 

Оба обработчика событий, связанные с изменением размеров формы, унаследованы от класса Tcontrol:

propertyOnCanResize: TCanResizeEvent;

typeTCanResizeEvent = procedure(Sender: TObject; varNewWidth, NewHeight: Integer; varResize: Boolean) of object;

и

propertyOnResize: TNotifyEvent;

 

Событие OnCanResize возникает перед изменением размера формы, например при растягивании границ формы мышью, при разворачивании/сворачивании формы или изменении размеров формы программным методом. Данный обработчик события предоставляет возможность контролировать приемлемость новых размеров; он содержит четыре параметра (табл. 9.6).

 

Таблица 9.6.Параметры события OnCanResize()

 

Параметры Описание
Sender Элемент-источник сообщения.
NewWidth Предлагаемый размер по горизонтали.
NewHeight Предлагаемый размер по вертикали.
Resize Переменная, разрешающая (true) или запрещающая (false) установить новый размер.

 

Допустим, что мы собираемся установить минимально допустимый размер

формы по горизонтали, равный 200 пикселам:

procedureTForm1.FormCanResize(Sender: TObject; varNewWidth, NewHeight: Integer; varResize: Boolean);

Begin

Resize:=(NewWidth>=200); //false, если размер менее 200

end;

 

Событие OnResize() инициируется сразу после изменения размеров формы.

Как правило, событие используется для перераспределения компонентов,

расположенных на форме.

Быстрые клавиши

 

При изучении класса TWinControl мы встретились с тремя событиями клавиатуры: OnKeyDown(), OnKeyPress() и OnKeyUp(). У формы предусмотрено дополнительное событие, контролирующее нажатие пользователем быстрых клавиш:

 

propertyOnShortCut: TShortCutEvent;

TShortCutEvent = procedure(varMsg: TWMKey; varHandled: Boolean) of object;

 

В очередности событий, связанных с работой на клавиатуре, OnShortCut() вызывается самым первым и поэтому успевает обработать комбинацию быстрых клавиш до того, как за дело берутся другие обработчики событий (как формы, так и элементов управления). Для того чтобы не допустить дальнейшую обработку быстрых клавиш в последующей цепочке событий, установите параметр Handled в true, тем самым вы укажете Windows, что обработка завершена. Параметр Msg соответствует стандартному сообщению Windows для обработки нажатия клавиши на клавиатуре.

Type

TWMKey = packed record

Msg : Cardinal;

CharCode : Word;

Unused : Word;

KeyData : Longint;

Result : Longint;

end;

 

Здесь параметр CharCode содержит код виртуальной клавиши (см. табл. 6.9

в главе 6). Параметр KeyData содержит дополнительную информацию: число

повторов данного сообщения, предыдущее состояние клавиши, состояние

дополнительных клавиш (таких как Alt, Ctrl). В поле Result будет записан результат обработки. Простейший пример использования данного обработчика события приведен ниже. Нажатие клавиши Esc (VK_ESCAPE) приведет к закрытию формы:

 

procedureTForm1.FormShortCut(varMsg: TWMKey; varHandled: Boolean);

Begin

ifMsg.CharCode=VK_ESCAPE thenClose;

end;

 

Вместе с тем в более ранних версиях Delphi (по Delphi 4 включительно) программисты вместо события OnShortCut() с таким же успехом перехватывали нажатия клавиш (прямо перед носом обескураженных элементов управления, находящихся в фокусе ввода) с помощью стандартных обработчиков событий. Но для этого необходимо было произвести ряд действий, и прежде всего установить свойство:

propertyKeyPreview:Boolean;

 

в значение true. Тогда активная форма (окно) обладала приоритетом при обработке нажатия клавиш.

procedureTForm1.FormKeyDown(Sender: TObject; varKey: Word; Shift: TShiftState);

Begin

ifssCtrl inShift then{если нажата клавиша Ctrl}

CaseKey of

VK_UP : Form1.Top:=Form1.Top-1;

VK_DOWN : Form1.Top:=Form1.Top+1;

VK_LEFT : Form1.Left:=Form1.Left-1;

VK_RIGHT : Form1.Left:=Form1.Left+1;

end;

end;

 

Приведенный пример демонстрирует, как можно научить форму перемещаться по экрану с помощью клавиш управления курсором.








Дата добавления: 2016-03-15; просмотров: 627;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.024 сек.