Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
94
Добавлен:
11.05.2015
Размер:
616.76 Кб
Скачать
      1. Изменения механизма отправки (Dispatcher) в версии 1.1 oOo

Работает ли механизм отправки в версии 1.0.3? - Mathias Bauer ответил: "Механизм отправки (dispatcher) использует некоторые возможности, которые отсутствуют в версии OOo 1.0 (например, dispatch helper). Скажем, программный код для выполнения механизма отправки с параметрами."

И еще:

"Если макрос использует имена, а не числовые коды, то эти имена не будут меняться в более поздних версиях OOo".

      1. Использование механизма отправки (dispatcher) требует пользовательского интерфейса.

Имеет ли смысл использовать обычный вызов API вместо обращения к механизму отправки (dispatcher) с именем функции? Ответ Mathias Bauer. Вызов механизма отправки (Dispatch) не будет работать с документом без UI. Если OOo запущен в режиме реального "сервера" (это может произойти в версии OOo 2.0), когда документы могут загружаться и выполняться без любого GUI, то будут работать только макросы, использующие "настоящий" API. При этом "настоящий" API намного мощнее и дает лучшие возможности обращения к реальным объектам. По моему мнению, следует использовать обращение к механизму отправки Dispatch API только в двух случаях:

  • Запись макроса

  • Запасной путь, когда определенная задача не может быть выполнена "настоящим" API (он не существует или неработоспособен).

        1. Изменение меню - пример механизма отправки (dispatcher)

В версии OpenOffice.org 1.1.1 нет возможности назначить макрос позиции меню с использованием API, это можно делать только в версии 2.0:

http://specs.openoffice.org/ui_in_general/api/ProgrammaticControlOfMenuAndToolbarItems.sxw

Язык API IDL указывает, что существует интерфейс Xmenu и также XMenuListener. Получение идентификатора меню (Menu ID) из XML-файла, который описывает это меню, возможно, а вот назначение макроса для этого идентификатора - нет, пока не будет версия OOo 2.0! Тем не менее, сейчас уже можно использовать DispatchProviderInterceptor, который может быть сопоставим с Listener или с Handler.

Используя DispatchProviderInterceptor, мы можем слушать (ожидать) команды механизма отправки (Dispatch). Можно прервать почти любую команду. Используф идентификаторы слотов, можно назначать макросы специальным командам механизма отправки DispatchCommands, которые представляют позиции меню. Хотя нельзя запретить пользователю выбирать позицию меню, можно прервать команду, когда она отправлена на выполнение. При этом должен быть установлен и зарегистрирован прерыватель диспетчера DispatchInterceptor.

Макрос ToggleToolbarVisibility, написанный Peter Biela на форуме по OOo - oooforum, включает/выключает видимость панелей инструментов.

Листинг 4.3.2.1.1:Включение/выключение видимости панели инструментов.

REM Author: Peter Biela

REM E-Mail: Peter.Biela@planet-interkom.de

REM Modified: Andrew Pitonyak

Sub ToggleToolbarVisibility( )

Dim oFrame

Dim oDisp

Dim a()

Dim s$

Dim i As Integer

oFrame = ThisComponent.CurrentController.Frame

a() = Array( ".uno:MenuBarVisible", ".uno:ObjectBarVisible", _

".uno:OptionBarVisible", ".uno:NavigationBarVisible", _

".uno:StatusBarVisible", ".uno:ToolBarVisible", _

".uno:MacroBarVisible", ".uno:FunctionBarVisible" )

oDisp = createUnoService("com.sun.star.frame.DispatchHelper")

For i = LBound(a()) to Ubound(a())

oDisp.executeDispatch(oFrame, a(i), "", 0, Array())

Next

'on CalcFrames

s = ".uno:InputLineVisible"

oDisp.executeDispatch(oFrame, s, "", 0, Array())

End Sub

Соседние файлы в папке ooo