Работа с несколькими формами. Модальная форма. Создание диалогового окна ввода пароля — 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… | Выбрать нужную форму
-Нажать + 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
Создать на 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
Создать на Form2 кнопку (Button2) и назвать ее “Выход”
9) Для кнопки “Выход” написать код закрытия второй формы.
10) Откомпилировать и запустить программу
11) Проверить работу программы
12) Завершить работу с программой
13) Сохранить программу в рабочей папке под произвольным именем
Пояснение: При ссылке в коде программы одного модуля на объект, который описывается в другом модуле, необходимо связать эти модули между собой. В нашем случае надо связать между собой две формы Form1 и Form2, так как они описываются в различных модулях.
Создание диалогового окна ввода пароля.
Пример4. Создать диалоговое окно ввода пароля, которое позволяет заменить старый пароль на новый если старый пароль введен верно и подтверждение нового пароля прошло успешно.
Решение:
1) Форме Form1 задать заголовок “Change Password”
2) Создать три метки, три строки ввода и две кнопки, разместить и назвав их так, как показано на рисунке.
Метки и строки ввода должны быть расположены по порядку одна над другой (т.е. самой верхней меткой должна быть метка 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);
Сохранить программу в рабочей папке под произвольным именем
9) Откомпилировать программу
10) Проверить работу программы
Самостоятельная работа
1) Изменить пример 2 так, чтобы при переходе на следующую форму предыдущая форма закрывалась, объясните почему при закрытии формы Form1 с использованием метода Close происходит выход из программы, выясните можно ли не закрыть форму Form1, а скрыть ее.
2) Изменить оба фрагмента кода в примере 4 так, чтобы новый код использовал условный оператор.
3) Задача1: Написать программу, которая на одной форме запрашивает имя человека, а на другой форме выводит его в строке ввода.
Две формы
Итак приветствую всех,
столкнулся с программой в которой мне пришлось написать 2 формы в одном проекте, и теперь нужно мне из первой формы использовать пару переменных во второй форме, уже голову сломал. никак не получается.
Прошу помощи, заранее спасибо
Две формы
Доброго вам времени суток. Помогите пожалуйста! Вопрос есть задача: имею 2 формы, на главной.
Две формы
Всем привет! Подскажите пожалуйста, как сделать так чтобы при выборе пункта в RadioGroup в одной.
RadioButton и две формы
Есть две формы. на 1ой на панели несколько радио батонов. С неё вызываю ShowModal 2ой формы. На.
Связать две формы
как осуществить работу в делфи с 2 формами одновременно?
Ничего не понимаю теперь вообще. теперь работает.
Так, возможно только использование глобальных переменных, а ни как не можно использовать локальные? Блин знал бы заранее начал бы писать по другому, а то сейчас переделывать много чего, уже 500 строчек накатал.
Мешает то что первый раз с таким столкнулся и я не опытный еще
Вот последний раз задаю в этой теме вопрос, так как достал уже вас всей своей тупизной.
Простите если достал.
агаааааааааа воооот как. ну теперь другое дело, теперь я снова что-то понимаю
Есть две формы
Помогите пожалуйста. Есть две формы. На первой форму есть Edit1 и Button1. При нажатии на кнопку.
две связанные формы
Подскажите, пожалуйста, как бы сделать так, чтоб по нажатию на кнопку на первой форме.
Разделение программы на две формы
Здравствуйте. Есть программа тест, на одной форме находится прохождение теста и выбор.
Связать две формы
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Связать две кнопки
Имеется кнопка в меню выполняющаяя определенную команду(например Сохранить). Сделал панель.
Связать формы
Помогите, плиз. У меня есть две формы в программе, мне нужно их связать между собой. Я объявляю их.
Связать две формы
Нужно сделать так, чтобы из одной формы можно было обратиться ко второй и из второй к первой. Делаю.
В разделе uses обоих форм допиши:
В первой:
Unit2;
Во второй:
Unit1;
Тогда ты сможешь открыть две формы и делать с ними что захочешь.
Или тебе не это надо?
Тогда у тебя появятся две формы.
И обе будут активны
Связать две формы
Здравствуйте, форумчане Подскажите, пожалуйста, как связать две формы (Форма1 – основная, Форма 2.
Связать две формы
Доброе время суток. Имеется программа с двумя формами. На первой textbox, а на второй кнопка.
Связать две формы
подскажите, как связать две формы на первой форме есть Frame, и по двойному клику на него должна.
Связать две формы
Здравствуйте, у меня такая проблема : создал одну форму без источника, на неё добавил две, одну.
Связать две формы для одновременного использования.
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Связать две формы по координатам, в том числе, для одновременного перемещения
Здравствуйте. у меня есть две формы. Вторая ( прозрачная и имеет некие инструменты ) вызывается.
Связать две формы
Доброе время суток. Имеется программа с двумя формами. На первой textbox, а на второй кнопка.
Связать две формы
Нужно сделать так, чтобы из одной формы можно было обратиться ко второй и из второй к первой. Делаю.
Связать две формы
как осуществить работу в делфи с 2 формами одновременно?
Kovbaska, а попробуйте так. В модуле юнит1 в разделе interface к uses допишите Unit2, а в модуле юнит2 в разделе implementation допишите uses Unit1;. Здесь важно, чтоб модули форм прописывались в разных разделах.
Добавлено через 28 минут
Что писал по этому поводу Архангельский (может быть вам пригодится)
Предложение, определяющее подключаемые к проекту или используемые в данном модуле другие модули, начинается с ключевого слова uses, после которого следует список имен модулей, разделяемый запятыми. Например:
uses Windows, Messages, SysUtils, Classes, Unit2, MyUnit;
Предложение в головном файле программы может также содержать после имени модуля ключевое слово in, после которого указывается имя файла, в котором содержится модуль. Например:
uses Unit1 in ‘Unit1.pas’, Unit2
in ‘c:\exampes\Unit2.pas’;
Форма с in используется в случаях, если Delphi неясно, где надо искать соответствующие файлы.
В предложениях uses, включаемых в модули, использование in не допускается.
При взаимных ссылках модулей друг на друга не разрешаются циклические ссылки с помощью предложений uses, размещенных в разделах interface. Такие циклы надо разрывать, перенося одно или все предложения uses из разделов interface в разделы implementation модулей. Например, недопустимыми циклическими ссылками являются следующие предложения uses в модулях Unit1 и Unit2:
Взаимодействие между окнами в дельфи
Если одна форма выполняет какие-либо действия с другой формой, то в списке uses раздела implementation модуля первой формы должна быть ссылка на модуль второй формы.
При нажатии кнопки Button1 первой формы на экране отображается вторая форма, до этого невидимая. Поскольку операция со второй формой совершается из модуля первой формы, в разделе implementation первого модуля помещен код uses Unit2.
После выбора нужного модуля и нажатия кнопки ОК ссылка на него добавляется автоматически.
Если ссылка на требуемый модуль отсутствует, то при компиляции программы появляется диалоговое окно Information (см. скриншот).
Оно сообщает, что одна форма использует другую, но модуль второй формы отсутствует в списке uses модуля первой формы. Для автоматического добавления ссылки на модуль достаточно нажать кнопку Yes.
Форма может выполнять различные операции не только с другой формой, но и дельными компонентами. В этом случае также нужна ссылка на модуль другой формы.
Здесь при нажатии кнопки Button2 формы Form1 в надписи Label1 отображается текст редактора Edit1, расположенного в форме Form2.
Можно выполнять операции с компонентами формы, свернутой или невидимой на экране. Однако в любом случае форма должна быть создана до выполнения любых операций с ней.