Microsoft Office System 2007
Новый пользовательский интерфейс и возможности для разработчиков
За все время своего существования интерфейс Microsoft Office развивался, как это обычно бывает с другими продуктами, предназначенными для массового использования, — вся функциональность была реализована через систему меню, панелей инструментов и задач, а также посредством диалоговых панелей. Этот подход использовался во всех компонентах Microsoft Office, в том числе в Microsoft Word, Microsoft Excel и Microsoft PowerPoint, лишь частично варьируясь в зависимости от уникальных задач, для решения которых предназначался тот или иной программный продукт. По мере расширения функциональности продуктов росло и число интерфейсных элементов для доступа к этой функциональности. Показательны следующие цифры: если в первой версии Microsoft Word (Word 1.0), выпущенной в 1989 году, было всего две панели инструментов и порядка 50 команд, то в Microsoft Word 2003 уже насчитывается более 250 команд меню, 31 панель инструментов, 19 панелей задач, Smart-тэги, вызов команд через Alt+Click и т.п. (рис. 1 и 2).
Рис. 1. Microsoft Word for Windows 1.0
Рис. 2. Microsoft Word 2003
Исследования эффективности работы пользователей показали, что в текущей версии Office пользователи используют 10-15% функциональности. Объясняется это тем, что на интуитивном уровне более широко интерфейс не позволяет применять многие возможности, заложенные в продукте. В результате многочисленных исследований был сделан ряд выводов:
- меню и панели инструментов уже не подходят для столь сложных приложений;
- набор функций Office перерос возможности существующих механизмов интерфейса;
- пользователям трудно найти функции, требующиеся для выполнения той или иной операции.
Таким образом, при создании Microsoft Office 2007 перед разработчиками продукта встала задача создания нового, эффективного и эргономичного пользовательского интерфейса.
Что нового в интерфейсе
В основе нового пользовательского интерфейса в Microsoft Office 2007 лежит Ribbon — область в верхней части экрана, в которой содержатся главные команды, которые используются в той или иной офисной программе. Ribbon представляет собой набор вкладок, каждая из которых, в свою очередь, включает набор команд для реализации тех или иных операций. Как показано на рис. 3, в Microsoft Word 2007 можно найти следующие вкладки: Write, Insert, Page Layout, References, Mailings и Review.
Рис. 3. Ribbon в Word 2007
Важным отличием Ribbon от меню и панелей задач является то, что команды внутри вкладок подразделяются по решаемым ими задачам и по их важности для решения той или иной задачи. Более того, вкладки могут быть контекстными — например все команды для работы с графическим изображением или с таблицей становятся доступны только после выбора этого объекта. Вам больше не потребуется искать функции в меню, в панелях и т.п. — все они собраны в одном месте, в соответствующей вкладке Ribbon (рис. 4).
Рис. 4. Контекстное меню для работы с таблицами
Помимо Ribbon и вкладок, содержащих сгруппированные по функциям команды, в Office 2007 появились и другие новые интерфейсные элементы, к которым, в частности, относятся:
- Quick Access Tool Bar — панель для доступа к набору команд независимо от контекста или режима, в котором находится приложение. Примером таких команд являются Save, Undo, Print и т.п. (рис. 5);
Рис. 5. Quick Access Tool Bar
в Microsoft Word 2007
- Gallery — это новый интерфейсный элемент в Office 2007, используемый для визуализации выполняемых пользователем действий (рис. 6). Галереи связаны с еще одной новинкой в Office 2007 — с возможностью посмотреть на результат выполнения тех или иных действий без их реального применения (Live Preview). Галереи можно даже расширять, но в таком случае на них не будут распространяться функции предварительного просмотра;
Рис. 6. Галерея в Microsoft Word 2007
- ScreenTips — это новый способ отображения краткой информации о команде и предоставления доступа к справочной системе с более подробным описанием (рис. 7);
Рис. 7. ScreenTips
- Mini-Toolbar — представляет собой небольшую панель, содержащую набор основных команд для выделенного в данный момент элемента — например для фрагмента текста Mini-Toolbar содержит основные команды форматирования (рис. 8).
Рис. 8. Mini-Toolbar
В версии Microsoft Office 2007 возможность программирования Mini-Toolbar не реализована.
Возможности для разработчиков
В то время как пользователи применяют Microsoft Office 2007 для создания различных документов, разработчики рассматривают Microsoft Office 2007 как платформу для создания решений, расширяющих набор задач, решаемых с помощью этого продукта.
В Microsoft Office 2007 рассмотренный выше интерфейсный элемент Ribbon доступен в следующих продуктах: Microsoft Office Access, Microsoft Office Excel, Microsoft Office Outlook, Microsoft Office PowerPoint и Microsoft Office Word. Через технологию под названием Ribbon X (Ribbon Extensibility) разработчики могут модифицировать этот компонент — удалять и добавлять вкладки, добавлять группы команд, команды в существующие группы, команды к меню Office и т.п.
Унификация программного управления интерфейсом основных приложений Microsoft Office 2007 вызвана тем же набором проблем, что и унификация самого интерфейса, — в настоящее время существует довольно большой набор способов расширения интерфейса: XLM, WordBasic, CommandBars (в ранних версиях продукта), WLL, XLL, XLA, PPA, глобальные шаблоны Word, ветвь реестра Init Menus для Excel, Attached Toolbars в Word и Excel, а также ряд других.
Отметим, что, несмотря на предпринятую в Microsoft Office 2007 попытку унификации программного расширения интерфейса, все предыдущие способы решения этих задач тоже поддерживаются и работают в новой версии продукта. В табл. 1 показано, как существующие расширения отображаются в новой версии Microsoft Office.
Таблица 1. Отображение существующих расширений в новой версии Microsoft Office
Все описанные группы будут расположены на вкладке Add-Ins интерфейсного элемента Ribbon.
По сравнению, например, с Microsoft Office 2003, где было всего пять типов интерфейсных элементов: msoControlButton, msoControlEdit, msoControlPopup, msoControlComboBox и msoControlDropdown, внутри Ribbon могут располагаться следующие элементы: Tab, Group, Button, Menu, SplitButton, ToggleButton, Label, Check Box, Edit Box, DialogBoxLauncher, DropDown, ComboBox и Galleries.
Каждый такой элемент описывается на языке XML, причем это описание довольно просто создавать, локализовывать, генерировать программным способом, оно полностью отделяет интерфейс от логики приложения и применяется либо на уровне документа, либо на уровне приложения. Ниже показан пример описания подобного интерфейсного элемента.
<customUI xmlns=”http://schemas.microsoft.com/office/
2006/01/customui”>
<ribbon startFromScratch=”false”>
<tabs>
<tab
id=”customTab”
label=”Custom Tab”>
<group
id=”customGroup”
label=”Custom Group”>
<button
id=”customButton”
label=”Custom Button”
imageMso=”HappyFace”
size=”large”
onAction=”Callback”
/>
</group>
</tab>
</tabs>
</ribbon>
</customUI>
Описание соответствует специальной XML-схеме. В нашем примере это схема http://schemas.microsoft.com/office/2006/01/customui, которая описана в документе «2007 Office System: XML Schema Reference» (см. раздел «Ресурсы для разработчиков»).
В этом документе в формате Windows Help (CHM) можно найти описания всех элементов, типов, групп для Ribbon User Interface, а также для Outlook 2007 Electronic Business Card Layout, Outlook 2007 Form Region Manifest, Outlook 2007 Form Region Localization, OneNote import/export, Visio и Visio Extensions.
Такое описание применяется к интерфейсу соответствующего приложения при загрузке либо документа, либо дополнительного модуля (add-in) — рис. 9.
Рис. 9. 2007 Office System: XML Schema Reference
В приведенном выше коде на XML мы описываем кнопку, которая размещается в Ribbon на вкладке Custom Group, имеет идентификатор customButton, заголовок Custom Button, и при нажатии на нее должна вызываться подпрограмма Callback.
Для того чтобы наша кнопка появилась в интерфейсе приложения (в нашем примере это будет Microsoft Word 2007), прежде всего нужно разместить описание нового интерфейсного элемента в документе Word. Для этого создадим пустой документ и сохраним его как Word Macro-Enabled Document. Если идти сложным путем, то нам потребуется открыть этот документ в архиваторе, поддерживающем работу с ZIP-файлами (как мы помним из статьи «Office 2007 Open XML Format. Коротко о главном», опубликованной в одном из предыдущих выпусков нашего журнала, все офисные документы, сохраненные в формате Office 2007, представляют собой ZIP-контейнеры), добавить в него секцию customUI, поместить туда описание нашего интерфейсного элемента в виде XML-файла и сохранить измененный документ.
Гораздо проще воспользоваться утилитой Office 2007 Custom UI Editor, которую можно загрузить с сайта http://openxmldeveloper.org/ (рис. 10).
Рис. 10. Утилита Office 2007 Custom UI Editor
После запуска этой утилиты мы открываем в ней наш документ, вставляем необходимые интерфейсные элементы (в виде приведенного выше XML-описания) и сохраняем документ (рис. 11).
Рис. 11. Секция customUI в документе Word 2007
Теперь нам необходимо написать код обработчика события, происходящего при нажатии кнопки. В зависимости от сценария можно назвать несколько способов достижения этой цели. Можно воспользоваться Visual Basic for Applications (VBA), создать COM Add-In (для этого применяется Visual C#, Visual C++, Visual Basic .NET или Visual Basic 6.0) или прибегнуть к средствам, предоставляемым Visual Studio 2005 Tools for Microsoft Office System (VSTO), и к расширениям, имеющим кодовое название Cypress, — полноценная поддержка Office 2007 будет предусмотрена в следующей версии VSTO, которая пока известна под названием Visual Studio Tools for Microsoft Office System v 3.
Рис. 12. Редактор VBA в Word 2007
Мы выберем относительно простой способ и воспользуемся VBA. Для доступа к VBA и другим инструментам для разработчиков необходимо активизировать вкладку Developer в опциях настройки продукта. После этого вызываем редактор VBA (рис. 12) и вставляем следующий код:
‘—————————————————————————-
‘Процедура обработки нажатия кнопки customButton
‘—————————————————————————-
Sub Callback(control as IRibbonControl)
‘
‘ Покажем идентификатор нажатой кнопки
‘
MsgBox(“Clicked on ” + control.Id)
End Sub
Сохраняем наш документ и убеждаемся в том, что у нас появилась вкладка Custom Tab, а в ней — группа Custom Group с кнопкой Custom Button. Нажатие этой кнопки приводит к появлению панели сообщений, в которой отображается идентификатор нажатой кнопки (рис. 13).
Рис. 13. Пример расширения интерфейса в Word 2007
Отметим, что все три вышеперечисленных способа расширения пользовательского интерфейса базируются на COM-интерфейсе IRibbonExtensibility. В случае COM Add-Ins при реализации интерфейса IRibbonExtensibility код должен возвращать XML-описание элемента с помощью метода GetCustomUI.
Расширения могут быть двух типов: на уровне всего офисного приложения и на уровне отдельного документа. Рассмотренный выше способ относится ко второму типу.
В табл. 2 приведены различные способы создания расширений на уровне приложений и на уровне документов.
Таблица 2. Способы создания расширений на уровне приложений и на уровне документов
Вернемся к схеме интерфейсного элемента. Описанные в ней элементы Ribbon, tab, group, box и т.п. представляют собой контейнеры и работают по принципу Find or create — если контейнер с указанным идентификатором уже существует, элемент добавляется в него; в противном случае создается новый контейнер. Элементы id и idMso являются идентификаторами, которые либо задают новый элемент, либо ссылаются на один из стандартных, встроенных в Office. Описание идентификаторов приведено в документе «2007 Office System Document: Lists of Control IDs» (см. раздел «Ресурсы для разработчиков»).
Элементы insertAfterMso и insertBeforeMso указывают, куда помещается новый интерфейсный элемент по отношению к встроенным, стандартным элементам; графические изображения описываются следующими элементами: image — нестандартное изображение из файла, imageMso — встроенное изображение; элементы getImage, onAction, getEnabled, getVisible задают названия обработчиков событий.
Отметим еще несколько интересных возможностей для разработчиков. Во-первых, теперь можно полностью скрыть стандартный интерфейс — для этого при описании Ribbon необходимо указать:
<ribbon startFromScratch=“true”>
Также предусмотрена возможность замены функциональности любой стандартной операции. Достаточно просто указать операцию (в нашем примере — команда Save и код, который будет выполняться при ее вызове). При необходимости для данной операции можно вызывать и стандартный код:
<command idMso=“Save” onAction=“NewSaveCode” />
Поскольку в версии Office 2007 XML является единственным способом для описания интерфейсных элементов (стандартные элементы приложений Office 2007 также описаны на языке XML), программный интерфейс для описания и изменения Office UI не предоставляется. Состояние элементов и их свойств изменяется динамически, доступно через соответствующие процедуры обработки событий: getVisible, getLabel, getImage и т.п. Такие элементы, как Galleries или dynamicMenus, могут заполняться динамически — это происходит за счет того, что в Office 2007 используется так называемая pull-модель, при которой оболочка продукта сама принимает решение о том, когда отрисовывать элемент, как следить за его инициализацией и т.п. При необходимости динамического обновления используются методы Invalidate или InvalidateControl объекта Ribbon. Например:
Описание кнопки:
<button
id=“MyButton”
label=“My First Button”
getImage=“myButtonImage”
/>
Вызов на C#:
Ribbon.InvalidateControl(“MyButton”);
Рассмотренные нами возможности по расширению и изменению пользовательского интерфейса Microsoft Office 2007 распространяются не на все интерфейсные компоненты, включенные в данный продукт. В частности, не предоставляются программные и иные способы управления такими компонентами, как Status Bar и Mini Toolbar, добавление и удаление элементов во встроенные группы, масштабирование пользовательских групп и расширение контекстных меню. В то же время существующие расширения контекстных меню будут продолжать работать, а разработчики могут изменять функциональность всех компонентов описанным выше способом.
Завершая наш обзор нового пользовательского интерфейса и возможностей для разработчиков, скажем несколько слов о миграции существующих решений. Существует три подхода:
- оставить все как есть — в этом случае все дополнения будут располагаться на вкладке Add-Ins;
- простая миграция — изменить положение интерфейсных элементов на наиболее подходящее для их функциональности место в рамках Ribbon, вкладок и групп;
- полная миграция — выбрать новые интерфейсные элементы, оптимально отвечающие вашим расширениям, возможно, обратиться к компонентам типа Gallery для визуализации и т.п.
В заключение дадим несколько рекомендаций по использованию различных областей интерфейса (более подробно см. руководство по эргономике «2007 Office System Document: UI Style Guide for Solutions and Add Ins»).
Ресурсы для разработчиков
На сайте msdn.microsoft.com находится большой объем информации по Office 2007, предназначенной для разработчиков. Специальная подборка материалов под названием «2007 Office System: Updated Developer Content» содержит руководства для разработчиков по всем основным компонентам системы:
- Combined 2007 Microsoft Office System: Developer References (2007OfficeDevRefs.exe);
- Access 2007 Developer Reference (Access2007DeveloperReference.exe);
- Excel 2007 Developer Reference (Excel2007DeveloperReference.exe);
- Object Library Reference for the 2007 Microsoft Office System (2007ObjectLibraryReference.exe);
- Outlook 2007 Developer Reference (Outlook2007DeveloperReference.exe);
- Project 2007 Developer Reference (Project2007DeveloperReference.exe);
- Publisher 2007 Developer Reference (Publisher2007DeveloperReference.exe);
- SharePoint Designer 2007 Developer Reference (SharePointDesigner2007DeveloperReference.exe);
- Visio 2007 Developer Reference (Visio2007DeveloperReference.exe);
- Visio 2007 ShapeSheet Reference (Visio2007ShapeSheetReference.exe);
- Word 2007 Developer Reference (Word2007DeveloperReference.exe).
Тема, затронутая в данной статье, отражена в ряде документов, которые также доступны на упомянутом сайте. Среди них: «2007 Office System: XML Schema Reference» — описание всех XML-схем для офисных продуктов, «2007 Office System Document: Lists of Control IDs» — список всех идентификаторов интерфейсных элементов, используемых в системе, и «2007 Office System Document: UI Style Guide for Solutions and Add Ins» — руководство по эргономике при создании решений на базе Office 2007 и расширений к продукту. Помимо вышеупомянутых документов, тема программного расширения интерфейса Microsoft Office 2007 рассматривается в отдельном разделе сайта MSDN — Ribbon Developer Center (рис. 14) по адресу: http://msdn.microsoft.com/office/tool/ribbon и в блоге Jensen Harris: An Office User Interface Blog по адресу: http://blogs.msdn.com/jensenh/.
Рис. 14. Ribbon Developer Center
Общим вопросам разработки под Microsoft Office 2007 посвящен сайт Microsoft Office Developer Center по адресу: http://msdn.microsoft.com/office/.