Приложение с двумя окнамиt переделка.ppt
- Количество слайдов: 40
Приложение с двумя окнами
Цель урока • Научиться создавать эффективные приложения с двумя окнами
Задачи урока • Усвоить необходимый теоретический материал • Научиться создавать приложения с динамическим подключением окон во время работы приложения
Если приложение содержит несколько окон • Первое окно будет главным, остальные – вспомогательные • Вспомогательные окна могут быть • Модальными и • Немодальными
Окна модальные и немодальные • Если окно модальное, – то в главное окно можно вернуться, только после его закрытия • Если окно немодальное, – то такого ограничения нет
Пример модального окна • ПоследняяМодал не динам
Пример немодального окна • ПоследняяНе модал не динам
Пример модального окна • Модальное окноProject 2. exe
Пример немодального окна • Немодальное окноProject 2. exe
КАК СОЗДАВАТЬ ПРИЛОЖЕНИЯ С ДВУМЯ ОКНАМИ? Переход между формами приложения
СТРУКТУРА МОДУЛЯ Unit <имя>; interface <интерфейсная часть> Uses <список подключаемых модулей> implementation <исполняемая часть> Uses <список подключаемых модулей> initialization < инициирующая часть> finalization <завершающая часть> end.
При создании приложения первая форма создается автоматически командой File-New-Application для нее в главном файле приложения формируется строка кода для создания формы. Например: Application. Create. Form(TForm 1, Form 1);
Для добавления в проект еще одной формы Надо выполнить команду меню File | New Form для нее в главном файле приложения также автоматически формируется строка кода для создания формы. Например: Application. Create. Form(TForm 2, Form 2);
• Здесь картинка проекта
Если формы должны передавать другу параметры, то их модули надо подцепить • Для модуля Unit 1 выполнить команду File – Use Unit – Unit 2 • Для модуля Unit 2 выполнить команду File – Use Unit – Unit 1
Вывести вспомогательное окно В модуле главной формы отобразить новую форму, используя метод – Show для немодальных форм – Show. Modal для модальных форм. Например: Form 2. Show. Modal;
Чаще всего требуется новые окна создавать не сразу, а во время выполнения (динамически)
Динамически создать форму во время выполнения 1. Ее следует исключить из списка автоматически создаваемых форм командой меню Project Options | Forms Это вызовет удаление из главного файла приложения строки Application. Create. Form для исключенной формы
• Вставить картинку
Динамически создать форму во время выполнения 2. Перейти в модуль главной формы и добавить модуль определения новой формы в секцию Uses раздела Interface Вставить картинку
Динамически создать форму во время выполнения 3. В модуле главной формы вызвать для создания второй формы метод Create. Например: Form 2: =TForm 2. Create (self);
Динамически создать форму во время выполнения 4. В модуле главной формы Отобразить новую форму, используя метод – Show для немодальных форм – Show. Modal для модальных форм. Например: Form 2. Show. Modal; ПоследняяПосл Дин Модал
Динамически создать форму во время выполнения 5. После выполнения в форме требуемых действий ее следует закрыть, вызвав метод Close. 6. Освободить память из-под закрытой формы вызовом метода Free. Например: Form 2. Free;
• Если форма отображается как немодальная, то следует позаботиться, чтобы она не создавалась повторно • ПоследняяПосл дин немодал • Последняяпосл дин немод с удалением
Компоненты и события • 3 Label • 4 Button • 1 Edit • On. Click для всех кнопок • On. Create для двух форм Оформим второе окно как модальное
• Первая форма (Form 1) создается автоматически командой File-New. Application • Вторая форма (Form 2) создается вручную командой File-New-Form • При этом будет создан второй модуль исходного кода Unit 2
Модули Unit 1 и Unit 2 надо подправить Unit 1 Надо добавить в секцию Uses имя модуля Unit 2 После implementation дописать: Uses Unit 1;
Вторая форма должна быть создана не автоматически, а по нажатию кнопки Для этого • Вызвать диалоговое окно Project. Options • Перейти на вкладку Forms • Переместите Form 2 из списка Auto-Create Forms в список Available Forms
Обработчик нажатия кнопки вызова второй формы Procedure TForm 1. Button 1 Click(Sender: TObject); Var Form 2: TForm 2; Begin Form 2: =TForm 2. Create(Self); {создаем форму} Try {перехват ошибок} If Form 2. Show. Modal = mr. Ok then {нажата ли кнопка? } Label 2. Caption: =Form 2. Edit 1. Text; {текст из второй формы } Finally Form 2. Free; {уничтожаем форму, освобождаем память} End;
Обработчики событий компонентов второй формы unit Unit 2; -------Procedure TForm 2. Form. Create(Sender: TObject); Begin {помещаем в поле ввода текст надписи в главном окне} Edit 1. Text: =Form 1. Label 2. Caption; End;
Для закрытия модального окна требуется нажатие любой из кнопок Procedure TForm 2. Button 1 Click(Sender: TObject); Begin {чтобы закрыть модальное окно, устанавливаем значение Modal. Result} Modal. Result: =mr. OK; End; Procedure TForm 2. Button 2 Click(Sender: TObject); Begin {чтобы закрыть окно, устанавливаем значение Modal. Result} Modal. Result: =mr. Cancel; End;
• Открытое модальное окно закрывается, когда свойство Modal. Result получает значение. • Это значение возвращается в функцию, открывавшую модальное окно (в нашем случае – в обработчик Form 1. Button 1. Click), где его можно проверить и выяснить, нажатием какой кнопки было закрыто модальное окно
Немодальное окно • Из него можно переключиться в другое окно того же приложения (без закрытия) • Поэтому всегда надо проверять, не существует ли уже экземпляр второго окна • Если существует, то не создавать его, а только открыть • Для проверки переменная, ссылающаяся на экземпляр окна, должна быть глобальной
Компоненты и события • • 2 Form 3 Label 4 Button 1 Edit • Form 1: On. Create • Form 2: On. Create, On. Destroy • On. Click для всех кнопок Оформим второе окно как немодальное
procedure TForm 1. Button 1 Click(Sender: TObject); begin // Создаем форму , только если ее не существует if Form 2=nil then Form 2: =TForm 2. Create(Self); // Отображаем форму в немодальном режиме Form 2. Show; end;
В модуле Unit 2 реализуется • Закрытие вспомогательного окна и • передача введенного значения обратно в вызывающую функцию
В модуле Unit 2 добавляем implementation Uses Unit 1; --------procedure TForm 2. Form. Create(Sender: TObject); begin Edit 1. Text: =Form 1. Label 2. Caption; end;
procedure TForm 2. Button 1 Click(Sender: TObject); begin Form 1. Label 2. Caption: =Edit 1. Text; Close; end; procedure TForm 2. Button 2 Click(Sender: TObject); begin Close; end;
procedure TForm 2. Form. Destroy(Sender: TObject); begin Form 2: =nil; end;


