Тверской государственный университет
Опубликован: 13.09.2006 | Доступ: свободный | Студентов: 3491 / 369 | Оценка: 4.65 / 4.29 | Длительность: 30:37:00
Специальности: Программист, Менеджер
Лекция 12:

Проектирование интерфейса. Меню

Пример построения документа с собственным меню

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

Option Explicit

Public Sub CreateCustomMenu()
	Dim CstmBar As CommandBar
	Dim CstmPopUp1 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:="Головное меню", _
			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 CstmPopUp1 = CstmCtrl.Controls.Add(Type:=msoControlPopup)
			CstmPopUp1.Caption = " о движении товаров"
			
		Set CstmPopUp2 = CstmCtrl.Controls.Add(Type:=msoControlPopup)
			CstmPopUp2.Caption = " финансовых"
		
		'Добавляем команду в каждое подменю
		Set CstmCtrl = CstmPopUp1.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
11.1.

Заметьте, вначале, используя свойство Enabled, были отключены все панели. Затем было сформировано головное меню, содержащее всего один пункт, с двумя подменю и командами. Обратите внимание, перед добавлением нового пункта, обычно делается проверка, а не был ли он уже добавлен. Подобная проверка позволяет избежать ошибок, возникающих при попытках добавить уже существующий пункт или удалить несуществующий. Чтобы наш пример был законченным, приведем процедуры, вызываемые в ответ на выбор команд меню Накладная и Счет:

Public Sub Invoice()
	MsgBox ("Накладная!")
End Sub

Public Sub Account()
	MsgBox ("Счет!")
End Sub

Вот как выглядит документ по завершении работы процедуры CreateCustomMenu:

Документ, имеющий собственное меню

Рис. 11.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

Группировка команд меню

Разделение групп логически связанных команд меню горизонтальными линиями позволяет пользователям более эффективно работать с большими меню, содержащими разнотипные команды. Сами разделяющие линии командами не являются. Установить или убрать их можно в диалоговом окне Настройка. Для этого в этом окне сделайте видимым модифицируемое меню. Затем щелкните правой кнопкой мыши команду, над которой хотите провести линию. В появившемся меню выберите команду Начало группы (Begin Group). Убирается линия аналогично.

Ту же задачу разбиения команд на группы можно решить из VBA, присвоив значение True свойству BeginGroup (Начало группы) объекта, представляющего команду, которая должна открывать очередную группу. Чтобы убрать разделяющую линию, присвойте этому свойству False. Вот как выделить группу команд меню "Ввод документов", начинающуюся со вставленной команды "ввод накладной":

Set InvCommand = CommandBars("Головное меню").Controls("Ввод документов") _
	.Controls("ввод накладной")
InvCommand.BeginGroup = True

Удаление команд меню

Удаление команд, подменю и меню позволяет упростить работу с приложением, приспособить его к нуждам отдельного пользователя. В Office 2000 можно удалять встроенные и пользовательские выпадающие меню из панелей меню, дочерние подменю из родительских меню, команды из всех видов меню. Единственное, чего сделать нельзя - удалить встроенную панель меню или встроенное всплывающее меню, даже если из них удалены все команды. Главное, что этого делать не нужно ни в коем случае. Панель можно сделать только недоступной или невидимой, что мы и демонстрировали в наших примерах.

Удаленные из меню встроенные подменю и команды можно восстановить в нужный момент. Собственные же удаленные подменю и команды придется при необходимости воссоздавать заново.

Удаление команды с помощью окна Настройка

Для удаления компонента меню нужно в диалоговом окне Настройка модифицируемое меню сделать видимым, щелкнуть правой кнопкой мыши удаляемый элемент и в появившемся меню выбрать команду Удалить (Delete).

Чтобы удалить целиком пользовательскую панель меню, нужно перейти на вкладку Панели инструментов диалогового окна Настройка и, выбрав в списке Панели инструментов имя удаляемой панели меню, щелкнуть кнопку Удалить.

Удаление команды с помощью VBA

Для удаления компонента меню используется метод Delete (Удалить). Этот оператор, например, удаляет выпадающее подменю Favorites из панели меню Web:

CommandBars("Web").Controls("Favorites").Delete

Собственную (пользовательскую) панель меню "Головное меню" можно целиком удалить оператором:

CommandBars("Головное меню").Delete
Как восстановить удаленные встроенные компоненты меню

Восстановить можно только встроенный удаленный элемент меню. Как и другие действия над меню, это делается в окне Настройка или из VBA. Если при этом восстановится заголовок выпадающего меню или подменю, вместе с ним восстановится само меню и все его потомки.

Как всегда, в диалоговом окне Настройка нужно сделать модифицируемое меню видимым. Затем, щелкнув правой кнопкой мыши заголовок выпадающего меню или подменю, которое нужно восстановить, в появившемся меню выберите команду Сброс (Reset).

Чтобы восстановить встроенную панель меню, перейдите на вкладку Панели инструментов окна Настройка, выберите в списке Панели инструментов имя восстанавливаемой панели меню и щелкните кнопку Сброс(Reset).

Восстановить встроенный компонент меню программно можно методом Reset. Например, следующий оператор восстанавливает выпадающее подменю Favorites из панели меню Web:

CommandBars("Web").Controls("Favorites").Reset

А вот как восстановить всю панель меню Menu Bar из Word:

CommandBars("Menu Bar").Reset
полина есенкова
полина есенкова
Дмитрий Вологжин
Дмитрий Вологжин
Добрый день, прошел тесты с 1 по 9, 10 не сдал, стал читать лекцию и всё пройденные тесты с 1 по 9 сбросились, когда захотел пересдать 10 тест.