среда, 10 февраля 2010 г.

Как изменить стандартные вкладки и группы на ленте

В ribbon-интерфейсе не предусмотрена возможность изменения стандартных групп и вкладок. Можно добавить свою группу на стандартную вкладку, убрать стандартную группу, убрать стандартную вкладку. Добавить свою свои элементы в стандартную группу нельзя. Нельзя также поменять местами расположение групп во вкладке. Вернее, поменять местами можно в Office 2010, но эти настройки сохраняются глобально для всего приложения, а не для отдельного документа или шаблона. Чтобы скрыть вкладку, нужно указать для неё idMso и задать значение false атрибуту visible:
1 2 3 4 5 6 7 8 9 <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui"> <ribbon> <tabs> <!--Скрытие вкладки "Рецензирование"--> <tab idMso="TabReviewWord" visible="false"/> </tabs> </ribbon> </customUI>
Аналогично можно убрать стандартную группу из вкладки. Например, группу "Буфер обмена" с вкладки "Главная":
1 2 3 4 5 6 7 8 9 10 <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui"> <ribbon> <tabs> <tab idMso="TabHome"> <group idMso="GroupClipboard" visible="false"/> </tab> </tabs> </ribbon> </customUI>
Также можно добавить свою группу на стандартную вкладку и задать её расположение атрибутом insertBeforeMso или insertAfterMso:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui"> <ribbon> <tabs> <tab idMso="TabHome"> <!-- Вставляем свою группу на вкладку "Главная" перед группой "Абзац" --> <group id="rxTabMain_gr1" label="Границы" insertBeforeMso="GroupParagraph"> <box id="rxTabMain_gr1_box1" boxStyle="horizontal"> <control idMso="BorderNone" showLabel="false" /> <control idMso="BordersAll" showLabel="false" /> <control idMso="BorderInside" showLabel="false" /> <control idMso="BorderOutside" showLabel="false" /> </box> <box id="rxTabMain_gr1_box2" boxStyle="horizontal"> <control idMso="BorderBottomWord" showLabel="false" /> <control idMso="BorderTopWord" showLabel="false" /> <control idMso="BorderLeftWord" showLabel="false" /> <control idMso="BorderRightWord" showLabel="false" /> </box> <box id="rxTabMain_gr1_box3" boxStyle="horizontal"> <control idMso="BorderInsideHorizontal" showLabel="false" /> <control idMso="BorderInsideVertical" showLabel="false" /> <control idMso="BorderDiagonalDown" showLabel="false" /> <control idMso="BorderDiagonalUp" showLabel="false" /> </box> <box id="rxTabMain_gr1_box4" boxStyle="vertical"> <control idMso="TableDrawTable" showLabel="false" /> <control idMso="TableEraser" showLabel="false" /> <control idMso="BorderColorPicker" showLabel="false" /> </box> <dialogBoxLauncher> <button idMso="BordersShadingDialogWord" /> </dialogBoxLauncher> </group> </tab> </tabs> </ribbon> </customUI>

вторник, 9 февраля 2010 г.

Создание вкладки с набором стандартных элементов управления

