Создание новой формы и подключение ее к главной форме программы
Содержание
- Условие задачи
- Выполнение
- 1. Запустить Embarcadero Delphi 2010. Создать проект по шаблону VCL Forms Application
- 2. Проектирование главной формы Form1
- 3. Добавление новой формы в проект
- 4. Настройка вида новой формы
- 5. Подключение формы 2 к модулю формы 1
- 6. Вызов дочерней формы из главной формы
- 7. Программирование событий в форме 2
- Вывод
- Связанные темы
Условие задачи
Нужно к главной форме Form1 добавить новую форму Form2 в приложении.
В главной форме Form1:
- создать кнопку «Show Form — 2» для вызова новой формы;
- вывести сообщение в Form1 о результате возврата из Form2.
В новой форме Form2:
- создать две кнопки с названиями «OK» и «Cancel»;
- запрограммировать реакцию формы на нажатие мышкой (клавиатурой) на соответствующей кнопке.
Схема взаимодействия между формами изображена на рисунке 1.
Рис. 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.
Рис. 2. Главная форма Form1
3. Добавление новой формы в проект
Новая форма в проект добавляется путем вызова последовательности комманд (рис. 3):
File -> New -> Form Delphi
Рис. 3. Добавление новой формы в проект
В результате, на экране появится новая пустая форма (рис. 4). Получить доступ к свойствам и методам (процедурам и функциям) этой формы можно с помощью имени Form2 по умолчанию.
Рис. 4. Новосозданная форма с именем Form2
В Object Inspector имя формы отображается в свойстве Name. По желанию можно изменить название формы.
Сохранить новую форму в файле можно с помощью команды
File -> Save All
Каждая новая форма сохраняется в отдельном файле (модуле). По умолчанию Delphi предлагает имя Unit2.pas. Оставим все как есть.
Автоматически, кроме модуля Unit2.pas, создается файл описания формы Unit2.dfm.
Таким образом, имеем две формы с такими же именами в программе (свойство «Name»):
- Form1 — основная форма (размещается в модуле MainForm.pas);
- Form2 — второстепенная форма (размещается в модуле Unit2.pas).
4. Настройка вида новой формы
Для настройки корректного вида новой формы (Form2) выполняем следующие действия.
- Выносим на форму две кнопки (компонент типа TButton) и одну метку (TLabel). Получаем три переменные-компоненты с такими именами: Button1, Button2, Label1.
- Свойство Caption компонента Button1 устанавливаем в значение «OK».
- Свойство Caption компонента Button2 устанавливаем в значение «Cancel».
- Свойство Caption компонента Label1 устанавливаем в значение «Form — 2».
По желанию можно настроить и другие свойства формы Form2.
После внесенных изменений и корректировки положения компонент на форме Form2 окно новой формы будет иметь приблизительно такой вид как изображено на рис. 5.
Рис. 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.
Теперь можно запустить программу на выполнение и протестировать ее.
Вывод
В этой статье было изучено особенности подключения к главной форме программы дочерней формы. Среди рассмотренных вопросов следующие.
- Создание дочерней формы (File -> New Form).
- Подключение дочерней формы к главной форме (uses Unit2).
- Вызов (отображение) дочерней формы из главной формы (ShowModal) и обработка результата возврата.
- Обработка событий подтверждения (не подтверждения) выполненной работы в дочерней форме с помощью глобальной переменной ModalResult.
Связанные темы
- Пример создания и вызова новой формы приложения в C#
- C++ Builder. Пример создания и вызова новой формы из главной формы приложения
- Пример создания и вызова диалогового окна в MS Visual Studio 2010 — C++ (MFC)