В стандартном приложении задача создания и удаления форм возлагается на само приложение. Если разработчик оставил все формы в списке создаваемых автоматически (см. главу 4), то после инициализации программы будут выполнены конструкторы всех форм проекта. При этом первой создается главная форма. По окончании работы программы все формы также автоматически уничтожаются.
При необходимости создать форму самостоятельно разработчик может использовать ее конструктор:
If Form1 = Nil Then Form1:= TForm1.Create(Application);
Или:
If not Assigned (Form2) then // Проверяем: оконный объект создан?
Form2:= TForm2.Create(Self); // Нет – создаем его
При необходимости уничтожить форму в еще работающем приложении используется метод Release:
If Form1 <> Nil Then Release;
При создании и уничтожении формы, соответственно, вызываются методы-обработчики OnСreate и OnDestroy.
Визуализация формы
Каждое следующее окно становится видно только после обращения к его методу Show или ShowModal.
При вызове метода Show второе окно появляется на экране и работает одновременно с первым, поэтому управление сразу передается оператору, стоящему за обращением к этому методу. Такие окна называются немодальными. Метод ShowModal создает модальное окно, которое полностью берет на себя дальнейшее управление программой, поэтому оператор за обращением к ShowModal в вызывающей части программы получит управление только после закрытия модального окна. Модальные окна всегда требуют от пользователя принятия какого-либо решения. С их помощью реализуется диалог с пользователем или создается информационное окно, которое пользователь должен закрыть после ознакомления с содержащейся в нем информацией. Если от пользователя требуется принятие решения, в модальное окно вставляются зависимые или независимые переключатели, кнопки и другие интерфейсные элементы, с помощью которых пользователь может сообщить программе о принятом решении. В момент закрытия диалога модальное окно должно поместить число, соответствующее решению пользователя, в свое свойство ModalResult. Некоторые стандартные кнопки (Ok, Yes, No, Cancel и т.п.) автоматически выполняют эти действия. Помещают нужное число в ModalResult и закрывают окно. В других случаях об этом должен позаботиться программист.
Закрытие формы обеспечивает метод Close, который сначала вызывает метод CloseQuery, определяющий возможность выполнения операции. Если он возвращает True, форма закрывается.
При закрытии формы можно использовать метод-обработчик OnCloseQuery. В нем на основе действий пользователя или анализа состояния приложения принимается решение о закрытии формы. Для закрытия формы параметр CanClose должен иметь значение True.
Видимостью формы можно управлять при помощи свойства Visible. Метод Hide изменяет значение свойства Visible на False.
При отображении формы можно использовать метод-обработчик OnShow, который вызывается при использовании методов Show или ShowModal.
Положение формы на экране и ее размеры определяет свойство Position. По умолчанию значение этого свойства равно poDesigned. При этом форма во время выполнения приложения появляется на том же месте и имеет тот же размер, что и во время разработки. В обычных приложениях удобно использовать значение poScreenCenter, которое определяет размещение формы в центре экрана без изменения размеров.
Каждая форма имеет свойство Canvas, которое обеспечивает рисование на ее поверхности. Размеры клиентской (рабочей) области формы, в которой можно размещать компоненты, определяются свойствами ClientHeight, ClientWidth, ClientRect.
При получении сообщения о необходимости перерисовки форма вызывает метод-обработчик OnPaint. Нарисовать линию на форму позволяют такие операторы:
With Canvas Do
Begin
Pen.Color:= clRed;
Pen.Width:= 10;
MoveTo(10, 10);
LineTo(ClientWidth – 10, ClientHeight – 10);
End;
Если этот фрагмент программы разместить в методе-обработчике OnPaint, то линия будет отображаться так же надежно, как и любой другой компонент.
Атрибуты и стили формы
Формы могут иметь вид MDI-приложения и SDI-приложения. Вид формы задается в свойстве FormStyle. Стиль fsNormal определяет обычную форму, использующуюся для решения самых различных задач, в том числе - для общего управления всей программой (главная форма). Стили fsMDIChild и fsMDIForm используются при создании так называемых многодокументных приложений в стиле MDI. Стиль fsStayOnTop используется для окон, которые всегда должны располагаться над всеми другими окнами программы.
Любое окно должно обладать определенным набором стандартных элементов управления. Это кнопка системного меню, кнопки изменения размеров и т.д. Наличие этих элементов на форме определяется свойством BorderIcons.
Существует несколько стилей форм, которые используются в различных ситуациях. Стиль формы определяется свойством BorderStyle. Это свойство может принимать следующие значения:
bsNone – на форме полностью отсутствуют все системные элементы управления, размеры такой формы нельзя изменить.
bsSingle – набор системных кнопок зависит от свойства BorderIcon.
bsSizeable – стандартная форма с возможностью изменения размеров.
bsDialog – стандартное диалоговое окно.
bsToolWindow – панель инструментов.
bsSizeToolWin – идентична bsSingle, но с уменьшенными системными элементами.