Работа с многодокументными (MDI) формами

Другая разновидность форм — многодокументные, или MDI-формы. Интерфейс MDI позволяет открыть сразу несколько окон внутри родительского окна-контейнера. Скажем, в главном окне типичного текстового редактора (классический пример — Word for Windows) можно открыть несколько документов (рис. 2.7). Главное окно выполняет функции контейнера, а дочерние формы находятся внутри него. MDI-приложения появились в те времена, когда на рынке преобладали ранние версии Windows. Многодокументные приложения позволяли одновременно открывать несколько файлов, не запуская нескольких копий одной программы. Это экономило не только время, но и память.

Работа с многодокументными (MDI) формами - student2.ru

Рис. 2.7. Несколько документов в родительском окне-контейнере

Интерфейс MDI обычно используется для документно-ориентированных приложений (например, текстовых или графических редакторов). Программа называется документно-ориентированной, если она предназначена для работы с документами. Если пользователи приложения должны одновременно работать с несколькими формами, выбирайте модель MDI. Visual Basic позволяет очень просто создавать MDI-приложения.

Создание MDI-приложения

Для создания MDI-приложения необходимо иметь как минимум две формы — родительскую (контейнер) и дочернюю (внутреннюю). Чтобы работать с дочерними формами различных типов, необходимо включить в проект дополнительные формы. Тем не менее для простейшего MDI-проекта одной формы вполне достаточно. Проект создается так:

1. Создайте новый проект командой File >• New Project. Если у вас включен Project Wizard, выберите тип проекта Standard EXE.

2. В созданном проекте изначально присутствует одна форма. Задайте ее свойству Name значение frmChild, а свойству Caption — Дочерняя форма MDI.

3. Чтобы создать родительскую форму MDI, щелкните правой кнопкой мыши на папке Forms в окне проекта и выполните команду Add > MDI Form. Когда на экране появится окно Form Wizard, выберите в нем MDI Form.

4. Задайте свойству Name значение frmMDI, а свойству Caption — значение Родительская форма MDI

5. Щелкните правой кнопкой мыши на строке Project1 в окне проекта и выберите из контекстного меню команду Project1 Properties. Выберите из списка Startup Object строку frmMDI. Если не сделать этого, в начале работы вашего приложения будет отображаться дочерняя форма.

6. Выберите в окне проекта строку frmChild. Задайте свойству MDI Child значение True - теперь дочерняя форма будет находиться внутри родительской.

7. Выберите в окне проекта строку frmMDI.

8. Запустите редактор меню командой Tools > Menu Editor. Появляется окно, изображенное на рис. 2.8.

Работа с многодокументными (MDI) формами - student2.ru

Рис. 2.8. Редактор меню

В своем примере мы ограничимся очень простым меню. Не беспокойтесь о технических подробностях работы с редактором меню - они будут рассмотрены в уроке 5, «Создание и использование меню и панелей инструментов».

1. Введите &File в поле Caption.

2. Введите mnuFile в поле Name.

3. Нажмите кнопку Next.

4. Нажмите кнопку со стрелкой вправо — у команды меню появляется отступ.

5. Введите &New Form в поле Name.

6. Введите mnuFileNew в поле Name.

7. Закройте редактор меню кнопкой ОК.

8. В форме frmMDI должно появиться меню File. Выполните команду File > New, и на экране появится окно программы.

9. Вставьте в процедуру события mnuFileNew_Click() следующий фрагмент:

Dim frm As New frmChild

frm.Show

10. Сохраните и запустите проект. На рисунке показан примерный вид окна MDI-ириложения.

Работа с многодокументными (MDI) формами - student2.ru

Добавленный нами фрагмент создает новую копию формы frmChild и отображает ее. Это происходит при каждом выполнении команды File > New. Попробуйте открыть и закрыть несколько дочерних окон; как видите, мы построили вполне рабочее MDI-приложение.

Новая версия MDI-приложения

Чтобы наша программа действительно была похожа на коммерческие MDI-приложения Windows, необходимо добавить несколько дополнительных штрихов. Например, все дочерние формы имеют одинаковые названия, так что их невоз-

можно отличить друг от друга; этот недостаток нужно исправить. Также хотелось бы иметь возможность упорядочить дочерние окна и выстроить их «мозаикой», или «каскадом». Наконец, в меню должен присутствовать список окон, при помощи которого можно легко перейти к любому дочернему окну, даже если оно спрятано под другими окнами.

1. Запустите редактор меню и добавьте в строку меню родительского окна, frmMDI, новое меню &Window. Установите флажок WindowList в редакторе меню.

2 Добавьте в новое меню команды Tile и Cascade. Назовите их mnuWindowTile и mnuWindowCascade соответственно.