Если вас не по каким-либо причинам не устраивает стандартное расположение элементов управления на "ленте" Word 2007-2010, то эта заметка для вас. Может показаться, что для Word 2010 это не актуально, но, как вы убедитесь, это далеко не так. Элементы управления на ленту размещаются посредством редактирования XML-кода. Создайте пустой документ, сохраните его с расширением docx или docm, закройте его и откройте в программе Ribbon XML Editor (RXE). После открытия вы увидите пустую вкладку с названием 2007 (customUI.xml) (название вкладки можно увидеть в левом углу рабочей области). Попробуем создать вот такую вкладку со стандартными элементами управления границами таблиц: Сразу замечу, что создать такую группу стандартными средствами Word 2010 невозможно (по крайней мере я не сумел). У меня получился такой результат: Конечно, это не то, что нужно. Поэтому оставим стандартные средства редактирования ленты на совести их разработчиков и займёмся делом. Итак, перед нами в программе RXE пустое содержимое файла настройки интерфейса customUI.xml. Начинаем добавлять XML-код. RXE значительно упрощает этот процесс. Добавьте в рабочую область RXE такой код:
1 2 3 4 5 6 <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui"> <ribbon> </ribbon> </customUI>
В первой строке расположена стандартная строка спецификации XML, определяющая версию XML и кодировку. Эта строка добавляется нажатием на кнопку . Тег customUI, начинающийся со второй строки и заканчивающийся на шестой, определяет пространство имён XML (XML namespace), в котором создаётся наш интерфейс. Этот тег добавляется кнопкой . Для интерфейса приложений Office существует общее пространство имён внутри каждого приложения: "http://schemas.microsoft.com/office/2006/01/customui". Благодаря этому пространству имён наш интерфейс может встраиваться в интерфейс приложения. Если вы заметили, то при добавлении кода с помощью кнопок панели управления курсор всегда располагается так, чтобы сразу начать вводить следующую часть кода. Кнопкой добавим тег ribbon, указывающий, что мы формируем содержимое ленты. Для этого тега будет автоматически проставлен атрибут startFromScratch="false", указывающий, что не нужно убирать стандартные элементы интерфейса: вкладки и панель быстрого доступа. Далее, добавляем вкладки кнопкой (тег tabs). При этом сразу добавятся теги tab и group, поскольку тег tabs может иметь дочерним тегом только тег tab; а тег tab, в свою очередь, может имеет только один дочерний тег: group. Если всё сделано правильно,то ваш код должен иметь такой вид:
1 2 3 4 5 6 7 8 9 10 11 12 <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui"> <ribbon> <tabs> <tab id="rxTabTable" label="Таблицы"> <group id="rxTabTable_gr1" label="Настройка границ"> </group> </tab> </tabs> </ribbon> </customUI>
Наконец-то, мы дошли до того момента, когда результат настройки интерфейса можно просмотреть. Сохраните документ в RXE и откройте его в Word, нажав кнопку . Документ откроется в Word и после всех стандартных вкладок в конце появится ваша собственная вкладка "Таблицы" с пустой группой "Границы". Если вы ничего подобного не видите, значит где-то допущена ошибка и придётся всё сделать с самого начала. Теперь наполним нашу группу содержимым. При размещении элементов управления они располагаются в порядке следования снизу-вверх и слева-направо. Для изменения этого порядка, можно применять контейнеры box и buttonGroup. Откройте документ в RXE, поставьте курсор между начальным и конечным тегом group и вставьте контейнер box кнопкой . Для этого тега автоматически добавляются атрибуты id и boxStyle. Атрибут boxStyle определяет размещение дочерних элементов внутри контейнера и может иметь два значения: vertical и horizontal. Разместим в группе первые четыре стандартных кнопки: "Отключить границы", "Все границы", "Внутренние границы" и "Внешние границы":
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui"> <ribbon> <tabs> <tab id="rxTabTable" label="Таблицы"> <group id="rxTabMain_gr1" label="Границы"> <box id="rxTabMain_gr1_box1" boxStyle="horizontal"> <control idMso="BorderNone" showLabel="false" /> <control idMso="BordersAll" showLabel="false" /> <control idMso="BorderInside" showLabel="false" /> <control idMso="BorderOutside" showLabel="false" /> </box> </group> </tab> </tabs> </ribbon> </customUI>
Внутри контейнера box я разместил четыре соответствующих стандартных кнопки с помощью тега control, который можно добавить кнопкой . Этот тег как раз и предназначен для добавления стандартных элементов управления. В атрибуте idMso указывается стандартный идентификатор элемента управления. Список всех стандартных идентификаторов для приложений Office 2007 можно скачать отсюда. Атрибут showLabel используется для отображения или скрытия текста элемента управления. Открыв этот документ в Word, мы увидим наши четыре стандартных кнопки расположенных в одну строку: Понажимав на кнопки вы можете убедиться, что они работают совершенно также, как и на стандартных вкладках. Аналогичным образом добавим ещё две строки по четыре кнопки в каждой:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui"> <ribbon> <tabs> <tab id="rxTabTable" label="Таблицы"> <group id="rxTabMain_gr1" label="Границы"> <box id="rxTabMain_gr1_box1" boxStyle="horizontal"> <control idMso="BorderNone" showLabel="false" /> <control idMso="BordersAll" showLabel="false" /> <control idMso="BorderInside" showLabel="false" /> <control idMso="BorderOutside" showLabel="false" /> </box> <box id="rxTabMain_gr1_box2" boxStyle="horizontal"> <control idMso="BorderBottomWord" showLabel="false" /> <control idMso="BorderTopWord" showLabel="false" /> <control idMso="BorderLeftWord" showLabel="false" /> <control idMso="BorderRightWord" showLabel="false" /> </box> <box id="rxTabMain_gr1_box3" boxStyle="horizontal"> <control idMso="BorderInsideHorizontal" showLabel="false" /> <control idMso="BorderInsideVertical" showLabel="false" /> <control idMso="BorderDiagonalDown" showLabel="false" /> <control idMso="BorderDiagonalUp" showLabel="false" /> </box> </group> </tab> </tabs> </ribbon> </customUI>
Осталось добавить три кнопки, расположенные вертикально по правому краю группы, и маленький квадратик в правом нижнем углу группы, служащий для вызова диалогового окна "Границы и заливка". Три кнопки нужно также поместить в контейнер box, только для атрибута boxStyle нужно указать значение "vertical". Маленький квадратик, служащий для вызова диалогового окна, добавляется тегом dialogBoxLauncher (кнопка ), имеющим атрибут idMso для указания идентификатора диалогового окна. Результирующий код будет выглядеть так:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui"> <ribbon> <tabs> <tab id="rxTabTable" label="Таблицы"> <group id="rxTabMain_gr1" label="Границы"> <box id="rxTabMain_gr1_box1" boxStyle="horizontal"> <control idMso="BorderNone" showLabel="false" /> <control idMso="BordersAll" showLabel="false" /> <control idMso="BorderInside" showLabel="false" /> <control idMso="BorderOutside" showLabel="false" /> </box> <box id="rxTabMain_gr1_box2" boxStyle="horizontal"> <control idMso="BorderBottomWord" showLabel="false" /> <control idMso="BorderTopWord" showLabel="false" /> <control idMso="BorderLeftWord" showLabel="false" /> <control idMso="BorderRightWord" showLabel="false" /> </box> <box id="rxTabMain_gr1_box3" boxStyle="horizontal"> <control idMso="BorderInsideHorizontal" showLabel="false" /> <control idMso="BorderInsideVertical" showLabel="false" /> <control idMso="BorderDiagonalDown" showLabel="false" /> <control idMso="BorderDiagonalUp" showLabel="false" /> </box> <box id="rxTabMain_gr1_box4" boxStyle="vertical"> <control idMso="TableDrawTable" showLabel="false" /> <control idMso="TableEraser" showLabel="false" /> <control idMso="BorderColorPicker" showLabel="false" /> </box> <dialogBoxLauncher> <button idMso="BordersShadingDialogWord" /> </dialogBoxLauncher> </group> </tab> </tabs> </ribbon> </customUI>
А группа будет иметь такой вид: Т.е. наша группа приобрела законченный вид. Единственным её отличием от желаемого вида в начале поста, является то, что вкладка расположена в самом конце, а не перед вкладкой "Главная". Это можно изменить, добавив атрибут insertBeforeMso, задав ему значение "TabHome". С учётом этих изменений тег tab будет иметь такой вид:
5 <tab id="rxTabTable" label="Таблицы" insertBeforeMso="TabHome">
На этом, пожалуй, всё.