Работа с многодокументными (MDI) формами
Другая разновидность форм — многодокументные, или MDI-формы. Интерфейс MDI позволяет открыть сразу несколько окон внутри родительского окна-контейнера. Скажем, в главном окне типичного текстового редактора (классический пример — Word for Windows) можно открыть несколько документов (рис. 2.7). Главное окно выполняет функции контейнера, а дочерние формы находятся внутри него. MDI-приложения появились в те времена, когда на рынке преобладали ранние версии Windows. Многодокументные приложения позволяли одновременно открывать несколько файлов, не запуская нескольких копий одной программы. Это экономило не только время, но и память.
Рис. 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.
Рис. 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-ириложения.
Добавленный нами фрагмент создает новую копию формы 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 для подсчета создаваемых форм.
Рис. 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).
Рис. 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).
Рис. 2.11. Диалоговое окно About, созданное Form Wizard
Напоследок давайте вернемся к ключевому слову vbModal. В уроке 4, «Работа с модулями и классами», вы научитесь передавать параметры вызываемым процедурам. В данном случае ключевое слово vbModal — параметр, который передается методу Show формы. Он сообщает Visual Basic о том, что диалоговое окно About должно отображаться в модальном режиме. Модальная форма временно берет на себя весь процесс общения пользователя с приложением. Пока модальное диалоговое окно остается на экране, пользователь не может работать с остальными формами приложения. Модальные формы используются во многих ситуациях. Например, диалоговое окно для регистрации пользователя стоит сделать модальным, чтобы к вашему приложению допускались лишь те пользователи, которые успешно прошли регистрацию.
Кроме обычных модальных форм существуют и системно-модальные формы. Пока системно-модальное окно остается открытым, пользователь не может работать не только с данным, но и со всеми остальными приложениями. Хорошим примером системно-модального окна служит программа сохранения экрана. Работа с приложениями становится возможной лишь после того, как будет введен правильный пароль. Тем самым обеспечивается простейшая защита для ваших программ.
ПОДСКАЗКАЕсли в окне Visual Basic накопится много лишних форм, закройте их. Самый простой способ вызвать форму на экран — дважды щелкнуть на ее имени в окне проекта.
Что нового мы узнали?
В этом уроке мы научились:
Создавать новые формы.
Работать с формами в Visual Basic.
Пользоваться важнейшими свойствами и методами при отображении форм.
Включать новый код в процедуры событий.
Создавать MDI-приложения с работающими меню.
Создавать специализированные формы при помощи Form Wizard.
УРОК 3
Выбор и использование
Управляющих
Элементов
Управляющие элементы
Панель элементов
Использование управляющих элементов
Группировка элементов
Добавление элементов на панель
Разработка интерфейсов в стиле Windows 95
Как вы узнали из предыдущего урока, приложения Visual Basic строятся на основе форм. Практически любое приложение содержит формы, а на формах находятся управляющие элементы, которые расширяют функциональные возможности приложения и обеспечивают его всем необходимым для взаимодействия с пользователем. В этом уроке мы рассмотрим самые распространенные и нужные управляющие элементы Visual Basic 6. В этом уроке нам не удастся подробно рассмотреть все элементы, и мы ограничимся лишь теми, с которыми вам придется работать больше всего. Не огорчайтесь! Остальные элементы будут рассмотрены в последующих главах.