Работая с несколькими формами, вы должны принимать во внимание, что после загрузки приложения отображается только главная форма. Остальные формы хотя и создаются вслед за ней автоматически, на экране сразу не показываются, а ждут пока их вызовут. Форму можно вызвать для работы двумя разными способами:
- вызвать для работы в обычном режиме с помощью метода Show. В этом режиме пользователь может работать одновременно с несколькими формами, переключаясь между ними;
- вызвать для работы в монопольном режиме с помощью метода ShowModal. В этом режиме пользователь не может переключиться на другую форму, пока не завершит работу с данной формой;
Покажем, как реализуются эти способы на примере вызова формы SecondaryForm из формы MainForm.
Чтобы форма SecondaryForm была доступна для использования формой MainForm, необходимо подключить модуль формы SecondaryForm к модулю формы MainForm. Это делается очень просто.
1. Активизируйте форму MainForm и выберите в главном меню команду File | Use Unit... . В появившемся диалоговом окне выберите модуль Second (так называется модуль формы SecondaryForm) и нажмите кнопку OK (рисунок 7.34).
Рисунок 7.34. Окно для выбора подключаемого модуля
На экране не произойдет видимых изменений, но в секции implementation программного модуля Main добавится строка
Теперь обеспечим вызов формы SecondaryForm из формы MainForm. В большинстве случаев формы вызываются при нажатии некоторой кнопки. Добавим такую кнопку на форму MainForm.
2. Отыщите в палитре компонентов на вкладке Standard значок с подсказкой Button, щелкните по нему, а затем щелкните по форме MainForm. На форме будет создана кнопка Button1 и в окне свойств отобразится список ее свойств. Перейдите к свойству Caption и замените текст Button1 на текст Secondary (рисунок 7.35).
Рисунок 7.35. Текст на кнопке записывается в свойстве Caption
Чтобы при нажатии кнопки отображалась форма SecondaryForm, необходимо для этой кнопки определить обработчик события OnClick. Это делается очень просто.
3. Активизируйте в окне свойств вкладку Events и сделайте двойной щелчок в поле события OnClick. Среда Delphi определит для кнопки обработчик события, поместив программную заготовку в исходный текст модуля Main. Вставьте в тело обработчика оператор SecondaryForm.Show, в результате метод обработки события примет следующий вид:
procedure TMainForm.Button1Click(Sender: TObject);begin SecondaryForm.Show;end; |
4. Выполните компиляцию и запустите приложение. Когда на экране покажется форма MainForm, нажмите кнопку Secondary. На экране покажется еще одна форма — SecondaryForm. Вы можете произвольно активизировать любую из двух форм (рисунок 7.36).
Рисунок 7.36. Приложение с двумя формами на экране
Таким образом, при использовании метода Show пользователь может работать одновременно с несколькими формами, переключаясь между ними.
Внимание! Переключаясь между формами MainForm и SecondaryForm, вы можете предположить, что они равноправны. Однако на самом деле это не так. Форма MainForm является главной, а форма SecondaryForm — второстепенной. В чем это проявляется? Да хотя бы в том, что если вы закроете форму MainForm, то форма SecondaryForm тоже закроется, и приложение завершится. Если же вы закроете формуSecondaryForm, то форма MainForm на экране останется.
Ситуация, когда пользователю предлагается для работы сразу несколько доступных форм, встречается редко. Поэтому для показа формы в основном применяется метод ShowModal. Он обеспечивает работу формы в монопольном режиме, не возвращая управление до тех пор, пока пользователь не закроет форму.
5. Посмотрим, что произойдет, если в предыдущем примере заменить вызов метода Show на ShowModal.
procedure TMainForm.Button1Click(Sender: TObject);begin SecondaryForm.ShowModal;end; |
6. После компиляции и запуска приложения нажмите на форме MainForm кнопку Secondary. После появления формы SecondaryForm попробуйте активизировать форму MainForm. У вас ничего не выйдет, поскольку на этот раз форма SecondaryForm отображается в монопольном режиме (рисунок 7.37).
Рисунок 7.37. Вторая форма работает в монопольном режиме
Только закрыв форму SecondaryForm, вы вернетесь к форме MainForm. Теперь понятно и назначение метода ShowModal. С его помощью организуется пошаговый (диалоговый) режим взаимодействия с пользователем, который подробно рассмотрен в главе 9.
На этом мы закончим разговор о формах и перейдем к их содержимому — компонентам.