3. Закройте редактор меню кнопкой ОК.

4. Добавьте в процедуру события Click объекта mnuWindowTile следующую строку:

frmMDI.Arrange vbTileHorizontal

5. Добавьте в процедуру события Click объекта mnuWindowCascade следующую строку:

frmMDI.Arrange vbCascade

vbCascade и vbTileHorizontal — встроенные константы Visual Basic. Их значение описано в справочной системе.

6. Измените код процедуры для команды mnuFileNew:

Private Sub mnuFileNew_Click()

Static Counter As Integer

Dim frm As New frmChild

Counter = Counter + 1

frm.Caption = "Дочерняя форма MDI" & Counter

frm.Show

End Sub

7. Сохраните и запустите приложение. Обратите внимание на отличия рис. 2.9 от предыдущего рисунка.

Расшифровка программы

Возможно, фрагмент программы из предыдущего примера показался вам совершенно невразумительным — не стоит огорчаться. Смысл многих операторов прояснится в последующих главах этой книги. И все же давайте кратко рассмотрим этот фрагмент, чтобы вы хотя бы приблизительно представляли себе, что в нем происходит.

Первая строка (Static Counter As Integer) приказывает Visual Basic создать переменную с именем Counter. Ключевое слово Static говорит о том, что значение Counter будет запоминаться при каждом вызове процедуры. Это позволяет использовать Counter для подсчета создаваемых форм.

Работа с многодокументными (MDI) формами - student2.ru

Рис. 2.9. Усовершенствованное MDI-приложение

Во второй строке (Dim frm As New frmChild) встречается оператор Dim. Обычно он определяет размерность массива, но в данном случае описывает переменную с именем frm, которая создается на основе формы frmChild. Ключевое слово New сообщает Visual Basic о том, что речь идет о новой форме, а не об одной из форм, созданных в этой процедуре.

Поскольку значение переменной Counter запоминается между вызовами процедуры, его можно увеличить следующей строкой:

Counter = Counter + 1

Например, если значение Counter было равно 3, то оператор присвоит ей текущее значение «3 плюс 1», то есть 4. Раз переменная Counter объявлена с ключевым словом Static, новое значение будет сохранено, так что при следующем вызове процедуры переменной Counter будет присвоено значение 5, затем — 6 и т. д. Следующий оператор (frmCaption = "Дочерняя форма MDI" & Counter) заменяет содержимое свойства Caption строкой, которая состоит из текста "Дочерняя форма MDI" и номера, хранящегося в переменной Counter. Например, свойство Caption во второй форме будет иметь значение "Дочерняя форма MDI 2". Последняя строка, так сказать, вдыхает жизнь в форму. Она приказывает Visual Basic отобразить форму на экране. Поскольку мы уже рассматривали процесс создания формы, вы знаете, что работа новой формы начинается с события Load. После загрузки форма активизируется и отображается на экране.

Использование Form Wizard

Когда вы освоите программирование на Visual Basic, вам нередко придется добавлять в свои проекты новые формы (как это было сделано в примере MDI-приложения). Поскольку однодокументный (SDI) интерфейс не позволяет имитировать многие возможности интерфейса MDI, для этой цели были созданы специальные MDI-формы. В начале работы над приложением может выясниться, что одиночной формы не хватает для решения задачи; в этом случае следует добавить новую форму и настроить ее для выполнения требуемой задачи. В Visual Basic 6 процесс добавления форм упрощен до предела: Form Wizard поможет выбрать форму нужного типа и добавить ее в проект. Достаточно щелкнуть правой кнопкой мыши внутри окна проекта и выбрать в контекстном меню команду Add > Form - Form Wizard открывает диалоговое окно Add Form (рис. 2.10).

Работа с многодокументными (MDI) формами - student2.ru

Рис. 2.10. Form Wizard

Как видите, выбор достаточно широк — диалоговое окно About (About Dialog), заставка (Splash Screen), окно с полезными советами (Tip of the Day) и даже окно-броузер (Web Browser)! После того как вы выберете форму в окне Wizard, Visual Basic создаст шаблон с необходимой графикой и кодом и включит его в проект. Form Wizard заметно экономит время, поскольку он автоматически генерирует часть программного кода для формы.

ПОДСКАЗКАЕсли вы хотите, чтобы формы имели стандартный вид и при этом вам пришлось поменьше программировать, поручите свою работу Form Wizard.

Давайте воспользуемся Form Wizard и добавим в проект еще одну форму:

1. Щелкните правой кнопкой мыши в окне проекта и выберите из контекстного меню команду Add > Form. На экране появляется окно Form Wizard.

