Создание интерфейса документа. Объект CommandBars
Создание интерфейса документа. Объект CommandBars
Создание интерфейса документа - одна из важных задач, стоящих при разработке практически любых документов. Создание меню, командных кнопок и других элементов управления, вынесенных на инструментальные панели или встроенных непосредственно в документ, создание диалоговых окон (форм) - все эти задачи успешно решены еще в предыдущих версиях Office, и потому в Office 2000 немногое изменилось в этой области.
В Office команды меню и командные кнопки располагаются на инструментальных панелях, которые составляют коллекцию CommandBars. Эти панели могут быть причалены или пристыкованы (docked) к левому, правому, верхнему или нижнему краю документа, а могут находиться и в плавающем состоянии. Каждая панель (объект CommandBar ) содержит набор меню или командных кнопок - коллекцию CommandBarControls. Элементы этой коллекции (объекты CommandBarControl ) в зависимости от их типа представляют отдельные меню, команды меню или командные кнопки. В Office 2000 имеется большое число встроенных панелей со встроенными элементами. Но одно из достоинств Office состоит в том, что весь этот интерфейс является настраиваемым - любую из панелей, также как и любой из элементов, расположенных на панели, можно отключить или включить в любую минуту, можно изменять элементы, показываемые на панелях. В Office 2000 это может делаться автоматически, на основе "интеллектуальных" соображений, - отключаются те команды, которые давно не использовались. Самое главное, что наряду со встроенными панелями и командами можно создавать собственные панели и команды. Это позволяет полностью отказаться от стандартного интерфейса, создав свой собственный интерфейс документа. Чаще всего, в документе используется комбинация собственных и встроенных элементов интерфейса.
Большая часть задач по созданию собственных инструментальных панелей и элементов, располагаемых на них, обычно решается вручную без использования программирования, хотя понятно, что невозможно обойтись без написания макросов, вызываемых в ответ на нажатие командных кнопок или выбор команд меню, созданных собственноручно. Но почти все эти задачи (к сожалению, есть некоторые исключения) можно решать и программно, чем мы сейчас и займемся.
Свойства и методы коллекции CommandBars
Коллекция CommandBars обладает не только традиционными свойствами и методами, но и некоторыми специфическими свойствами. Давайте кратко познакомимся с большинством из них:
- Property ActionControl As CommandBarControl вызывается обычно в OnAction процедуре и возвращает объект CommandBarControl, чье свойство OnAction связано с этой выполняемой процедурой. Если же такого объекта нет, то возвращается значение Nothing, что бывает при вызове этого свойства из обычной процедуры. Позволяет отключить доступ к объекту на время выполнения процедуры.
- Property ActiveMenuBar As CommandBar возвращает объект CommandBar, представляющий активную панель меню.
- Property DisplayKeysInTooltips As Boolean, DisplayTooltips As Boolean - если свойства имеют значения True, то на панели отображаются назначения "горячих" клавиш.
- Property LargeButtons As Boolean - значение True позволяет включить клавиши "большого" размера.
- Function Add([Name], [Position], [MenuBar], [Temporary]) As CommandBar. Метод Add - основной метод коллекции позволяет программным путем добавить в коллекцию новую собственную панель, дав ей имя Name. Параметр Position указывает расположение панели на экране. Его возможные значения: msoBarLeft, msoBarTop, msoBarRight, msoBarBottom указывают, куда стыковочная панель будет причалена - справа, слева, вверху или снизу экрана. Значение msoBarFloating этого параметра указывает, что панель появится в плавающем состоянии. Значение msoBarPopup указывает, что новая панель создается для контекстного меню. Булев параметр MenuBar имеет значение True, когда новая панель заменяет главную панель меню. Булев параметр Temporary позволяет сделать добавление панели временным (на момент сеанса) или постоянным.
- Function FindControl([Type], [Id], [Tag], [Visible], [Recursive]) As CommandBarControl Позволяет найти на панелях, входящих в коллекцию, элемент, удовлетворяющий критериям поиска. Параметры, являющиеся ключами поиска, могут быть опущены, достаточно задания одного из них. Булев параметр Recursive указывает, нужно ли вести поиск на всю глубину, включая все подменю. Если критериям поиска удовлетворяет несколько элементов, то в качестве результата возвращается первый из них. Возвращается значение Nothing, если поиск был безуспешным.
- Sub ReleaseFocus() Все панели теряют фокус.
В Office 2000 у этой коллекции появились новый метод, новое свойство и новое событие:
- Function FindControls([Type], [Id], [Tag], [Visible]) As CommandBarControls. Является обобщением метода FindControl, возвращая в случае успеха коллекцию CommandBarControls, содержащую все элементы, удовлетворяющие критериям поиска.
- Property AdaptiveMenus As Boolean. Позволяет включить или выключить свойство адаптивности встроенных меню, автоматически настраивающее их видимый состав в зависимости от частоты использования той или иной команды меню.
- Event OnUpdate(). Событие возникает при любых изменениях командной панели объекта CommandBar.
Свойства и методы объекта CommandBar
Вот основные свойства и методы самого объекта CommandBar, представляющего отдельную панель:
- Property BuiltIn As Boolean Это булево свойство определено как для панели, так и для ее элементов, значение True указывает, что панель или элемент являются встроенными, False - определены пользователем.
-
Property Context As String - позволяет установить или проверить контекст, определяющий местоположение хранения панели, то ли непосредственно с самим документом, то ли в другом возможном месте, зависящем от приложения.
К сожалению, это свойство не работает должным образом. Изменить его значение программным путем не удается.
- Property Controls As CommandBarControls - можно сказать центральное свойство, возвращающее коллекцию элементов, располагаемых на панели.
- Property Enabled As Boolean, Visible As Boolean - тоже два центральных и широко используемых свойства. Первое позволяет выключить доступ к панели, обычно временно, второе делает панель вообще невидимой и тем более недоступной.
- Property Height As Long, Left As Long, Top As Long, Width As Long - типичные свойства графических элементов, в том числе для панели и ее элементов. Задают размеры элемента.
- Property Index As Long - возвращает порядковый номер элемента в коллекции.
- Property Name As String, NameLocal As String - имя панели или ее элемента, для встроенных панелей (элементов) имеют смысл два имени "родное" английское имя и локализованное.
- Property Position As MsoBarPosition - такое же свойство, как у коллекции панелей, но применяемое к отдельно взятой панели.
- Property Protection As MsoBarProtection - защищает панель от тех или иных действий пользователя. Значением свойства являются константы, определяющие, что конкретно нельзя делать с панелью, например, менять ее размеры или передвигать.
- Property Type As MsoBarType - возвращает тип панели.
- Sub Delete() - удаляет панель
- Function FindControl([Type], [Id], [Tag], [Visible], [Recursive]) As CommandBarControl - такой же метод поиска элемента, как и описанный выше для коллекции, но поиск ограничен пределами одной панели.
- Sub Reset() - Восстанавливает установки, принятые по умолчанию, в частности конфигурацию встроенных панелей.
- Sub ShowPopup([x], [y]) - отображает контекстную панель в позиции, заданной курсором или параметрами X и Y, если они указаны.
Также как и коллекция, этот объект приобрел новое булево свойство AdaptiveMenu