Обновите встроенную кнопку ленты после изменения Options.DefaultHighlightColorIndex и избегайте выхода из «Цвет выделения текста» - PullRequest
3 голосов
/ 28 марта 2019

Что я пытаюсь заставить работать:

  • активировать команду Text Highlight Color с помощью клавиш (не проблема)
  • циклически перебирает 5 по умолчанию Цвет выделения текста с помощью одной и той же привязки клавиш (или просто выделения выделения, в зависимости от selection.type, проверенного вне функции ниже)
    • отображение текущего цвета в соответствующей кнопке (встроенная лента)

Где я застрял:

Sub cycleThroughSomeDefaultHighlightColorIndexOptions()
Dim zeNewColor As Long

Select Case Options.DefaultHighlightColorIndex
       Case wdYellow:      zeNewColor = wdBrightGreen
       Case wdBrightGreen: zeNewColor = wdTurquoise
       Case wdTurquoise:   zeNewColor = wdPink
       Case wdBlue:        zeNewColor = wdRed
       Case wdRed:         zeNewColor = wdYellow
       Case Else:          zeNewColor = wdYellow
End Select
Application.Options.DefaultHighlightColorIndex = zeNewColor

End Sub

не выдает никакой ошибки, изменяет Application.Options.DefaultHighlightColorIndex,

, но не обновляет / не показывает вновь установленный цвет на соответствующей кнопке (вкладка встроенной ленты)

и просто выходит из режима Цвет подсветки текста.

  1. Есть ли возможность сохранить его?

  2. Если его нужно запустить снова: есть ли лучший способ, чем грязный / мешающий sendKeys для вызова таких команд, как выделение текста Цвет

Обновление 2019-04-03: В то же время я нашел, где перечислены IRibbonUI.InvalidateControlMso ControlID: Файлы справки Office 2016: Идентификаторы управления пользовательским интерфейсом Office Fluent

Так что после создания скрытой пользовательской ленты и получения ручки для нее в onLoad я мог zeWdRibbon.InvalidateControlMso "TextHighlightColorPicker" без каких-либо возникших ошибок.

Но это тоже ничего не меняет.

Возможно ли, что Microsoft просто получает изображения по умолчанию, например "TextHighlightColorPicker" (желтый), не проверяя Application.Options.DefaultHighlightColorIndex, или я что-то упустил?

1 Ответ

0 голосов
/ 05 апреля 2019

Я делаю что-то подобное, каждый раз gRibbon.Invalidate

#If VBA7 Then
    Declare PtrSafe Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" ( _
        ByRef Destination As Any, ByRef Source As Any, ByVal Length As Long)
#Else
    Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" ( _
        ByRef Destination As Any, ByRef Source As Any, ByVal Length As Long)
#End If

Public gRibbon As IRibbonUI

#If VBA7 Then
Function GetRibbon(ByVal lRibbonPointer As LongPtr) As Object
#Else
Function GetRibbon(ByVal lRibbonPointer As Long) As Object
#End If

    Dim objRibbon As Object
    Call CopyMemory(objRibbon, lRibbonPointer, LenB(lRibbonPointer))
    Set GetRibbon = objRibbon
    Set objRibbon = Nothing
End Function

Public Sub OnRibbonLoad(ribbon As IRibbonUI)
    Set gRibbon = ribbon
    'SAVE SETTINGS TO REGISTRY
    SaveSetting "POP", "RIBBON", "ribbonPointer", ObjPtr(gRibbon)
End Sub

Public Sub OnActionButton(control As IRibbonControl)
        If gRibbon Is Nothing Then
            Set gRibbon = GetRibbon(GetSetting("POP", "RIBBON", "ribbonPointer"))
        End If
    On Error Resume Next
        gRibbon.Invalidate
    On Error GoTo 0
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...