Решается это так. Для начала нужно научиться ловить события, которые генерирует Word. В нашем случае нужно определять, что пользователь изменил набор выбранных объектов. При этом генерируется событие WindowSelectionChange. Как его ловить? Это подробно описано в моем блоге, посвященном макросам.
Здесь же мы подробно рассмотрим вопрос, связанный с обновлением информации на ленте.
Итак. Чтобы работала обратная связь с лентой, код XML, который описывает ленту, нужно доработать.
Во-первых, нужно добавить событие onLoad. Делается это так:
Процедура onLoad Копировать код без номеров строк
1 <customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui"
2 onLoad="LoadRibbon">
2 onLoad="LoadRibbon">
Во-вторых, добавить в наше поле событие getText:
Событие getText Копировать код без номеров строк
1 <editBox id="SetLineSpacing"
2 onChange="УстановитьМежстрочныйИнтервал"
3 sizeString="3"
4 screentip="Установить междустрочный интервал"
5 supertip="Укажите число для междустрочного интервала. Для одинарного указать 1,5, для двойного — 2 и т.д. Значение интервала применяется к выделенному тексту."
6 getText="SetLineSpacing_GetText"/>
2 onChange="УстановитьМежстрочныйИнтервал"
3 sizeString="3"
4 screentip="Установить междустрочный интервал"
5 supertip="Укажите число для междустрочного интервала. Для одинарного указать 1,5, для двойного — 2 и т.д. Значение интервала применяется к выделенному тексту."
6 getText="SetLineSpacing_GetText"/>
Этот код отличается от того, что я приводил раньше, но не принципиально. Я сделал имена макросов более понятными, чтобы не путаться. Параметр sizeString определяет длину поля ввода в символах.
Событие getText отвечает как раз за управление содержимым поля ввода.
В-третьих, нужно правильно написать обработчики событий onLoad и getText. Я это сделал так:
Обработчики событий ленты onLoad и getText Копировать код без номеров строк
1 Public CustomRibbon As IRibbonUI 'указатель для хранения ссылки на ленту. Здесь необязателен, но рекомендуется
2 Dim MyEvents As New EventClassModule 'конструктор класса для отслеживания событий
3
4 Sub LoadRibbon(ribbon As IRibbonUI) 'загружаем ленту
5 Set CustomRibbon = ribbon 'создаем указатель на ленту
6 ribbon.Invalidate 'обновляем ленту
7 Set MyEvents.App = Word.Application 'перенаправляем события из приложения в наш класс.
8 End Sub
9
10 Sub SetLineSpacing_GetText(control As IRibbonControl, ByRef text)
11 text = PointsToLines(Selection.ParagraphFormat.LineSpacing) 'устанавливаем в поле ввода значение межстрочного интервала выделенного абзаца.
12 End Sub
2 Dim MyEvents As New EventClassModule 'конструктор класса для отслеживания событий
3
4 Sub LoadRibbon(ribbon As IRibbonUI) 'загружаем ленту
5 Set CustomRibbon = ribbon 'создаем указатель на ленту
6 ribbon.Invalidate 'обновляем ленту
7 Set MyEvents.App = Word.Application 'перенаправляем события из приложения в наш класс.
8 End Sub
9
10 Sub SetLineSpacing_GetText(control As IRibbonControl, ByRef text)
11 text = PointsToLines(Selection.ParagraphFormat.LineSpacing) 'устанавливаем в поле ввода значение межстрочного интервала выделенного абзаца.
12 End Sub
Еще раз напомню, что узнать о том, как работать с событиями приложения можно здесь.
0 коммент.:
Отправить комментарий