Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Метода ИТ.doc
Скачиваний:
26
Добавлен:
07.11.2018
Размер:
3 Мб
Скачать
☆

Основные сведения Иерархия объектов для работы с панелями инструментов и меню

Коллекция CommandBars содержит все панели команд (объекты CommandBar) приложения. Каждый объект CommandBar представляет собой конкретную панель команд.

Панель команд(CommandBar) – объект, который используется в VBA для управления меню и панелями инструментов. Данный объект позволяет программно управлять элементами интерфейса, включающим:

  • Строку меню, панели инструментов и контекстное меню.

  • Меню на строке меню и панелях инструментов.

  • Подменю в меню, подменю в контекстных меню.

Рис. 10.5. Коллекция CommandBars

Кнопочный элемент управления (ButonControl) – кнопка на панели инструментов или элемент меню в меню, подменю или контекстном меню. Кнопка на панели инструментов и элемент меню имеют практически одинаковые свойства. Отличие только в том, что кнопка на панели инструментов может быть отображена только как значок, значок или текст, а элемент меню только как текст или значок и текст.

Комбинированный элемент управления(ComboBoxControl)-объект, представляющий собой пользовательское поле, выпадающий список или поле со списком на строке меню, панели инструментов, подменю или контекстном меню. Пользовательский комбинированный элемент управления может отображаться с надписью или без нее. Когда панель команд закреплена в вертикальном положении, комбинированный элемент управления на данной панели становится невидимым. Многие встроенные элементы управления, такие как например, кнопка «Отменить(Undo)», считаются комбинированными элементами управления. Однако большинство свойств и методов данного объекта для них не доступно.

Всплывающий элемент управления(pop-up control) – объект, представляющий собой встроенный или пользовательский элемент управления на строке меню или панели инструментов, который отображает меню при щелчке на нем мышью. Этот объект также позволяет получить программный доступ к встроенным или пользовательским элементам меню в меню, подменю или контекстном меню, которые отображают подменю, когда указатель расположен над ним.

Методы коллекции CommandBars:

  • Add

  • FindControl

  • FindControls

  • ReleaseFocus

Метод Add.

Этот метод позволяет создавать панель команд, которая автоматически добавляет в коллекцию CommandBars. Данный метод возвращает объект CommandBar.

В шаблоне ContractWithAuthor.dot создадим программный модуль, реализующий пользовательское меню.

1. Откройте шаблон ContractWithAuthor.dot. Не следует открывать шаблон двойным щелчком на значке или имени файла, так как это приведет к созданию нового документа на основе выбранного шаб­лона, а не к открытию для изменения самого шаблона. Шаблоны следует от­крывать командой Файл Открыть или нажатием кнопки «Открыть» панели инструментов Стандартная.

2. Создайте процедуру (сервисмакросмакросы…). В поле Имя ввести CustomMenu.

Рассмотрим процесс создания пользовательского меню на примере меню Договор.

Public cmbBar() As String

Public first As Integer

Sub CustomMenu(menuBar As Boolean)

' Объявления используемых переменных

Dim mymenu As CommandBar ' переменная для строки меню

‘ переменные для четырех пунктов меню в строке меню

Dim mymenu1 As CommandBarPopup

Dim mymenu2 As CommandBarPopup

Dim mymenu3 As CommandBarPopup

Dim mymenu4 As CommandBarPopup

' переменные для трех команд первого меню

Dim mymenu11 As CommandBarButton

Dim mymenu12 As CommandBarButton

Dim mymenu13 As CommandBarButton

' переменные для двух команд первого меню

Dim mymenu21 As CommandBarButton

Dim mymenu22 As CommandBarButton

' переменная команды третьего меню

Dim mymenu31 As CommandBarButton

' переменная команды четвертого меню

Dim mymenu41 As CommandBarButton

' Создание строки меню, заменяющей активное меню приложения

Set mymenu = CommandBars.Add(Name:="Меню Authors", _

Position:=msoBarTop, menuBar:=menuBar, Temporary:=True)

' Строка меню отображается сразу после создания

mymenu.Visible = True

' Создание меню "Договор" в строке меню

Set mymenu1 = mymenu.Controls.Add(msoControlPopup)

mymenu1.Caption = "&Договор"

' Создание команд меню "Договор"

' Команда "Заполнить"

Set mymenu11 = mymenu1.Controls.Add(msoControlButton)

mymenu11.Caption = "&Заполнить..."

‘процедура-заглушка

‘Указывается название процедуры, вызываемой при выборе команды

‘вызываем процедуру-заглушку, т.к. команда еще не разработана

mymenu11.OnAction = " MsgMenuNotCreated "

‘Команда "Сохранить"

