Этюды для программистов Microsoft Word

Home ] Up ] Этюд 2.1. Встроенные панели инструментов ] Этюд 2.2. Программное создание панели инструментов ] Этюд 2.3. Встроенные иконки ] Этюд 2.4. Инструменты для работы с картинками ] Этюд 2.5. Изменяемая панель инструментов ]


Этюд 2.2. Программное создание панели инструментов

                                                                                                   Меню(англ. menu, фр. menu).

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

 

Википедия

Far too many people spend their lives reading the menu instead of enjoying the banquet.

Unknown author.
http://www.websters-online-dictionary.org/definition/menu

 

Создание панели инструментов, содержащей элементы управления, отличные от кнопок, может быть осуществлено только программно. В этом этюде рассматривается создание пользовательской панели инструментов в "программном" режиме (то есть c использованием VBA), добавление на панель различных элементов управления и отработка событий, связанных с элементами управления. Также рассматриваются основные типы элементов управления и их свойства. Работа с иконками рассматривается в следующих этюдах - 2.3 "Встроенные иконки" и 2.4 "Инструменты для работы с картинками".

Ресурсы

Шаблон "AhToolBars.dot", 21 Кб, формат ZIP [скачать].

Перед тем, как приступать к решению поставленной задачи, ознакомимся с основными типами элементов управления Microsoft Word и их свойствами.

Типы элементов управления

Тип элемента управления (свойство CommandBarControl.Type) может быть одной из констант, перечисленных в следующей таблице. При визуальном конструировании панели управления используются только элементы управления типа msoControlButton и msoControlPopup. Работа с остальными типами элементов осуществляется только программно.

 

Константа

Тип элемента

msoControlActiveX

Управляющий элемент ActiveX

msoControlButton

msoControlButtonDropdown

msoControlButtonPopup

msoControlComboBox

msoControlCustom

Reserved for future use.

msoControlDropdown

msoControlEdit

msoControlExpandingGrid

msoControlGauge

msoControlGenericDropdown

Reserved for future use.

msoControlGraphicCombo

msoControlGraphicDropdown

msoControlGraphicPopup

Reserved for future use.

msoControlGrid

msoControlLabel

Reserved for future use.

msoControlOCXDropDown

msoControlPane

Pane control

msoControlPopup

msoControlSplitButtonMRUPopup

msoControlSplitButtonPopup

msoControlSplitDropdown

msoControlSplitExpandingGrid

Reserved for future use.

 

Функции и свойства элементов управления

Рассмотрим вкратце функции и свойства управляющих элементов, которые используются для изменения и управление кнопками, списками и пунктами меню.

 

Любой управляющий элемент может быть видимым или невидимым. Для изменения видимости используется свойство Visible. Любой управляющий элемент может быть доступным или недоступным (засеренным). Для управления доступностью используется свойство Enabled.

 

Для изменения иконки используются функции CopyFace (копирование иконки в буфер обмена), PasteFace (копирование иконки из буфера обмена) и свойство FaceId (использование встроенной иконки).

 

Свойство OnAction представляет собой строку - имя вызываемого макроса. Для изменения функциональности элемента следует присвосить свойству OnAction имя требуемой процедуры.

Кнопки

Кнопка может находиться в двух состояниях: "нажата" или "не нажата". Для изменения состояния кнопки используется свойство State.

В следующей таблице перечислены основные свойства и методы управляющих элементов.

Свойство/метод

Краткое описание

CopyFace

Копирует иконку элемента управления в буфер обмена.

PasteFace

Вставляет иконку элемента управления из буфера обмена.

Если буфер обмена пуст, возникает ошибка.

FaceId

Используется для назначения встроенной иконки.

Встроенные иконки существуют не для всех значений FaceId.

Id

Используется для назначения элементу встроенной функциональности.

Например, значения id = 23 соответствует команде "File\Open".

State

Задает способ отображения состояния кнопки.

Может быть одной из констант типа MsoButtonState:

msoButtonDown, msoButtonMixed, или msoButtonUp.

Style

Задает способ отображения кнопки.

Может быть одной из констант типа MsoButtonStyle:

