Задание 9
ДОЧЕРНИЕ ФОРМЫ
1) Организовать новый проект (File/New Application). Присвоить форме имя MainForm (свойство Name) и измените ее заголовок на Главная (свойство Caption).
2) Сохранить проект и его форму (File/Save All). Модулю присвоить имя MAIN.PAS, а проекту – FAM.DPR (Свою фамилию).
3) Добавить к проекту второе, дочернее окно (File/New Form), присвоив новой форме имя SecondaryForm (свойство Name) и изменив ее заголовок на Дочерняя (свойство Caption). Сохранить (File/Save) модуль новой формы под именем SECOND.PAS.
4) Активизировать для доступа дочерней формы основную форму Main и в главном меню выберите команду File/Use Unit... . В окне диалога выбрать модуль Second. В результате в секции implementation программного модуля Main появится строка:
uses Second;
5) Оформить команду открытия дочерней формы в виде нажатия кнопки на форме Main. В обработчик нажатия этой кнопки записать команду вызова дочерней формы.
Добавить к проекту третье, дочернее окно About, работающее в модальном режиме и отображающее информацию об авторе проекта. Продумать дизайн формы.
Таблица 9.1 - Управление главной формы дочерними
Вариант |
Задание |
1, 6, 11,16, 21, 26 |
Главная открывает обе дочерние формы, закрывает, сворачивает, восстанавливает форму Дочерняя |
2, 7, 12, 17, 22, 27 |
Главная изменяет заголовок (задается в поле Edit главной формы), размеры (плавное изменение размеров) и цвет (выбор из палитры) формы Дочерняя |
Продолжение Таблицы 9.1
Вариант |
Задание |
3, 8, 13, 18, 23, 28 |
Главная изменяет размеры формы About, которые отображаются в форме Дочерняя |
4, 9, 14, 19, 24, 29 |
Главная открывает обе дочерние формы, закрывает (с запросом на разрешение закрытия окна), сворачивает, восстанавливает форму About |
5, 10, 15, 20, 25, 30 |
Главная плавно изменяет цвет формы About (три ScrollBar: R, G, B), числовые значения которых отображаются в форме Дочерняя |
Контрольные вопросы
Определить способы взаимодействия главного и дочернего окон
Как определить назначения новой формы, используя хранилище объектов Delphi.
Определить способы управления из главной формы
Задание 10
Многодокументные (MDI) приложения.
1) Создать новый проект (File/New Application). Дайте форме имя FrameForm (свойство Name) и измените ее заголовок на MDI Application. Установив свойство FormStyle на значение fsMDIForm сделайте форму обрамляющей формой многодокументного приложения.
2) Добавить к проекту дочернюю форму с помощью команды меню File/New Form. Присвоить имя ChildForm и установите ее заголовок MDI Child. Установив свойство FormStyle на значение fsMDIChild сделайте форму дочерней (подчиненной) формой многодокументного приложения.
Сохраните проект и его формы (File/Save All). Присвоить имя проекту - MDIAppl.dpr, модулю обрамляющей формы - MDIFrame.pas, а модулю дочерней - MDIChild.pas.
Замените значение параметра Action, управляющего порядком закрытия окон, с caMinimize (свернуть окно) на caFree (закрыть окно) для реализации полного закрытия дочернего окна в событии OnClose :
procedure TMDIChild.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
end;
Обеспечить взаимную видимость модулей для организации обращения между обрамляющей и дочерними формами . Для этого из обрамляющей формы FrameForm командой File/Use Unit подключите модуль MDIChild.pas, а из дочерней ChildForm - модуль обрамляющей формы MDIFrame.PAS.
Если обрамляющая и дочерняя имеют собственные меню, то при открытии дочерней формы набор ее меню добавляются к набору меню обрамляющей формы. Порядок образования объединенного меню определяется свойством GroupIndex (групповой номер) компонента TMenuItem:
объединенные меню располагаются в порядке возрастания значений свойства GroupIndex;
меню дочерней формы заменяют меню главной формы с тем-же значением GroupIndex;
группы меню с одинаковым GroupIndex добавляются или заменяются целиком.
Установить на обрамляющей форме компонент MainMenu и двойным щелчком вызовите у него окно Дизайнера Меню. Создайть два меню: File, состоящее из пунктов New, Open, пустой (-), Exit и меню Window, состоящее из пунктов Tile и Cascade.
Установить на дочерней форме компонент MainMenu. В окне Дизайнера Меню с помощью команды Insert From Template... всплывающего меню (щелчок правой кнопки мыши) вставить из шаблона расширенный вариант меню File и меню Edit.
Установить для организации правильного объединения меню форм значения их свойств GroupIndex.
В форме FrameForm File1.GroupIndex = 0 Window1.GroupIndex = 6.
В форме ChildForm File1.GroupIndex = 0 Edit1.GroupIndex = 1.
Запустить приложение. Дочерняя форма открылась автоматически. Внимательно изучить содержимое набора меню. Определить, меню какой формы представлены и объяснить, почему так получилось. Закрыть дочернее окно и также изучить набор меню.
Выбрать «ручной» способ открытия дочерней формы. Для этого в окне настройки параметров проекта (меню Project/Options) на странице Forms перевести пункт ChildForm из списка Auto-Create Forms в список Available Forms:
Описать процедуру открытия новой дочерней формы, вызываемую выбором команды File/New меню обрамляющей формы (обработчик события OnClick пункта New в форме FrameForm:
procedure TFrameForm.New1Click(Sender: TObject);
begin
with TChildForm.Create(Self) do
Caption := Caption + ' ' + IntToStr(Self.MDIChildCount);
end;
Здесь первой строкой вызывается метод создания дочерней формы типа TChildForm; в скобках указано имя владельца этой дочерней формы - Self (сама, т.е. обрамляющая форма). Во второй строке к заголовку дочерней формы добавляется ее номер - количество открытых дочерних форм.
Определить реакцию на выбор пункта меню File/New для дочерних форм, т.к. после открытия дочерней формы ее меню File заменит соответствующее меню обрамляющей формы:
procedure TChildForm.New1Click(Sender: TObject);
begin
FrameForm.New1.Click;
end;
Записать в обрамляющей форме в обработчиках выбора пунктов Tile и Cascade меню Window по одной строке Tile; и Cascade; соответственно. Эти методы изменяют расположение дочерних окон.
Установить имя объекта для того, чтобы в меню Window был представлен список имен открытых дочерних окон, отвечающего за этот пункт (Window1), в качестве значения свойства WindowMenu обрамляющего окна.
Определить реакцию на выбор пункта меню File/Close для дочерних форм для примера работы с отдельными дочерними окнами :
procedure TChildForm.Close1Click(Sender: TObject);
begin
with FrameForm do
if ActiveMDIChild <> nil then ActiveMDIChild.Close;
end;
Здесь необходимость первой строки вызвана тем, что ссылка на активную дочернюю форму ActiveMDIChild является свойством обрамляющей формы.
Загрузить из Хранилища Объектов (File/New/Project) готовый шаблон MDI-приложения можно просто .
Разместить на дочернем окне редактор Memo и дополнить созданное MDI-приложение следующими пунктами меню:
FrameForm - Window/Set Red Color – окрашивает фон редактора Memo текущего окно в красный цвет.
FrameForm - Window/Minimize all – сворачивает все подчиненные окна (если сразу не получится, посмотрите, как это сделано в шаблоне MDI - приложения).
FrameForm - Window/Restore all – восстанавливает свернутые подчиненные окна.
FrameForm - Window/Close all – закрывает все подчиненные окна.
FrameForm - Window/Table – открывает параллельное окно с информационной таблицей (TStringGrid). В таблице должны быть представлены номер, заголовок, размеры и состояние (свернутое, распахнутое, нормальное) всех подчиненных окон приложения. Любое изменение в массиве подчиненных окон должно одновременно отображаться в таблице (если открыто данное окно).
Контрольные вопросы
Способы организации многодокументальных приложений
Отличие MDI-приложений от SDI-приложений
Свойства TForm для MDI- приложений
Методы расположения дочерних окон