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

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


Этюд 2.5. Изменяемая панель инструментов

                                                                      A Workaround is a bypass of a recognized problem in a system. A workaround is typically a temporary fix that implies that a geniune solution to the problem is needed.
Frequently workarounds are as creative as true solutions, involving out-of-the-box thinking in their creation.
 

http://www.websters-online-dictionary.org/definition/workaround

Ресурсы

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

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

Задача

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

  • изменение доступности или видимости кнопки или панели (свойства Enabled, Visible)

  • изменение текста кнопки (свойство Caption)

  • изменение всплывающей подсказки (свойство TooltipText)

  • изменение иконки

Если панель инструментов расположена в шаблоне "Normal.dot" и файл шаблона не имеет атрибута "только для чтения", то никаких проблем не возникает. Если же панель инструментов находится в исходном шаблоне, расположенном в папке автозагрузки, то каждый раз перед закрытием Microsoft Word появляется неприятный запрос, предлагающий пользователю сохранить внесенные им в шаблон изменения.

 Использование автоматических макросов не помогает, так как запрос появляется раньше, чем срабатывает макрос AutoClose или AutoExit.

Единственным выходом оказывается обходной путь (т.н. workaround, то есть, по существу, "обман" Microsoft Word), заключающийся в установке значения True для текущего шаблона свойства Saved.

К недостаткам рассматриваемого решения следует отнести необходимость использования имени файла шаблона в коде – при переименовании файла шаблона следует внести соответствующие изменения в код шаблона.

 

В этой главе рассматривается шаблон "AhToolbarModify.dot", содержащий несколько простых макросов. На основе макросов "AhMacro1" и "AhMacro2" создана простая панель инструментов "AhToolBar01",содержащая две кнопки. Вызов макроса "AhMacro1" (нажатие первой кнопки панели) изменяет состояние второй кнопки панели.

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

Шаблон "AhToolbarModify.dot" содержит ряд макросов и панель инструментов " AhToolBar01", предназначенных для тестирования изменяемой панели инструментов. Панель инструментов "AhToolbar01" имеет следующий вид:

Кнопка

Макрос

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

Help

AhToolBarModifyHelp

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

Test AhToolBarModifyTest Тестовая кнопка.
Ее свойства изменяются следующими тремя кенопками.

Name

AhToolBarModifyName

Изменяет свойство .Caption

Tooltip

AhToolBarModifyToolbar

Изменяет свойство .Toolbar
Enabled AhToolBarModifyEnabled Изменяет свойство .Enabled

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

Результаты тестирования

В результате тестирования свойства второй кнопки панели инструментов изменяются.

 

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

'
' File AhToolBarModify.dot|AhToolBarModify
'
' Etudes for Microsoft Word Programmers.
' Etude 2.5. Modifying Toolbars.
'
' First published on http://www.transcriber.ru/
'
' © 2000-2008. Evgeny Akhundzhanov. All rights reserved worldwide.
'
Option Explicit
Private bEnabled As Boolean
Private nPress As Long
Private strBtnName As String

 

Константы

'
' Constants
'
Private Const cStrThisToolBarName As String = "AhToolBarModify"
Private Const cStrThisTemplateName As String = "AhToolBarModify.dot"
Private Const ciBtnTestIndex As Long = 2
Private Const cStrButtonName As String = "Test"

Процедура AhToolBarModifyHelp

'
' AhToolBarModifyHelp
'
Sub AhToolBarModifyHelp()
    MsgBox "Etudes for Microsoft Word Programmers." & vbCrLf & _
        "Etude 2.5. Modifying Toolbars." & vbCrLf & _
        "http://www.transcriber.ru" & vbCrLf & vbCrLf & _
        "The following commands change properties of the 'Test' button" & vbCrLf & _
        "Name - changes .Caption property" & vbCrLf & _
        "Tooltip - changes .Tooltip property" & vbCrLf & _
        "Enabled - toggles .Enabled property."
End Sub

Процедура AhToolBarModifyTest

 

'
' AhToolBarModifyTest
'
Sub AhToolBarModifyTest()
   
MsgBox "'AhToolBarModifyTest' pressed."
End Sub

Процедура AutoExec

 

'
' AutoExec - initialization.
'
Sub AutoExec()
   
bEnabled = False
    nPress = 0
    strBtnName = cStrButtonName
End Sub

Процедура SaveItSelf

 

'
' SaveItSelf - makes template with name cStrThisTemplateName "Saved".
'
Private Sub SaveItSelf()
    Dim tt As Template
    '
    ' Templates.Item(cStrThisTemplateName) - "The requested item of collection doesn't exists."
    '
    ' find template with requested name
    '
    For Each tt In Templates
        ' Debug.Print tt.Name & vbCrLf
        '
        ' Use case-insensitive compare for file names.
        '
        If LCase(tt.Name) = LCase(cStrThisTemplateName) Then
            tt.Saved = True
            ' tt.Save
            ' Debug.Print cStrThisTemplateName & " saved."
       
End If
    Next tt
End Sub

Процедура AhToolBarModifyName

 

'
' AhToolBarModifyName
'
Sub AhToolBarModifyName()
    nPress = nPress + 1
   
    strBtnName = CommandBars(cStrThisToolBarName).Controls(ciBtnTestIndex).Caption
    With CommandBars(cStrThisToolBarName).Controls(strBtnName)
        .Caption = cStrButtonName + CStr(nPress)
    End With
   
   
' SaveItSelf
End Sub

Процедура AhToolBarModifyTooltip

 

'
' AhToolBarModifyTooltip
'
Sub AhToolBarModifyTooltip()
    nPress = nPress + 1
   
    strBtnName = CommandBars(cStrThisToolBarName).Controls(ciBtnTestIndex).Caption
    With CommandBars(cStrThisToolBarName).Controls(strBtnName)
        .TooltipText = cStrButtonName + CStr(nPress)
    End With
   
   
' SaveItSelf
End Sub

Процедура AhToolBarModifyEnabled

'
' AhToolBarModifyEnabled
'
Sub AhToolBarModifyEnabled()
    bEnabled = Not bEnabled
   
    strBtnName = CommandBars(cStrThisToolBarName).Controls(ciBtnTestIndex).Caption
    With CommandBars(cStrThisToolBarName).Controls(strBtnName)
        .Enabled = bEnabled
    End With
   
    ' SaveItSelf
End Sub

 

Выводы

Рассмотрена работа с изменяющейся в процессе работы панелью инструментов. Создан шаблон "AhToolbarModify.dot", демонстрирующий работу с изменяющейся панелью инструментов. Предложен способ, позволяющий избавиться от назойливого сообщения Microsoft Word, предлагающего сохранить внесенные в панель инструментов изменения.

Задания

Задание 1

Поэкспериментируйте с шаблоном. Всегда ли он работает? Все ли факторы приняты во внимание при создании процедуры SaveItSelf? При необходимости усовершенствуйте процедуру самоcтоятельно.

 

Задание 2

Вы придумали как усовершенствовать шаблон AhToolbarModify.dot, но внесенные Вами изменения не сохраняются. Почему? Что нужно сделать, чтобы сохранить изменения?

 

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


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