msoButtonAutomatic

msoButtonIcon

msoButtonCaption

msoButtonIconAndCaption

msoButtonIconAndCaptionBelow

msoButtonIconAndWrapCaption

msoButtonIconAndWrapCaptionBelow

msoButtonWrapCaption.

OnAction

Задает процедуру, которая вызывается при нажатии на кнопку, выборе пункта меню, элемента в списке или изменении поля редактирования.

Visible

Управляет видимостью элемента.

Enabled

Управляет доступностью элемента или панели управления. Имя недоступной панели управления не показывается в списке панелей управления.

Списки и поля редактирования

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

Свойство или метод

Краткое описание

Add

Добавляет элемент на панель управления.

Параметр Type может быть одной из констант типа MsoControlType:

msoControlEdit (поле редактирования),

msoControlDropdown (выпадающий список),

или msoControlComboBox (комбинированный список).

AddItem

Добавляет пункт списка или комбинированного списка..

Caption

Свойство Caption отвечает за название (заголовок) элемента управления, которое отображается рядом с элементом в случае, если для свойства Style установлено значение msoComboLabel.

Style

Управляет отображением заголовка элемента управления.

Может быть одной из констант типа MsoComboStyle:

msoComboLabel (заголовок отображается)

или msoComboNormal (заголовок не отображается).

OnAction

Задает вызываемую процедуру, которая вызывается либо при выборе элемента из списка, либо при вводе текста в поле редактирования и нажатиии кнопки Enter.

Меню и панели инструментов

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

Свойство или метод

Краткое описание

Add

Добавляет меню (аргумент menubar = True) или панель инструментов в коллекцию CommandBars.

Protection

Устанавливает защиту меню или панели инструментов от изменений.

Может быть одной из констант типа MsoBarProtection:

msoBarNoChangeDock

msoBarNoChangeVisible

msoBarNoCustomize

msoBarNoHorizontalDock

msoBarNoMove

msoBarNoProtection

msoBarNoResize

msoBarNoVerticalDock.

Position

Задает позицию меню или панели инструментов относительно главного окна приложения. Может быть одной из констант типа MsoBarPosition:

msoBarLeft, msoBarTop, msoBarRight, msoBarBottom, msoBarFloating,

msoBarPopup (используется для создания контекстных меню).

Пункты меню

Основные свойства и методы используемые для создания пунктов меню и управлении ими кратко описаны в следующей таблице.

Свойство или метод

Краткое описание

Add

Добавляет пункт меню.

Может быть одной из констант типа MsoControlType:

msoControlButton (кнопка)

msoControlEdit (поле редактирования),

msoControlDropdown (список),

msoControlComboBox (комбинированный список).

AddItem

Добавляет элемент в список.

Style

Задает способ отображения элемента. Возможные значения те же, что и для кнопки.

OnAction

Задает вызываемую процедуру, которая вызывается при выборе пользователем пункта меню.

 

Функциональная спецификация

Задача

Cоздать шаблон "AhToolBars.dot", в котором будет размещена панель инструментов "AhToolBars", предоставляющая доступ к макросам создания и удаления пользовательской панели инструментов "Toolbar1". Панель инструментов "Toolbar1" должна содержать  элементы управления следующих типов - msoControlComboBox, msoControlDropdown, msoControlPopup, msoControlEdit и msoControlButton. Элементы остальных типов используются во встроенных панелях инструментов Microsoft Word, но, к сожалению, программно в Microsoft Word не поддерживаются (попытка их создания с помощью VBA приводит к ошибке).

Панель инструментов "AhToolBars"

Панель инструментов " AhToolbars " имеет следующий вид:

Кнопка панели

Макрос

Краткое описание

Help

AhToolBarsHelp

Краткая подсказка по кнопкам панели инструментов.

Create

AhToolBarCreate

Создание панели инструментов "Toolbar1".

Delete

AhToolBarDelete

Удаление панели инструментов "Toolbar1".

Краткая подсказка

Краткая подсказка по кнопкам панели инструментов имеет следующий вид

Cоздание пользовательской панели инструментов