2. Включите в проект новую форму - для этого следует выбрать значок About Dialog в окне Add Form. Новой форме автоматически присваивается имя frm-

About.

3. Дважды щелкните на строке frmMDI в окне проекта, чтобы активизировать MDI-форму.

4. Вызовите редактор меню и добавьте в форму новое меню — для этого следует щелкнуть на пустом месте под названием команды &New Form. Проследите, чтобы там не было многоточия (...). — если оно присутствует, удалите его кнопкой со стрелкой влево. Теперь задайте свойству Caption значение &Help, a свойству Name — значение mnuHelp.

5. Нажмите кнопку Next, чтобы добавить следующую команду.

6. Добавьте новую команду в меню mnuHelp — для этого нажмите в редакторе меню кнопку со стрелкой вправо. Задайте свойству Caption значение &About, a свойству Name — значение mnuHelpAbout. Если не нажать кнопку со стрелкой, то вместо новой команды меню Help будет создано новое меню. Закройте редактор меню кнопкой ОК.

7. Щелкните правой кнопкой мыши в окне проекта и выберите из контекстного меню команду Project1 Properties.

8. В открывшемся диалоговом окне Project Properties перейдите на вкладку Make.

9. Замените содержимое поля Title текстом Пример MDI-приложения.

10. В группе Version Information выберите из списка Туре строку Company Name и введите название своей организации в поле Value.

11. Найдите в списке Туре строку Product Name и введите значение MDI-приложение, затем нажмите кнопку ОК.

12. Выполните команду Help > About из меню MDI-формы, чтобы открыть окно программы.

13. Включите в процедуру mnuHelpAbout_Click() следующую строку: frmAbout.Show vbModal

14. Запустите приложение и откройте диалоговое окно About (рис. 2.11).

Работа с многодокументными (MDI) формами - student2.ru

Рис. 2.11. Диалоговое окно About, созданное Form Wizard

Напоследок давайте вернемся к ключевому слову vbModal. В уроке 4, «Работа с модулями и классами», вы научитесь передавать параметры вызываемым процедурам. В данном случае ключевое слово vbModal — параметр, который передается методу Show формы. Он сообщает Visual Basic о том, что диалоговое окно About должно отображаться в модальном режиме. Модальная форма временно берет на себя весь процесс общения пользователя с приложением. Пока модальное диалоговое окно остается на экране, пользователь не может работать с остальными формами приложения. Модальные формы используются во многих ситуациях. Например, диалоговое окно для регистрации пользователя стоит сделать модальным, чтобы к вашему приложению допускались лишь те пользователи, которые успешно прошли регистрацию.

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

ПОДСКАЗКАЕсли в окне Visual Basic накопится много лишних форм, закройте их. Самый простой способ вызвать форму на экран — дважды щелкнуть на ее имени в окне проекта.

Что нового мы узнали?

В этом уроке мы научились:

Работа с многодокументными (MDI) формами - student2.ru Создавать новые формы.

Работа с многодокументными (MDI) формами - student2.ru Работать с формами в Visual Basic.

Работа с многодокументными (MDI) формами - student2.ru Пользоваться важнейшими свойствами и методами при отображении форм.

Работа с многодокументными (MDI) формами - student2.ru Включать новый код в процедуры событий.

Работа с многодокументными (MDI) формами - student2.ru Создавать MDI-приложения с работающими меню.

Работа с многодокументными (MDI) формами - student2.ru Создавать специализированные формы при помощи Form Wizard.

УРОК 3

Выбор и использование

Управляющих

Элементов

Работа с многодокументными (MDI) формами - student2.ru Управляющие элементы

Работа с многодокументными (MDI) формами - student2.ru Панель элементов

Работа с многодокументными (MDI) формами - student2.ru Использование управляющих элементов

Работа с многодокументными (MDI) формами - student2.ru Группировка элементов

Работа с многодокументными (MDI) формами - student2.ru Добавление элементов на панель

Работа с многодокументными (MDI) формами - student2.ru Разработка интерфейсов в стиле Windows 95

Как вы узнали из предыдущего урока, приложения Visual Basic строятся на основе форм. Практически любое приложение содержит формы, а на формах находятся управляющие элементы, которые расширяют функциональные возможности приложения и обеспечивают его всем необходимым для взаимодействия с пользователем. В этом уроке мы рассмотрим самые распространенные и нужные управляющие элементы Visual Basic 6. В этом уроке нам не удастся подробно рассмотреть все элементы, и мы ограничимся лишь теми, с которыми вам придется работать больше всего. Не огорчайтесь! Остальные элементы будут рассмотрены в последующих главах.

Наши рекомендации