Работа с несколькими формами. Модальная форма. Создание диалогового окна ввода пароля — Delphi(Делфи)

Большие программы, как правило, состоят более чем из одной формы. Рассмотрим некоторые особенности работы с несколькими формами.

Главная форма по умолчанию. Выбор главной формы.

Главная форма-это основная форма, с которой начинается построение программы. Если программа запущена на выполнение, то закрытие главной формы, например методом Close, приведет к закрытию всей программы. В Delphi, по умолчанию главной формой является форма Form1. Если программа содержит более одной формы, то любую из этих форм можно сделать главной по своему усмотрению. Для этого надо выполнить:

-Project | Options… | В выпадающем списке Main Form выбрать нужную форму | Нажать OK

Пример1: Создать программу, состоящую из двух форм и сделать форму Form2 главной формой.

Решение:
1) Создать новый проект
2) Создать новую форму-Form2
3) Выполнить: Project | Options… | В выпадающем списке Main Form выбрать нужную форму | Нажать OK
4) Сохранить программу в рабочей папке под произвольным именем
5) Откомпилировать проект
6) Проверить работу программы

Переход между формами в процессе разработки программы.

-Переходить между формами можно щелкая левой кнопкой мыши по нужной форме, но это требует визуального контакта с формой.

-Выполнить View | Forms… | Выбрать нужную форму

-Нажать <Shift> + F12 и выбрать нужную форму

Организация перехода между формами в процессе работы программы.

В процессе работы программы можно из одной формы вызвать другую в двух основных режимах: обычный режим и режим модальной формы. Если активной является форма Form1, то вызвать из нее форму Form2 можно, как обычную форму (в обычном режиме) или как модальную форму (в режиме модальной формы). Модальная форма-это форма, которая появляется перед пользователем и не исчезает пока не получит ответа. Пока не закрыта модальная форма, программа не может продолжать работу. При обычной вызове обычной формы используется метод show. При вызове формы как модальной используется метод showmodal.

Пример2: Написать программу, состоящую из двух форм и позволяющую переходить между формами.

Решение:
1)   Создать новый проект
2)   Создать новую форму-Form2
3)   Перейти на Form1 (одним из трех способов)
4)   Создать на Form1 кнопку (Button1) и назвать ее “На Form2”
5)   Связать первую форму со второй. Для этого надо выполнить: File | Use Unit…| Выбрать имя модуля второй формы.
6)   В обработчике события OnClick кнопки Button1 написать код:
        form2.show;
7)   Перейти на Form2
8)   Создать на Form2 кнопку (Button2) и назвать ее “На Form1”
9)   Связать вторую форму с первой. Для этого надо выполнить: File | Use Unit…| Выбрать имя модуля первой формы.
10) В обработчике события OnClick кнопки Button2 написать код:
        form1.show;
11) Откомпилировать и запустить программу
12) Проверить работу программы
13) Завершить работу с программой
14) Сохранить программу в рабочей папке под произвольным именем

Пример3: Написать программу, состоящую из двух форм Form1 и Form2 и вызывающую из первой формы вторую, как модальную.

Решение:
1)   Создать новый проект
2)   Создать новую форму-Form2
3)   Перейти на Form1 (одним из трех способов)
4)   Создать на Form1 кнопку (Button1) и назвать ее “Вызов модальной формы”
5)   Связать первую форму со второй. Для этого надо выполнить: File | Use Unit…| Выбрать имя модуля второй формы.
6)   В обработчике события OnClick кнопки Button1 написать код:
        form2.showmodal;
7)   Перейти на Form2
8)   Создать на Form2 кнопку (Button2) и назвать ее “Выход”
9)   Для кнопки “Выход” написать код закрытия второй формы.
10) Откомпилировать и запустить программу
11) Проверить работу программы
12) Завершить работу с программой
13) Сохранить программу в рабочей папке под произвольным именем

Пояснение: При ссылке в коде программы одного модуля на объект, который описывается в другом модуле, необходимо связать эти модули между собой. В нашем случае надо связать между собой две формы Form1 и Form2, так как они описываются в различных модулях.

Создание диалогового окна ввода пароля.

Пример4. Создать диалоговое окно ввода пароля, которое позволяет заменить старый пароль на новый если старый пароль введен верно и подтверждение нового пароля прошло успешно.

Решение:
1)  Форме Form1 задать заголовок “Change Password”
2)  Создать три метки, три строки ввода и две кнопки, разместить и назвав их так, как показано на рисунке.

wpe1.jpg (28884 bytes)

 Метки и строки ввода должны быть расположены по порядку одна над другой (т.е. самой верхней меткой должна быть метка Label1, самой нижней-Label3 тоже самое должно быть справедливо и для строк ввода). Кнопки должны быть расположены по порядку слева направо.
3)  Выбрать кнопку OK, а также две нижние метки и две нижние строки ввода и установить для их свойства Enabled значение False.
4)  Выбрать все три строки ввода, удалить значения их свойств Text и установить их свойства PasswordChar в значение @.
5)  Для кнопок OK и Cancel ввести код закрытия формы.
6)  Для обработчика OnChange строки ввода Edit1 ввести код:
            edit2.enabled:=edit1.text=’Delphi’;
            edit3.enabled:=edit2.enabled;
            label2.enabled:=edit2.enabled;
            label3.enabled:=edit2.enabled;
7)   Выбрать две нижние строки ввода и для их обработчиков события OnChange ввести код:
            button1.enabled:=(edit2.text<>’ ‘) and (edit2.text=edit3.text);
8)   Сохранить программу в рабочей папке под произвольным именем
9)   Откомпилировать программу
10) Проверить работу программы

Самостоятельная работа

1) Изменить пример 2 так, чтобы при переходе на следующую форму предыдущая форма закрывалась, объясните почему при закрытии формы Form1 с использованием метода Close происходит выход из программы, выясните можно ли не закрыть форму Form1, а скрыть ее.
2) Изменить оба фрагмента кода в примере 4 так, чтобы новый код использовал условный оператор.
3) Задача1: Написать программу, которая на одной форме запрашивает имя человека, а на другой форме выводит его в строке ввода.

Поделитесь своим мнением или задайте вопрос