Создание панели инструментов "Toolbar1" происходит при нажатии кнопки "Create". Созданная панель имеет следующий вид и содержит элементы управления различных типов.

 

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

Удаление панели инструментов "Toolbar1" происходит при нажатии кнопки "Delete".

Реализация - шаблон "AhToolbars.dot"

В шаблоне "AhToolbars.dot" реализованы макросы создания и удаления пользовательской панели инструментов.

Константы

Следующие константы, определенные в модуле " AhToolbars " предназначены для тестирования.

'
' File AhToolBars.dot|AhToolBars
'
' Etudes for Microsoft Word Programmers.
' Etude 2.2. Custom Toolbars.
'
' First published on http://www.transcriber.ru
'
' © 2000-2008. Evgeny Akhundzhanov. All rights reserved worldwide.
'
Option Explicit
'
' Constants
'
Const cStrToolbarName As String = "Toolbar1"
Const ciInsertIndex As Long = 1
 

Процедура AhToolbarsHelp

'
' AhToolbarsHelp
'
Sub AhToolbarsHelp()
    MsgBox "Etudes for Microsoft Word Programmers." & vbCrLf & _
        "Etude 2.2. Custom Toolbars with msoControl(ComboBox, Dropdown, Popup, Edit, Button)." & vbCrLf & _
        "http://www.transcriber.ru" & vbCrLf & vbCrLf & _
        "Create - creates custom toolbar" & vbCrLf & _
       
"Delete - deletes custom toolbar"

End Sub

Процедура AhToolbarCreate

'
' AhToolbarCreate
'
Sub AhToolbarCreate()
    AhToolbarDelete
    CommandBars.Add(Name:=cStrToolbarName).Visible = True
    AhToolBarAddControls

End Sub

Процедура AhToolbarDelete

'
'
AhToolbarDelete - Удаление панели инструментов "Toolbar1".
'
Sub AhToolbarDelete()
    On Error Resume Next
    CommandBars(cStrToolbarName).Delete

End Sub

Процедура AhComboBox

При выборе элемента из комбинированного списка вызывается макрос AhComboBox. Свойство ListIndex элемента управления отвечает за номер, а свойство Text за текст выбранного элемента списка.

При вводе текста в поле редактирования комбинированного списка и нажатии кнопки "Enter", свойство ListIndex принимает нулевое значение.

Макрос для отработки выбора элемента из комбинированного списка.

'
' AhComboBox
'
Sub AhComboBox()
Dim ctrl As CommandBarControl
    For Each ctrl In CommandBars(cStrToolbarName).Controls
        If ctrl.OnAction = "AhComboBox" Then
            MsgBox "AhComboBox Event. Index = " & ctrl.ListIndex & " Text = " & ctrl.Text
        End If
    Next ctrl
End Sub

Процедура AhListBox

При выборе элемента из выпадающего списка вызывается макрос AhListBox. Свойство ListIndex элемента управления отвечает за номер, а свойство Text за текст выбранного элемента списка.

Макрос для отработки выбора элемента из списка.

'
' AhListBox
'
Sub AhListBox()
Dim ctrl As CommandBarControl
    For Each ctrl In CommandBars(cStrToolbarName).Controls
        If ctrl.OnAction = "AhListBox" Then
            MsgBox "AhListBox Event. Index = " & ctrl.ListIndex & " Text = " & ctrl.Text
        End If
    Next ctrl
End Sub

Процедура AhPopup

Макрос для отработки выбора родительского элемента выпадающего меню. При использовании функций типа MsgBox этот макрос оказывается бесполезным, так как появление окна препятствует показу пунктов меню. Однако он полезен в случае необходимости выполнения каких либо действий перед показом пунктов меню, например, изменения доступности и/или видимости пунктов открываемого меню.

'
' AhPopup
'
Sub AhPopup()
Dim ctrl As CommandBarControl
    For Each ctrl In CommandBars(cStrToolbarName).Controls
        If ctrl.OnAction = "AhPopup" Then
            ' This is unusable. Prevents menu from displaying items.
            ' MsgBox "AhPopup Event."
        End If
    Next ctrl

