004 — Создание новой формы и подключение ее к главной форме программы

Создание новой формы и подключение  ее к главной форме программы


Содержание


Условие задачи

Нужно к главной форме Form1 добавить новую форму Form2 в приложении.

В главной форме Form1:

  • создать кнопку «Show Form — 2» для вызова новой формы;
  • вывести сообщение в Form1 о результате возврата из Form2.

В новой форме Form2:

  • создать две кнопки с названиями «OK» и «Cancel»;
  • запрограммировать реакцию формы на нажатие мышкой (клавиатурой) на соответствующей кнопке.
    Схема взаимодействия между формами изображена на рисунке 1.

01_02_00_004_01r

Рис. 1. Схема взаимодействия между формами


Выполнение

1. Запустить Embarcadero Delphi 2010. Создать проект по шаблону VCL Forms Application

Подробный пример создания нового проекта по шаблону VCL Forms Application описывается здесь.

Сохранить проект и главную форму с именем «MainForm» в некоторую папку. Автоматически главной форме присваивается имя Form1 (свойство Name в Object Inspector).

 

2. Проектирование главной формы Form1

Вынести на главную форму компоненты типа TLabel и TButton. Соответственно имена компонент будут Label1 и Button1.

В свойстве «Caption» компонента Label1 вписываем текст «Result =». В свойстве «Caption» компонента Button1 вписываем текст «Show Form 2».

Главная форма проекта имеет вид, изображенный на рисунке 2.

01_02_00_004_02_

Рис. 2. Главная форма Form1

 

3. Добавление новой формы в проект

Новая форма в проект добавляется путем вызова последовательности комманд (рис. 3):

File -> New -> Form Delphi

01_02_00_004_03_

Рис. 3. Добавление новой формы в проект

В результате, на экране появится новая пустая форма (рис. 4). Получить доступ к свойствам и методам (процедурам и функциям) этой формы можно с помощью имени Form2 по умолчанию.

01_02_00_004_04_

Рис. 4. Новосозданная форма с именем Form2

В Object Inspector имя формы отображается в свойстве Name. По желанию можно изменить название формы.

Сохранить новую форму в файле можно с помощью команды

File -> Save All

Каждая новая форма сохраняется в отдельном файле (модуле). По умолчанию Delphi предлагает имя Unit2.pas. Оставим все как есть.

Автоматически, кроме модуля Unit2.pas, создается файл описания формы Unit2.dfm.

Таким образом, имеем две формы с такими же именами в программе (свойство «Name»):

  • Form1 — основная форма (размещается в модуле MainForm.pas);
  • Form2 — второстепенная форма (размещается в модуле Unit2.pas).

 

4. Настройка вида новой формы

Для настройки корректного вида новой формы (Form2) выполняем следующие действия.

  1. Выносим на форму две кнопки (компонент типа TButton) и одну метку (TLabel). Получаем три переменные-компоненты с такими именами: Button1, Button2, Label1.
  2. Свойство Caption компонента Button1 устанавливаем в значение «OK».
  3. Свойство Caption компонента Button2 устанавливаем в значение «Cancel».
  4. Свойство Caption компонента Label1 устанавливаем в значение «Form — 2».

По желанию можно настроить и другие свойства формы Form2.

После внесенных изменений и корректировки положения компонент на форме Form2 окно новой формы будет иметь приблизительно такой вид как изображено на рис. 5.

01_02_00_004_05_

Рис. 5. Вид дочерней формы после корректировки

 

5. Подключение формы 2 к модулю формы 1

Для того, чтобы получить результат возврата из формы 2 (Form2) или иметь доступ к методам или свойствам формы 2 нужно подключить ее к главной форме.
Это осуществляется с помощью директивы uses в начале текста модуля главной формы в разделе implementation.

...
implementation

uses Unit2;

...

end.

 

6. Вызов дочерней формы из главной формы

Для вызова дочерней формы (Form2) программируем событие клика мышкой на кнопке «Show Form 2″.
Листинг программного кода этого события следующий.

procedure TForm1.Button1Click(Sender: TObject);
var
 res:word;
begin
  // вызываем дочернюю форму
  res := Form2.ShowModal; 
  if res=mrOk then
    Label1.Caption := 'Result = OK'
  else
    Label1.Caption := 'Result = Cancel';
end;

Непосредственный вызов дочерней формы осуществляется с помощью функции ShowModal, возвращающей одно из двух значений (см. п. 7):

  • mrOk – означает, что в дочерней форме Form2 нажата кнопка «OK«;
  • mrNo – означает, что в дочерней форме Form2 выбрано «Cancel«.

 

7. Программирование событий в форме 2

Главной задачей есть определение того, какую кнопку нажал пользователь в дочерней форме Form2. От этого зависит выполнение программы. Например, если выбрана кнопка «OK», то это может означать выполнение каких-либо действий (чтение из файла, вывод на печать и т.д.).

В нашем случае программируем два события в модуле формы 2 (Unit2.pas):

  • клик мышью на кнопке «OK» (Button1);
  • клик мышью на кнопке «Cancel» (Button2).

Листинг программного кода обработки этих событий имеет вид.

procedure TForm2.Button1Click(Sender: TObject);
begin
  // закрытие формы с кодом возврата mrOk
  ModalResult := mrOk; 
end;

procedure TForm2.Button2Click(Sender: TObject);
begin
  // закрытие формы с кодом возврата mrNo
  ModalResult := mrNo; 
end;

Внешняя глобальная переменная ModalResult формы Form2 определяет поведение формы. Как только ModalResult становится равным ненулевому значению (mrOk или mrNo), то форма закрывается с соответствующим кодом возврата.

В результате вызова из главной формы функции

Form2.ShowModal;

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

Если пользователь выбрал кнопку «OK», то ShowModal (см. п.6) возвратит значение mrOk. В другом случае ShowModal возвратит значение mrNo.

Теперь можно запустить программу на выполнение и протестировать ее.


Вывод

В этой статье было изучено особенности подключения к главной форме программы дочерней формы. Среди рассмотренных вопросов следующие.

  1. Создание дочерней формы (File -> New Form).
  2. Подключение дочерней формы к главной форме (uses Unit2).
  3. Вызов (отображение) дочерней формы из главной формы (ShowModal) и обработка результата возврата.
  4. Обработка событий подтверждения (не подтверждения) выполненной работы в дочерней форме с помощью глобальной переменной ModalResult.


Связанные темы