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

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

Изменение меню во время работы программы

VBA позволяет изменять и настраивать систему меню приложения динамически во время его работы. Предоставляемые для этого возможности велики. Вы можете заменять одну панель меню на другую, удалять команды меню или делать их временно недоступными ("серыми"), переименовывать команды. Рассмотрим эти возможности подробнее.

Вывод собственной панели меню

Чтобы на экране показалась новая панель меню вместо текущей, задайте значение True свойству Visible объекта CommandBar, представляющего панель меню, которая должна появиться. Новая панель меню заменит прежнюю активную панель на экране. Чтобы восстановить прежнюю панель, при завершении работы программы нужно задать свойству Visible значение False.

В Excel и PowerPoint для замены основной панели приложения применяется процедура, обрабатывающая событие, после которого должна появиться новая панель или макрос. В Word можно обеспечить вывод собственной панели меню при запуске приложения, если заранее активизировать ее и сохранить в проекте Normal. Тогда при следующем запуске эта панель появится на экране как основная. Другой вариант - установить свойство Visible в процедуре обрабатывающей событие Open.

Динамическое изменение видимости команд меню

Если некоторые команды меню выполняют действия, связанные с определенными объектами (документами), имеет смысл делать их видимыми при активизации этих объектов и скрывать, когда соответствующие объекты недоступны. Для этого свойству Visible этих команд нужно задать значение True при активизации объекта и False - при его деактивизации (закрытии, удалении и т. п.). Точно так же можно делать видимой и скрывать и панель меню, предназначенную для работы с определенным объектом.

Проще всего выполнять переустановку свойства Visible в процедурах, обрабатывающих события активизации (открытия, загрузки, появления на экране и т. п.) и деактивизации (закрытия, выгрузки, удаления с экрана и т. п.). Если для данного объекта нет подходящих событий, можно попытаться включить изменение свойства Visible для интересующих нас команд в процедуры, обрабатывающие событие OnAction других команд меню или управляющих кнопок.

Word сохраняет параметры настройки (в том числе и пользовательские меню) в документах и шаблонах. Поэтому эти компоненты меню видны, если соответствующий документ или шаблон доступен в данном контексте, и они исчезают с экрана, когда документ или шаблон недоступен. Excel же сохраняет пользовательские изменения интерфейса в рабочей памяти, поэтому для управления видимостью компонентов меню применяется изменение свойства Visible в процедурах обработки событий.

Управление доступом к командам меню

Иногда удобней управлять доступом пользователя к командам меню, не скрывая и восстанавливая их на экране, а отключая реакции на их выбор и нажатие. Такие команды видны на экране, но отличаются от активных команд своим тусклым, "серым" видом. Для управления доступом к компонентам меню служит булево свойство Enabled (Включен). Если оно равно True, соответствующий компонент (команда, выпадающее меню или подменю) доступен - False делает компонент недоступным ("серым"). Установив для свойства Enabled подменю значение False, можно сделать недоступными все его команды. Так можно управлять доступом к собственным компонентам меню. Для встроенных компонентов меню переустановить свойство Enabled нельзя. Сделаем недоступной пользовательскую команду "Сохранить базу" выпадающего меню "Файлы" на панели "Worksheet Menu Bar" рабочего листа Excel.

CommandBars("Worksheet Menu Bar").Controls("Файлы") _
	Controls.Add("Сохранить базу").Enabled = False

Все команды выпадающего меню "Файлы" можно сделать недоступными оператором:

CommandBars("Worksheet Menu Bar").Controls("Файлы").Enabled = False
Переименование команды меню

VBA позволяет динамически переименовывать команды меню, используя свойство Caption (Заголовок) изменяемой команды. Это может пригодиться, например, при настройке меню на язык пользователя. В следующем примере в англоязычной версии Office 2000 имя команды "Open Database" переводится на русский язык.

CommandBars("MyMenubar").Controls("File").Controls("Open Database") _
	.Caption = "Открыть базу данных"

Другой способ - завести переменную, ссылающуюся на данную команду:

Set openData = CommandBars("My Menubar").Controls _
	("File").Controls("Open Database")

и затем использовать ее в программе для доступа к команде. При этом изменить заголовок можно так:

openData.Caption = "Открыть базу данных"
полина есенкова
полина есенкова
Дмитрий Вологжин
Дмитрий Вологжин
Добрый день, прошел тесты с 1 по 9, 10 не сдал, стал читать лекцию и всё пройденные тесты с 1 по 9 сбросились, когда захотел пересдать 10 тест.