End Sub

Процедуры AhPopupMenuItemXXX

При выборе пункта меню вызывается соответствующий макрос.

Макросы для отработки выбора элемента выпадающего меню.

'
' AhPopupMenuItem1
'
Sub AhPopupMenuItem1()
    MsgBox "AhPopupMenuItem1"
End Sub
'
' AhPopupMenuItem2
'
Sub AhPopupMenuItem2()
    MsgBox "AhPopupMenuItem2"
End Sub
'
' AhPopupMenuItem3
'
Sub AhPopupMenuItem3()
    MsgBox "AhPopupMenuItem3"
End Sub

Процедура AhEdit

Макрос для отработки нажатия клавиши "Ввод" в элементе управления типа msoControlEdit.

При вводе текста в элемент управления типа msoControlEdit и нажатии кнопки "Ввод" вызывается макрос AhEdit. Для получения текста, содержащегося в элементе управления, используется свойство Text - см. текст макроса AhEdit.

'
' AhEdit
'
Sub AhEdit()
Dim ctrl As CommandBarControl
    For Each ctrl In CommandBars(cStrToolbarName).Controls
        If ctrl.OnAction = "AhEdit" Then
            MsgBox "AhEdit = " & ctrl.Text
        End If
    Next ctrl
End Sub

Процедура AhButton

При нажатии кнопки вызывается соответствующий макрос.

'
' AhButton
'
Sub AhButton()
    MsgBox "AhButton: Button was pressed"
End Sub
'
' AhButton2
'
Sub AhButton2()
    MsgBox "AhButton2: Button was pressed"
End Sub

Процедура AhToolBarAddControls

Макрос для создания элементов панели управления. Для простоты индексирования элементы создаются в "обратном" порядке, так что индекс последнего созданного элемента всегда равен единице.