Set mymenu12 = mymenu1.Controls.Add(msoControlButton)

mymenu12.Caption = "&Сохранить..."

mymenu12.OnAction = " MsgMenuNotCreated "

mymenu12.Enabled = False

' Команда "Выход"

Set mymenu13 = mymenu1.Controls.Add(msoControlButton)

mymenu13.BeginGroup = True ' Разделительная черта

mymenu13.Caption = "В&ыход"

mymenu13.OnAction = “Document_Close”

End Sub

‘процедура-заглушка

Public Sub MsgMenuNotCreated()

MsgBox “Команда еще не разработана”, , “Сообщение разработчика”

End Sub

Сервис с командой скрыть/показать панели.

Команда скрыть/показать панели предназначена для отображения и последующего скрытия основного меню Word и его встроенных панелей инструментов Стандартная и Форматирование.

Sub ShowHideBars()

Dim statusMainBar As Boolean

' Отображается или не отображается строка меню приложения-контейнера

If CommandBars("Menu Bar").Visible Then

statusMainBar = True

Else

statusMainBar = False

End If

' Удаление пользовательских панелей команд

CommandBars("Меню Authors").Delete

' Отображение или скрытие панелей инструментов приложения-контейнера

CommandBars("Standard").Visible = Not _

CommandBars("Standard").Visible

CommandBars("Formatting").Visible = Not _

CommandBars("Formatting").Visible

If (statusMainBar = True) Then

' Отображалось меню приложения-контейнера, следовательно

' пользовательское меню заменяет меню приложения

CustomMenu (True)

' Замена надписи в команде пользовательского меню

CommandBars("Меню Authors").Controls("Сервис") _

.Controls(1).Caption = "Пока&зать панели"

Else

' Меню приложения-контейнера не отображалось

' Пользовательское меню становится панелью инструментов CustomMenu (False)

' Замена надписи в команде пользовательского меню

CommandBars("Меню Authors").Controls("Сервис") _

.Controls(1).Caption = "Ск&рыть панели"

End If

End Sub

Создадим процедуру Init(), которая будет вызываться при загрузке нашего приложения. Сначала в ней определяем, какие отображались встроенные панели инструментов при загрузке нашего приложения и сохраняем информацию о них в массиве cmdBar, доступном во всем приложении.

Глобальная переменная first в процедуре init () устанавливается равной 1, если до загрузки нашего приложения в окне Word была отображена хоте бы одна панель инструментов — в противном случае она имеет значение 0. В цикле For Each в глобальный динамический массив cmdBar заносятся имена отображаемых стандартных панелей инструментов, которые хранятся в этом массиве до завершения работы всего приложения, а сами панели инструментов делаются невидимыми. Используемые для указанных целей переменные должны быть описаны в области объявлений модуля MenuFunctions.

Public cmdBar () As String

Public first As Integer

‘Далее в процедуре init ( ) формируется пользовательское меню, замещающее основное меню приложения Word (вызов процедуры CustomMenu ).

Public Sub init()

Dim bar As CommandBar

first = 0

Application.Caption = "Договор с авторами" ' Отображение новой ‘надписи

' Скрытие панелей инструментов приложения Word

For Each bar In CommandBars

' Проверка: панель инструментов и отображается ли?

If bar.Type = msoBarTypeNormal And bar.Visible Then

If first = 0 Then

ReDim cmdBar(1 To 1)

first = 1

Else

ReDim Preserve cmdBar(1 To UBound(cmdBar) + 1)

End If

cmdBar(UBound(cmdBar)) = bar.Name

bar.Visible = False

End If

Next

CustomMenu (True) ' Создание строки меню и ее отображение

End Sub

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

Public Sub exitApplication()

' удаление пользовательского меню

CommandBars("Меню Authors").Delete

' отображение скрытых панелей инструментов приложения Word

If first <> 0 Then

For Each nm In cmdBar

CommandBars(nm).Visible = True

Next

End If

Application.Caption = "" ' Возвращение стандартной надписи

End Sub

Процедуру init () логично связать с событием создания документа Word New на основе разрабатываемого нами шаблона, а процедуру exitApplication () - с событием закрытия документа Close. Эти действия осуществляются добавлением в модуль ThisDocument шаблона ContractWithAuthor.dot следующих двух процедур обработки событий New и Close.

Private Sub Document_New ( )

init

End Sub

Private Sub Document_Close ( )

exitApplication

End Sub

Свяжем также обработчик события Close с командой Выход меню Договор.

Теперь процедура exitApplication( ), решающая задачу корректного завершения нашего приложения вызывается не только выполнением команды Выход меню Договор, но и закрытием документа стандартными средствами самого Word – нажатием кнопки «Закрыть окно» в правой части строки меню.