11. «Сборка» проекта.В настоящем занятии Вы познакомитесь с концепциями мультидокументного интерфейса и меню, а также «соберете» созданные Вами к этому времени заготовки в единую программу, добавите к программе меню и код для управления им. Созданные нами формы совершенно не связаны между собою, и могут быть использованы в виде самостоятельных программ. Для этого Вам достаточно создать новый проект и добавить в него созданную уже форму, например, frmDiary.
Мультидокументный интерфейс (MDI – MultiDocumental Interface) – способ построения программы, когда в главном окне программы появляются окошки документов, так называемые дочерние окна.
Для создания MDI-приложения следует:
Преобразуем наше приложение в MDI.
Обратите внимание – в окне Project Explorer появился необычный значок с подписью MDIForm1. Откройте вновь меню Project. Как видите, пункт Add MDI Form недоступен. В проекте может быть только одна форма мультидокументного интерфейса. Измените имя добавленной формы с MDIForm1 на mfrmOrganizer.
Теперь, в общем случае, требуется,
Первая задача – сделать формы дочерними – решается очень просто.
Теперь эти формы будут вести себя как подчиненные MDI-форме. Задачу управления дочерними формами мы решим с помощью меню. Вы уже знакомы с меню по другим программам Windows, в том числе по самому VB. В программы вы можете включать собственные меню. Меню – особого рода элемент управления, имеющий лишь одно событие Click (Нажать) и несколько свойств. Меню используется для управления программой. Примеры меню Вы можете увидеть практически в любых Windows-программах. Создание меню производится с помощью редактора меню:
Появится окно редактора меню:
Как видите, в окне в нижней части редактора появился заголовок пункта меню:
Как видите, на заготовке формы появились пункты меню: Из рисунка понятно, зачем в заголовки пунктов меню мы включали символ « &» (амперсанд).
Внимание! При проектировании меню следите, чтобы горячие клавиши не дублировались, иначе результат вы не угадаете. Например, можно назначить: « Файл» и « Окна» (одинаковые клавиши « А»). Как будет себя вести программа при нажатии [Alt] + [А] – неизвестно. Не делайте так! Но оставить так, как есть – признак непрофессионализма. Так тоже не делайте! В нормальных программах для Windows обязательно бывает хотя бы один уровень подменю, которое открывается при выборе пункта главного меню. Создадим пункты подменю.
Над выбранным пунктом появится место для нового пункта меню.
Созданный пункт меню «сдвинется» влево:
Вот что вы увидите: VB позволяет создавать меню, имеющее до четырех уровней. Для любой практической задачи этого достаточно.
Теперь создадим другие подменю.
Окно редактора должно выглядеть так:
Как видите, знак минуса в заголовке превратился в горизонтальный разделитель. Его назначение – чисто косметическое, но имя ему назначать надо. Пункты с «троеточием» используются для вызова каких-то окон программы, пункты без «троеточия» (как, например, пункт « Выход» в меню « Файл») предназначены для непосредственного выполнения какой-то команды. Внимание! Имена пунктов меню на форме не должны повторяться! (Заголовки – могут, хотя это и очень нежелательно, при этом хотя бы назначайте разные горячие клавиши.) Теперь построим подменю « Окна» и « Справка». В подменю « Окна» внесем пункты для упорядочения дочерних окон в главном окне, здесь же будет находиться список открытых в данный момент окон.
Этот флажок обеспечивает появление в этом пункте меню списка открытых программой окон: Форма приобретет подменю: В меню « Справка» добавьте два подпункта: заголовок « С&правочная информация...» - имя mnuHelpText, и подпункт с заголовком « О программе...» и именем mnuAbout. Вот так это будет выглядеть: Внимание! Не забывайте «сдвигать» подпункты с помощью стрелки влево. Сейчас ознакомимся с другими возможностями редактора меню.
Поле с надписью Index позволяет создавать массивы пунктов меню. Реальная ситуация: в вашем меню не один десяток пунктов и множество разделителей, которые функциональности не имеют, а засоряют левый список в окне редактирования кода формы. Присваивайте всем разделителям, если их много, имя mnuSep, но позаботьтесь о назначении каждому уникального индекса (от 0 и далее).
Разумеется, что вышеописанные свойства меню можно изменять при помощи кода, во время выполнения программы.
В чем разница между списком Shortcut и подчеркиванием букв в надписях пунктов? Например, чтобы выполнить команду меню Ф айлВыход в нашей программе путем выбора подчеркнутых букв, следует нажать [Alt] + [Ф] (русскую), при этом откроется подменю « Файл», затем нажать [Ы]. Если команда находится в подменю 3-го – 4-го уровней, нажатий клавиш будет гораздо больше. Если же мы назначим клавиши- Shortcut для команды « Выход», к примеру, [Ctrl]+[Q], то выполнение команды будет вызвано нажатием этого сочетания клавиш независимо от того, в подменю какого уровня находится команда. Назначьте пунктам клавиши- Shortcut:
Всегда старайтесь проектировать меню, более-менее соответствующее стандарту, неофициально принятому в Windows. Как образец берите MS Word, Excel и другие распространенные программы. Стремитесь, чтобы общепринятые команды, такие, как « Создать», « Открыть» и т.п. имели такие же подчеркнутые буквы и такие же Shortcut, как и в «классических» программах. Меню нами создано. Теперь, чтобы оно работало, следует добавить в него код.
В окне кода появится заготовка обработчика события mnuExit_Click.
Unload Me
Добавим код для вызова формы frmPhoneBook.
frmPhoneBook.Show Метод Show(Показать) заставляет программу «показать» указанный объект.
Самостоятельно добавьте код для пункта меню « Дневник...». Запустите программу.
Как видите, порядок расположения окон не изменился. Было бы лучше, если бы выбор пункта меню приводил к перемещению окна на передний план, даже если окно уже загружено и работает. Сделать это несложно: Остановите программу и в обработчиках событий пунктов меню « Телефоны...» и « Дневник...» замените метод Show на метод ZOrder, например: Private Sub mnuPhoneBook_Click() frmPhoneBook.ZOrder End Sub Метод ZOrder без параметров (или с параметром 0) приводит к перемещению окна на передний план. Параметр 1 (ZOrder 1) приведет к противоположному эффекту. Испытайте программу. Пока пропустим пункт меню « Калькулятор...» и займемся меню « Окна». Дело в том, что главное окно MDI-приложения может самостоятельно позиционировать дочерние окна внутри себя, для этого достаточно простейших команд. Перейдите в обработчик пункта меню mnuHoriz_Click. Внесите в него строку: Me.Arrange vbTileHorizontal Метод Arrange (Расположить) как раз и занимается позиционированием дочерних окон. Он имеет параметры: vbCascade (Каскад) – располагает окна «каскадом», vbTileHorizontal (ЧерепицаГоризонтальная) – располагает окна по горизонтали, vbTileVertical (ЧерепицаВертикальная) – располагает окна по-вертикали, vbArrangeIcons (РасположитьЗначки) – упорядочивает свернутые пользователем дочерние окна. Самостоятельно создайте обработчики событий для меню mnuVert и mnuCascade. Запустите программу, вызовите дочерние окна и поэкспериментируйте с расположением окон. Теперь добавим пункт mnuAbout.
frmAbout.Show vbModal Необязательный параметр метода Show - vbModal заставляет программу не воспринимать никакие воздействия до тех пор, пока вызванное окно не будет закрыто. Запустите программу.
Теперь добавим к программе калькулятор.
Перейдите в обработчик события mnuCalc_Click.
Shell “Calc.exe” Команда Shel l (Оболочка) заставляет программу запустить другую программу, имя (и путь) которой указывается как параметр. Испытайте программу. Остался один незадействованный пункт – справка. Создание полноценной справочной системы – длительный и довольно сложный процесс, выходящий за рамки нашего курса. Мы сделаем проще. Откройте стандартный «Блокнот» Windows.
Перейдите в обработчик события mnuHelpText_Click. Внесите в него строку: Shell "Notepad.exe " & App.Path & "\Help.txt", _ vbNormalFocus ‘Notepad.exe – стандартный Блокнот Windows. Здесь Вы видите объект App (от Application – Приложение). Он представляет собою Ваше приложение. Свойство Path (Путь) возвращает путь к приложению.
Shell “Notepad.exe c:\VB Begin\Help.txt” Но, если вы переместите приложение с текстовым файлом в другой каталог, эта команда работать не будет.
Запустите Вашу программу, выполните команду меню СправкаСправочная информация... Как видите, открылся Блокнот с вашим файлом справки. Для такой программки, как наша, этот способ вполне приемлем, а позже мы сделаем по-другому… Проверьте код формы mfrmOrganizer, он должен выглядеть примерно так: Option Explicit Private Sub mnuAbout_Click() frmAbout.Show vbModal End Sub
Private Sub mnuCalc_Click() Shell "Calc.exe" End Sub
Private Sub mnuCascade_Click() Me.Arrange vbCascade End Sub
Private Sub mnuDiary_Click() frmDiary.ZOrder End Sub
Private Sub mnuExit_Click() Unload Me End Sub
Private Sub mnuHelpText_Click() Shell "Notepad.exe " & App.Path & "\Help.txt", vbNormalFocus End Sub
Private Sub mnuHoriz_Click() Me.Arrange vbTileHorizontal End Sub
Private Sub mnuPhoneBook_Click() frmPhoneBook.ZOrder End Sub
Private Sub mnuVert_Click() Me.Arrange vbTileVertical End Sub Итак, вы создали вполне полноценное меню и научились управлять им. К сожалению, VB не позволяет прибавлять к меню значки (как, например, в самом VB или в Word) – вернее, это можно сделать, но необходимые знания выходят далеко за пределы нашего вводного курса. Имейте в виду следующую особенность MDI-программ. Если есть меню на главной MDI-форме, и есть меню на дочерней форме, то при открытии дочерней формы ее меню заместит меню главной формы. Давайте попробуем:
Как видите, меню главной формы заменяется единственным пунктом « Пример».
Меню восстановилось.
Эта особенность поведения меню в MDI-программах обща для всех Windows-приложений, и ее необходимо учитывать и соответственно проектировать меню. Вопросы
Задания
|