19.3.
СОЗДАНИЕ И ИСПОЛЬЗОВАНИЕ ФОРМ
Для подключения новой формы к проекту
достаточно обратиться к репозиторию и выбрать нужную разновидность формы. Менеджер
проекта автоматически подключает новую форму к списку используемых форм и обеспечивает
все необходимые действия по ее инициации. Самая первая подключенная к проекту
форма (стандартное имя формы - Form1) становится главным окном программы. Окно
этой формы автоматически появляется на экране в момент старта программы. Впрочем,
программист может указать любую форму, окно которой станет главным. Для этого
нужно обратиться к опции
Project | Options
И, раскрыв
список Main form, выбрать нужную
форму
(рис. 19.1).
Pис 19.1.
Окно
управления проектом
Каждое следующее окно становится
видно только после обращения к его методу show или showModal. Чтобы обратиться
к этим методам, нужно сослаться на объект-окно, который автоматически объявляется
в интерфейсном разделе связанного с окном модуля. Для этого, в свою очередь,
главное окно должно знать о существовании другого окна, что достигается ссылкой
на модуль окна в предложении uses. Если, например, в ходе выполнения одного
из методов главного окна программист захочет вызвать окно с именем fmForm, связанное
с модулем Formunit, он должен сослаться на этот модуль в предложении uses главного
окна:
implementation
Uses
FormUnit;
после чего вызвать окно на экран:
fmForm.Show;
или
fmForm.ShowModal;
Delphi автоматизирует вставку ссылки
на модуль в предложение uses. Для этого на этапе конструирования нужно активизировать
главное окно, щелкнув по нему мышью, после чего обратиться к опции File | uses
unit. В появившемся диалоговом окне (рис. 19.2) нужно выбрать модуль и нажать
ок. Вставляется ссылка в предложение, стоящее за зарезервированным словом Implementation,
т. к. обычно главное окно в своей интерфейсной части не ссылается на элементы
интерфейсной части второго окна. Точно так же можно при необходимости сослаться
в модуле второго окна на модуль главного окна: активизируйте второе окно и вновь
вызовите опцию File | uses Unit. Замечу, что, если программист забыл сослаться
на модуль, который подключен к проекту, Delphi при первой же трансляции программы
сообщит об этом и предложит вставить недостающую ссылку.
Рис. 19.2
.
Вставка ссылки на модуль
При вызове метода show второе окно
появляется на экране и работает одновременно с первым, поэтому управление сразу
передается оператору, стоящему за обращением к этому методу. Такие окна называются
немодальными, они всегда открываются в одном методе, а закрываются в другом.
В отличие от этого обращение к show-Modal создает модальное окно, которое полностью
берет на себя дальнейшее управление программой, поэтому оператор за обращением
к showModal в вызывающей части программы получит управление только после закрытия
модального окна.
Модальные окна всегда требуют от
пользователя принятия какого-либо решения. С их помощью реализуется диалог с
пользователем или создается информационное окно, которое пользователь должен
закрыть после ознакомления с содержащейся в нем информацией. Если от пользователя
требуется принятие решения, в модальное окно вставляются зависимые или
независимые переключатели, кнопки
и другие интерфейсные элементы, с помощью которых пользователь сможет сообщить
программе о принятом решении. В момент закрытия диалога модальное окно должно
поместить число, соответствующее решению пользователя, в свое свойство ModalResuit.
Некоторые стандартные кнопки (ok, Yes, No, cancel и т. п.) автоматически выполняют
эти действия: помещают нужное число в ModalResuit и закрывают окно. В других
случаях об этом должен позаботиться программист. Вызывающая программа получает
значение ModaiResuit как значение функции showModal и может тут же его проанализировать:
if
Form2.ShowModai = mrXXX
then ....
Возможен и такой вариант:
Form2.ShowModal ;
if
Form2.ModaiResuit
= mrXXX
then .....
Для закрытия окна (модального или
немодального) используются методы Hide или close. Следует учесть, что метод
Close всегда помещает в ModalResult значение 2 (mrCancel), в то время как Hide
неt меняет значения этого свойства, поэтому, если программист хочет передать
в вызывающую программу нестандартный модальный результат, следует писать:
ModaiResuit := MyResult;
Hide; //
Но ни в коем
случае Close!
Примечание
Подключение нового окна к проекту
приводит к тому, что менеджер;
проекта
размещает его имя в списке автоматически создаваемых окон на рис. 19.1 -список
Auto-Create forms). В этом случае про-Дкшмист может не заботиться об инициации,
соответствующего объекта окна. Однако если в программе используется множество
окон, автоматическое их создание в момент старта программы может существенно
затянуть во времени процесс загрузки программы; В то же Демя немедленное создание
всех окон вовсе не обязательно, так как вряд ли вам понадобится одновременно
показывать их на экране в немодальном режиме. Профессиональные программисты
никогда не создают: все оконные объекты в момент старта программы, но используют
их по мере надобности. Дчя .этого в окне менеджера проекта ссылки на эти формы
переносятся в панель Available forms (рис. 19.1), а обращение к окну .
Мне известен случай, когда этот
нехитрый прием позволил сократить время загрузки программы с З с лишним минут
до 15 секунд.
Кстати, полезно соответствующим
образом настроить среду Delphi: вызовите Tools I Environment Options и на
странице Designer уберите флажок в преключателе Autоcreate forms & data
modules.