'
' AhToolBarAddControls
'
Sub AhToolBarAddControls()
 
    '
    ' combo box
    '
    CommandBars(cStrToolbarName).Controls.Add Type:=msoControlComboBox, Before:=ciInsertIndex
    With CommandBars(cStrToolbarName).Controls.Item(ciInsertIndex)
        .Caption = "CTRL_ComboBox"
        .TooltipText = "CTRL_ComboBox_ToolTip"
        .Width = .Width * 2
        .AddItem "Combo Item 1", 1
        .AddItem "Combo Item 2", 2
        .AddItem "Combo Item 3", 3
        .OnAction = "AhComboBox"
    End With
   
    '
    ' list box
    '
    CommandBars(cStrToolbarName).Controls.Add Type:=msoControlDropdown, Before:=ciInsertIndex
    With CommandBars(cStrToolbarName).Controls.Item(ciInsertIndex)
        .Caption = "CTRL_Dropdown"
        .TooltipText = "CTRL_Dropdown_ToolTip"
        .Width = .Width * 2
        .AddItem "List Item 1", 1
        .AddItem "List Item 2", 2
        .AddItem "List Item 3", 3
        .OnAction = "AhListBox"
    End With
   
    '
    ' popup menu
    '
    CommandBars(cStrToolbarName).Controls.Add Type:=msoControlPopup, Before:=ciInsertIndex
    With CommandBars(cStrToolbarName).Controls.Item(ciInsertIndex)
        .Caption = "Popup Menu"
        .TooltipText = "CTRL_PopupMenu_ToolTip"
        .OnAction = "AhPopup"
        '
        ' adding items to the menu
        '
        With .Controls.Add(Type:=msoControlButton)
            .Caption = "Menu item 1"
            .OnAction = "AhPopupMenuItem1"
            .Style = msoButtonIconAndCaption
            .FaceId = 51
        End With
        With .Controls.Add(Type:=msoControlButton)
            .Caption = "Menu item 2"
            .OnAction = "AhPopupMenuItem2"
            .Style = msoButtonIconAndCaption
            .FaceId = 52
        End With
        With .Controls.Add(Type:=msoControlButton)
            .Caption = "Menu item 3"
            .OnAction = "AhPopupMenuItem3"
            .Style = msoButtonIconAndCaption
            .FaceId = 53
        End With
    End With
   
    '
    ' edit control
    '
    CommandBars(cStrToolbarName).Controls.Add Type:=msoControlEdit, Before:=ciInsertIndex
    With CommandBars(cStrToolbarName).Controls.Item(ciInsertIndex)
        .Caption = "CTRL_Edit"
        .TooltipText = "CTRL_Edit_ToolTip"
        .OnAction = "AhEdit"
        ' .Width = .Width * 2
    End With
    
    '
    ' button
    '
    CommandBars(cStrToolbarName).Controls.Add Type:=msoControlButton, Before:=ciInsertIndex
    With CommandBars(cStrToolbarName).Controls.Item(ciInsertIndex)
        .Caption = "Button"
        .TooltipText = "CTRL_Button_ToolTip"
        .OnAction = "AhButton"
        .Width = .Width * 2
        .Style = msoButtonCaption
    End With
   
    '
    ' button with icon
    '
    CommandBars(cStrToolbarName).Controls.Add Type:=msoControlButton, Before:=ciInsertIndex
    With CommandBars(cStrToolbarName).Controls.Item(ciInsertIndex)
        .Caption = "Button with Icon"
        .TooltipText = "CTRL_Button_with_icon_ToolTip"
        .OnAction = "AhButton2"
        .Width = .Width * 2
        .Style = msoButtonIconAndCaption
        .FaceId = 51

    End With
 
    '
    ' Ah! 11-Nov-2005. These types unfortunately failed in MS Word 2000.
    ' Ah! 18-Jan-2006. These types unfortunately failed in MS Word 2003.
    '
    ' CommandBars(cStrToolbarName).Controls.Add Type:=msoControlGauge
    ' CommandBars(cStrToolbarName).Controls.Add Type:=msoControlButtonDropdown
    ' CommandBars(cStrToolbarName).Controls.Add Type:=msoControlButtonPopup
    ' CommandBars(cStrToolbarName).Controls.Add Type:=msoControlExpandingGrid
    ' CommandBars(cStrToolbarName).Controls.Add Type:=msoControlGraphicCombo
    ' CommandBars(cStrToolbarName).Controls.Add Type:=msoControlGraphicDropdown
    ' CommandBars(cStrToolbarName).Controls.Add Type:=msoControlGrid
    ' CommandBars(cStrToolbarName).Controls.Add Type:=msoControlSplitButtonPopup
   
End Sub

Выводы

Несмотря на наличие большого количества элементов управления, используемых во встроенных панелях инструментов Microsoft Word, программно создаются только элементы управления следующих типов:

  • msoControlButton
  • msoControlPopup
  • msoControlEdit
  • msoControlDropdown
  • msoControlComboBox

Элементы управления остальных типов используются только во встроенных панелях Microsoft Word и их создание программно не поддерживается.

В этом этюде мы изучили свойства и методы управляющих элементов панели инструментов и создали макросы для создания пользовательской панели инструментов, содержащей кнопки, меню, поля редактирования, списки и комбинированные списки, а также для удаления панели инструментов.

На основании спецификации создан шаблон "AhToolbars.dot", содержащий панелль инструментов "AhToolbars" с кнопками создания "Create" и удаления "Delete" пользовательской панели инструментов "Toolbar1".

Задания

Задание 1

Создайте меню (msoControlPopup) элементами которого являются списки (msoControlDropdown) и/или комбинированные списки (msoControlComboBox).

 

Задание 2

Создайте динамическое изменяемое меню с пунктами "DOC Action 1", "DOC Action 2" и "DOC Action 3" для документов формата DOC, пунктами "RTF Action 1" и "RTF Action 2" для документов формата RTF. Для документов всех остальных форматов меню должно быть пустым и недоступным. Пункты меню должны автоматически обновляться при изменении фокуса (активного документа).

 

 


Этюды для программистов Microsoft Word. Этюд 2.2. Программное создание панели инструментов.


© 2000-2009 Евгений Ахунджанов, Все Права Сохранены.
www.transcriber.ru | Послать письмо автору