Глава 10 Создание собственного головного меню
Создание меню с помощью диалогового окна «Настройка»
Согласно существующим формальным и фактическим стандартам проектирования интерфейса, работа прикладной программы должна начинаться с активизации головного меню, которое находится в верхней части окна приложения. Собственное головное меню для прикладной системы можно спроектировать вручную, вызвав диалоговое окно «Настройка» или используя VBA.
Во всех приложениях Office можно спроектировать собственное головное меню визуально, используя для этого диалоговое окно «Настройка». Для его вызова нужно в меню Вид выбрать команду Панели инструментов, а затем в появившемся подменю – команду Настройка. Новое меню создается так:
1) щелкните кнопку «Создать» на вкладке Панели инструментов (рис. 117);
2) в появившемся окне «Создание панели инструментов» (рис. 116) введите имя создаваемого меню, в нижнем списке «Сделать панель доступной для» необходимо выбрать имя документа, для которого создается панель (не Normal!) и щелкнуть кнопку ОК. На экране появится плавающая панель с заданным именем (рис. 118);
3) при помощи окна «Настройка» (рис. 119) и вкладки «Команды» добавьте необходимые команды для созданного меню. В результате на панели появятся кнопки выбранных команд (рис. 120).
Рис. 117. Окно создания собственной панели
Рис. 118. Диалоговое окно «Создание панели инструментов»
Добавление выпадающих меню
Этот способ добавления меню или команды нагляднее, и его, в отличие от процедуры создания нового меню, можно применять в любом приложении Office. Откройте диалоговое окно «Настройка», а затем:
1) если модифицируемого меню на экране нет, поставьте флажок выбора рядом с именем изменяемого меню в списке Панели инструментов на одноименной вкладке Панели инструментов;
Рис. 119. Окно «Настройка»
2) в списке Категории на вкладке Команды выберите Новое меню (рис. 120);
3) выберите команду Новое меню справа в списке Команды и перетащите ее в то меню, к которому добавляется новое меню. При этом знак «I» отмечает то место, куда попадет имя нового меню (рис. 120);
4) щелкните правой кнопкой мыши Новое меню (при включенном окне Настройка), введите имя этого меню в поле Имя (рис. 121) появившегося окна.
Если теперь щелкнуть имя нового меню, то на экране под ним появится пустой прямоугольник.
Рис. 120. Создание нового меню в головном меню приложения
Рис. 121. Редактирование пункта меню
Добавление подменю
Подменю (или дочернее меню) примыкает с боковой стороны родительского меню на уровне той команды, которая является заголовком подменю. Подменю можно добавлять к выпадающим и всплывающим меню, а также и к другим подменю. Сначала добавляется пустое подменю, затем в него вставляются команды.
Для добавления подменю нужно активизировать диалоговое окно «Настройка» и сделать модифицируемое меню видимым. После этого нужно действовать так:
1) на вкладке Команды в списке Категории выберите команду Новое меню;
2) выберите команду Новое меню справа в списке Команды и перетащите ее в то место меню, куда нужно добавить подменю. Чтобы выпадающее меню открылось, показав уже имеющиеся в нем элементы, протащите Новое меню через имя выпадающего меню. При этом горизонтальная черта будет отмечать то место в списке рубрик выпадающего меню, куда попадет заголовок нового подменю;
3) щелкните правой кнопкой мыши Новое меню и введите заголовок нового подменю в поле Имя появившегося окна. Теперь при щелчке заголовка подменю справа или слева от него появится пустое подменю (рис. 122).
Рис. 122. Создание подменю
Добавление встроенной команды
MS Office позволяет добавлять команды к любым встроенным и пользовательским меню, а также изменять внешний вид, группировать и визуально отделять одну группу команд от другой.
В диалоговом окне «Настройка» сделайте модифицируемое меню видимым, а затем:
1) на вкладке Команды выберите в списке Категории категорию добавляемой команды – все команды данной категории будут показаны в списке Команды;
2) выберите команду в списке Команды и перетащите ее в то меню или подменю, куда она добавляется. Чтобы выпадающее меню или подменю открылось, показав имеющиеся в нем элементы, протащите команду через заголовок соответствующего выпадающего меню или подменю. Горизонтальная черта отмечает место в списке команд выпадающего меню, куда попадет заголовок нового подменю (рис. 123).
Рис. 123. Добавление встроенных команд
Скопировать команду можно и иначе: выведите на экран меню с нужной командой и перетащите ее в свое меню при нажатой клавише Ctrl.
Добавление собственной команды
Добавление команды с помощью окна «Настройка» в собственное или встроенное меню зависит от приложения Office, в котором оно выполняется:
• Microsoft Excel. Действуя так же, как и при вставке встроенной команды, выберите в списке Категории команду Макрос (Macros) и перетащите элемент Настраиваемая команда меню из списка Команды в меню. Щелкните эту команду правой кнопкой мыши и выберите в появившемся меню команду Назначить макрос. Затем введите в поле Имя имя макроса, который должен запускаться командой меню;
• Microsoft Word и Microsoft PowerPoint. Как при вставке встроенной команды, выберите в списке Категории команду Макросы и перетащите в меню имя нужного макроса из списка Команды (рис. 125, подробнее в главе 2). Для этого предварительно необходимо создать макрос (модуль) с необходимым именем и действием (рис. 124). Результат действия команды показан на рис. 126.
Рис. 124. Создание макроса (модуля) запуска разработанной формы
Рис. 125. Выбор макроса (модуля), открывающего форму
Рис. 126. Добавление собственной команды в разработанную панель и ее запуск
Удаление команды
Для удаления компонента меню надо в диалоговом окне «Настройка» сделать видимым модифицируемое меню, щелкнуть правой кнопкой мыши удаляемый элемент и в появившемся меню выбрать команду Удалить. Чтобы удалить целиком пользовательскую панель меню, нужно перейти на вкладку Панели инструментов диалогового окна «Настройка» и, выбрав в списке Панели инструментов имя удаляемой панели меню, щелкнуть кнопку Удалить.
Восстановление встроенных компонентов меню
Восстановить можно только встроенный элемент меню, который был ранее удален. Как и другие действия над меню, это делается в окне «Настройка». Если при этом восстановится заголовок выпадающего меню или подменю, то вместе с ним восстановятся само меню и все его потомки.
В диалоговом окне «Настройка» нужно сделать видимым модифицируемое меню. Затем, щелкнув правой кнопкой мыши заголовок выпадающего меню или подменю, которое нужно восстановить, выберите в появившемся меню команду Сброс.
Чтобы восстановить встроенную панель меню, перейдите на вкладку Панели инструментов окна «Настройка», выберите в списке Панели инструментов имя восстанавливаемой панели меню и щелкните кнопку Сброс.
Создание меню с помощью VBA
Новое меню в Excel, Word или PowerPoint обычно создается средствами VBA, поскольку в этих приложениях диалоговое окно «Настройка» не содержит кнопки Свойства. Новое меню создается методом Add коллекции CommandBars (Панели команд):
Выражение. Add(Name, Position, MenuBar, Temporary),
где выражение – обязательное выражение, возвращающее объект CommandBars, а все параметры в скобках необязательны. Name задает имя нового меню;
Position определяет его положение (значения-константы msoBarLeft, msoBarTop, msoBarRight, msoBarButtom определяют положение меню слева, вверху, справа или внизу окна, msoBarFloating задает «плавающее» меню, msoBarPopup указывает, что новое меню будет всплывающим).
Значение True параметра MenuBar указывает на то, что новое меню заменит текущую активную строку меню (по умолчанию – False). Значение True параметра Temporary означает, что новое меню будет временным и исчезнет, когда закроется содержащее его приложение (по умолчанию – False).
В следующем примере создается новое меню «Головное меню»:
Dim CstmBar As CommandBar
Set CstmBar = CommandBars.Add(Name:="Головнoe меню",
Position:=msoBarTop, MenuBar:=True, Temporary:=False)
Добавление выпадающих меню
Чтобы добавить новое меню программно, надо использовать метод Add коллекции CommandBarControls, применив его к объекту типа CommandBar, который представляет панель нашего меню. Данный метод позволяет помещать на панель кнопки (CommandBarButton), комбинированные списки (CommandBarComboBox) и выпадающие меню (ComandBarPopup). Вызов метода имеет вид:
выражение. Add(Type, Id, Parameter, Before, Temporary),
где Выражение должно возвратить объект типа CommandBarsControl.
Параметры в скобках необязательны. Параметр Туре (Тип) задает тип добавляемого объекта. Его значение msoControlPopup указывает, что добавляемый управляющий элемент – выпадающее меню. Для пользовательских меню параметры Id и Parameter можно опустить. Значение аргумента Before – число, указывающее положение нового элемента в последовательности элементов панели: если его нет, элемент помещается в конец. Определить имя и ключ быстрого доступа к созданному меню можно, задав значение свойства Caption.
Пример добавления выпадающего меню Ввод документов панели Головное меню с ключом быстрого доступа «В»:
Dim CstmCtrl As CommandBarControl
Set CstmCtrl = CstmBar.Controls.Add(Type:=msoControlPopup,
Before:=1)
CstmCtrl.Caption = «&Вводдокументов»
Чтобы добавить новое подменю программно, к объекту, представляющему родительское выпадающее меню, нужно применить метод Add коллекции CommandBarControls. В качестве параметра Туре (Тип) надо использовать значение msoControlPopup.
В следующем примере в конец выпадающего меню Ввод документов, расположенного на панели меню Головное меню, добавляется подменю «о движении товаров»:
Dim CstmPopUpi As CommandBarPopup
Set CstmPopUpi =
stmCtrl.Controls.Add(Type:=msoControlPopup)
CstmPopUpi.Caption = «о движении товаров»
Добавление команд
Добавить новую команду в меню можно, применив метод Add коллекции CommandBarControls к объекту, представляющему изменяемое меню. Для того чтобы добавить собственную команду, вставьте ее имя в меню, а затем в качестве значения свойства OnAction задайте имя VBA-процедуры, которая должна вызываться при выборе данной команды. В качестве значения аргумента Туре (Тип) метода Add укажите msoControlButton, означающее, что вставляемый в меню элемент будет командой. Добавим команду «Накладная» в выпадающее меню Ввод документов из панели Головное меню. Выбор этой команды запускает процедуру Invoice:
Set CstmCtrl = CstmPopUpi.Controls.Add(Type:=msoControlButton)
CstmCtrl.Caption = «Накладная»
CstmCtrl.OnAction = «Module1.Invoice»
Метод Add позволяет вставлять в меню и встроенные команды. Для этого при вызове задайте значение параметра Id, равное числовому идентификатору данной команды в Office. Поскольку в Office 2000 количество команд доходит до 4000, в табл. 22 приведем основные команды редактирования.
Таблица 22
Фрагмент таблицы идентификаторов встроенных команд меню
Идентификатор |
Имя команды |
Локальное имя |
2 |
&Spelling |
Орфография |
3 |
&Save |
Сохранить |
4 |
&Print |
Печать |
18 |
&New |
Создать |
19 |
&Copy |
Копировать |
21 |
&Cut |
Вырезать |
22 |
&Paste |
Вставить |
23 |
&Open |
Открыть |
Пример добавления команды проверки правописания Spelling в меню Проверки из панели Головное меню:
Set mySpell = CommandBars(«Головноеменю»).Соntrols(«Проверки»)_.Controls.Add(Id:=2)
Пример 61. Создать документ, в котором будут отключены все встроенные меню и создано собственное иерархическое меню. На верхнем уровне меню будет состоять из одного пункта. Оно будет включать два подменю, каждое из которых содержит по одной команде. Для реализации данных условий создаем простую форму, содержащую две кнопки: Создать и Отмена (рис. 127). Первая кнопка отключает все панели открытого документа и создает собственное меню (рис. 127), вторая кнопка возвращает все панели на место (рис. 128).
Технология выполнения
1. Активизируйте приложение Word и создайте документ.
2. Перейдите в редактор VBA и создайте форму.
3. Создайте процедуру создания собственной панели.
Option Explicit
Public Sub CreateCustomMenu()
Dim CstmBar As CommandBar
Dim CstmPopUpi As CommandBarPopup, CstmPopUp2 As CommandBarPopup
Dim CstmCtrl As CommandBarControl
Dim Exist As Boolean
'Выключаемвсепанели
For Each CstmBar In CommandBars
CstmBar.Enabled = False
Next CstmBar
'Создаем, включаем и делаем видимой собственную панель
Exist = False
For Each CstmBar In CommandBars
If CstmBar.Name = «Головное меню» Then
Exist = True
Exit For
End If
Next CstmBar
If Not Exist Then
Set CstmBar = CommandBars.Add(Name:="Головнoe меню", Position:=msoBarTop, MenuBar:=True, Temporary:=False)
End If
CstmBar.Enabled = True
CstmBar.Visible = True
'Добавляем меню на панель
Exist = False
For Each CstmCtrl In CstmBar.Controls
If CstmCtrl.Caption = «&Вводдокументов» Then
Exist = True
Exit For
End If
Next CstmCtrl
If Not Exist Then
Set CstmCtrl = CstmBar.Controls.Add(Type:=msoControlPopup, Before:=1)
CstmCtrl.Caption = «&Ввод документов»
'Добавляем две команды подменю
Set CstmPopUpi =
CstmCtrl.Controls.Add(Type:=msoControlPopup)
CstmPopUpi.Caption = « о движении товаров»
Set CstmPopUp2 =
CstmCtrl.Controls.Add(Type:=msoControlPopup)
CstmPopUp2.Caption = « финансовых»
'Добавляем команду в каждое подменю
Set CstmCtrl =
CstmPopUpi.Controls.Add(Type:=msoControlButton)
CstmCtrl.Caption = «Накладная»
CstmCtrl.OnAction = «Module1.Invoice»
Set CstmCtrl =
CstmPopUp2.Controls.Add(Type:=msoControlButton)
CstmCtrl.Caption = «Счет»
CstmCtrl.OnAction = «Module1.Account»
End If
End Sub
Пояснения к процедуре. Вначале, используя свойство Enabled, были отключены все панели. Затем было сформировано головное меню с двумя подменю и командами, содержащее всего один пункт. Обратите внимание: перед добавлением нового пункта обычно проверяется, а не был ли он уже добавлен. Подобная проверка позволяет избежать ошибок, возникающих при попытках добавить уже существующий пункт или удалить несуществующий.
4. Создайте процедуру восстановления панелей инструментов документа.
Public Sub ResetMainMenu()
Dim CstmBar As CommandBar
'Включаемвсепанели
For Each CstmBar In CommandBars
CstmBar.Enabled = True
Next CstmBar
Set CstmBar = CommandBars.Item(«Menu Bar»)
CstmBar.Visible = True
End Sub
5. Пропишите обработчик кнопки «Создать».
Private Sub CommandButton1_Click()
Call CreateCustomMenu
End Sub
6. Пропишите обработчик кнопки «Отмена», восстанавливающей стандартное окружение.
Private Sub CommandButton2_Click()
Call ResetMainMenu
End Sub
7. Чтобы пример был законченным, приведем процедуры, вызываемые в ответ на выбор команд меню Накладнаяи Счет:
Public Sub Invoice()
MsgBox («Накладная!»)
End Sub
Public Sub Account()
MsgBox («Счет!»)
End Sub
8. Откомпилируйте программу, запустите форму на выполнение.
Рис. 127. Форма примера 61 в рабочем режиме. Результат работы кнопки Создать
Примечание.Данный пример доработать для более рационального использования следующим образом: в головном меню разработчика создать пункт Форма, который вызывает соответствующую форму, редактирующую меню всего приложения (рис. 129, 130). После нажатия кнопки Создать меню всего приложения Word изменяется, подключив Главное меню, созданное программно. В этом меню пункт «Работа с меню + Отмена» запускает форму с соответствующими кнопками (Создать и Отменить).
Рис. 128. Результат работы кнопки Отменить
Рис. 129. Главное меню разработчика и вызываемая форма
Рис. 130. Главное меню приложения, созданное программно, и пункт Отмена, вызывающий форму с кнопкой Отменить
|