понедельник, 19 ноября 2012 г.

Перехват событий в Open Office

Задача: при возникновениив Open Office определенного события вызывать макрос. К примеру, при создании нового документа вызывать макрос ItIsNewDocumentWow.

Понятно, что этот макрос должен лежать в какой-либо библиотеке (не в документе).

Решение 1:
  • в интерфейсе Writer (или другой программы из Open Office) в меню выбираем Сервис / Настройка...
  • Откроется окно Настройка, вкладка События. В ней перечислены все возможные события, которые отлавливает Open Office. Внизу под окном со списком есть поле Сохранить в - выбираем в нем OpenOffice.org (или можно выбрать документ - тогда событие будет перехватываться только если оно происходит в этом документе (впрочем, не совсем так - есть любопытные ошибки)).
  • Выбираем нужное событие, ставим на него курсор и нажимаем кнопку [Макрос...].
  • Выбираем макрос и жмем [Ok].
  • В окне Настройка жмем [Ok].

Решение 2 (редактируем конфигурационный файл, годится доя OpenOffice 3.3):
  • Закрываем все программы Open Office, в том числе в трее.
  • В папке C:\Documents and Settings\Имя пользователя\Application Data\OpenOffice.org\3\user\ открываем в текстовом редакторе файл registrymodifications.xcu
  • после какого-либо тега < /item > вставляем следующий текст:
    < item oor:path="/org.openoffice.Office.Events/ApplicationEvents/Bindings" >< node oor:name="OnNew" oor:op="replace" >< prop oor:name="BindingURL" oor:op="fuse" >< value >vnd.sun.star.script:Библиотека.Модуль.ItIsNewDocumentWow?language=Basic&location=application< /value >< /prop >< /node >< /item >
  • Сохраняем файл.


PS. Данный механизм мы используем для построения этого функционала.

UPD. К сожалению, Решение 2 в OpenOffice 3.0 не работает - иначе устроено хранение настроек по сравнению с версией 3.3.

UPD 2. Решение 3 (общее программное решение, найдено на community.i-rs.ru)
Код функции:
Sub AttachBasicMacroToEvent(EventName as String, SubPath as String)
  Dim PropValue(1) as new com.sun.star.beans.PropertyValue
  Dim DocEvents As Object
  PropValue(0).Name = "EventType"
  PropValue(0).Value = "Script"
  PropValue(1).Name = "Script"
  PropValue(1).Value = "vnd.sun.star.script:" & SubPath & "?language=Basic&location=application"
 
  oGEB = CreateUnoService("com.sun.star.frame.GlobalEventBroadcaster")
  oEvents = oGEB.getEvents()

  oEvents.ReplaceByName(EventName, PropValue())
End Sub

Вызов функции осуществляется так (для нашего случая - создание нового документа): AttachBasicMacroToEvent("OnNew", "Библиотека.Модуль.ItIsNewDocumentWow")

Комментариев нет:

Отправить комментарий