четверг, 14 февраля 2013 г.

Возникает вопрос: как все это получилось?
Само создание панели инструментов на ленте не представляет особой сложности и довольно подробно рассмотрено на уже упомянутом сайте Максима Новикова.
А как же прикрутить к нему собственные кнопки или меню, которые должны выполнять мои собственные макросы?
Начнем по порядку.
Во-первых, нужно создать кнопку, или любой другой элемент, который должен запускать на выполнение определенный макрос.
Во-вторых, нужно указать параметр onAction, в котором определить имя макроса, который, собственно и должен запускаться при нажатии на данную кнопку или пункт меню, что в общем-то одно и тоже.
В-третьих, написать правильно сам макрос.
Вот меню, которое я использую постоянно в своей работе. Оно еще не содержит всех пунктов, которые мне нужны, но уже работает.
Собственное меню для запуска макросов
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 <menu id="__MyMacroses" label="Макросы"> <menuseparator id="__Separator1" title="Вставка в документ"/> <button id="InsertQuotes" image="QUOTES.png" label="Взять в кавычки" onaction="MyButtonAction" supertip="Выделенный текст заключается в угловые кавычки." tag="Macroses.ВзятьВКавычки"/> <button id="ConvertToRoman" image="roman.png" label="Сделать римской цифрой" onaction="MyButtonAction" supertip="Выделенный текст преобразуется в римскую цифру." tag="Macroses.СделатьРимскойЦифрой"/> <button id="InsertFormula" image="function.png" label="Вставить формулу с нумерацией" onaction="MyButtonAction" supertip="Вставка формулы по центру страницы и нумерацией по правому краю" tag="Macroses.Формула_с_нумерацией"/> <menuseparator id="__Separator2" title="Правка документа"/> <button id="ClearDoubleSpaces" label="Удалить пробелы" onaction="MyButtonAction" supertip="Удаление 2-х и более пробелов подряд." tag="Macroses.Удалить_лишние_пробелы"/> </menu>

Как видно из кода макроса он запускает на выполнение другой макрос, имя которого прописано в свойстве tag нашей кнопки. Этот простой маневр позволяет использовать только один макрос, для обработки нажатий на все кнопки. Главное, не забывать, что для каждой кнопки нужно указывать свое свойство tag.
Пока все.

8 комментариев :

Анонимный комментирует...

Не понятно, как назначить Макрос кнопке. Всё очень запутано.

Олександр Вітер комментирует...

Имя макроса, который выполняется при нажатии на кнопку, содержится в атрибуте onAction

Unknown комментирует...

При попытке запустить макрос по кнопке выдает ошибку несовпадения количества аргументов (Wrong number of arguments or invalid property assigment). Нет мыслей о причине?

Unknown комментирует...

Иопть, в аргументах процедуры должно быть:
control As IRibbonControl.

Олександр Вітер комментирует...

Я с этим тоже столкнулся, когда только начинал постигать ленточную азбуку в 2006 году.
Рад, что Вы сами нашли ответ

Александр комментирует...

И есчо вопрос - какие требования к картинкам для кнопок? Ибо нарисовал .png, положил её в директорию моего дока, прописал атрибут image у button, но рядом с кнопкой она появляться как-то не хочет.

Олександр Вітер комментирует...

картинку нужно поместить в сам документ, а в XML-схеме прописать ссылку на картинку. Это удобно делать в программе Ribbon XML Editor и описано здесь:
http://novikovmaxim.narod.ru/products/ribbon/ribbon.htm
Или в блоге wordexpert.ru
http://wordexpert.ru/page/kak-naznachit-svoyu-ikonku-dlya-makrosa-v-word-2007

Александр комментирует...

Спасибо! Эта мысль как раз уже пришла мне вчера :).
Не могу избавиться от привычки сначала писать, а потом думать)