Обработка события Refreshed для текстовых полей Writer

Автор Евгений aka DE, 20 мая 2015, 22:52

0 Пользователи и 1 гость просматривают эту тему.

Евгений aka DE

Задача отловить событие обновления (пересчета/изменения) полей Writer


Global vRefreshListener
Global vRefreshBroadCast

Sub StartListeningRefreshFields
  vRefreshBroadCast = ThisComponent.getTextFields
  vRefreshListener = CreateUnoListener("tf_refreshed_", "com.sun.star.util.XRefreshListener")
  vRefreshBroadCast.addRefreshListener(vRefreshListener)
End Sub

Sub tf_refreshed_refreshed(vEvent)
  msgbox "Field refresh event"
End Sub


В данном виде событие отрабатывается только при вызове
ThisComponent.getTextFields.Refresh

на изменение полей / <F9>  не срабатывает
что не так?

файл прилагается

JohnSUN

Добро пожаловать!
Цитата: Евгений aka DE от 20 мая 2015, 22:52
Задача отловить событие обновления (пересчета/изменения) полей Writer
...
  vRefreshListener = CreateUnoListener("tf_refreshed_", "com.sun.star.util.XRefreshListener")
...
на изменение полей / <F9>  не срабатывает
Если честно, глубоко в проблему не закапывался. Но, как по мне, XRefreshListener и должен возникать на .Refresh.
А то событие, за которым ты охотишься, должно содержать в названии что-то вроде Update, Content, Change...
Но это только IMHO
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

Евгений aka DE

Спасибо за ответ!
Ну да, видимо, мне нужно событие другого уровня.
А какой объект мог бы быть датчиком такого события? (изменение полей)

JohnSUN

#3
"Ты можешь не поверить, Билл, но мне действительно очень жаль, что твоя гнедая сломала ногу Боливару..."
Самому стало интересно, загуглил и нарвался:
ЗДЕСЬ
ЦитироватьDescription
provides information about and access to the properties from an implementation.
There are three types of properties:
bound properties
constrained properties
free properties
You can listen to changes of bound properties with the XPropertyChangeListener and you can veto changes of constrained properties with the XVetoableChangeListener.
To implement inaccurate name access, you must support the interface XExactName.
Ни Content, ни Value у пользовательского поля не являются ни "bound", ни "constrained"...
Перепроверяю и - таки да! - нахожу ЗДЕСЬ подтверждение: те, кто шли перед нами, тоже не смогли это сделать.
Так что придётся менять способ ввода (например, лепить отдельную форму ввода, где для каждого элемента управления обрабатывать изменение) или довериться офису - перед выводом на печать refresh для всех полей - якобы! - будет выполнен автоматически.

UPD. А еще вот здесь Bernard Marcelly рассказал, как он дотягивался до свойств, которые могут орать про изменение.
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

Евгений aka DE

О, да. Это надо поизучать...
Гран мерси за инфу.

rami

А для чего всё это нужно? Может быть с полями можно разобраться другим способом?

Евгений aka DE

С полями стал возиться, в том числе, чтоб использовать функционал cyrtools1.3 "на лету" (в обработчике событий).
Но, сейчас мне кажется, перектестные ссылки больше подходят для сего. Хотя, может, велосипед изобретаю?

А вообще, поскольку поля позволяют производить несложные вычисления, использовать результаты оных в цепочке.
Другими словами, Writer нужен с его возможностями форматирования текста, но ему не хватает немного Calc'а:
так, я частенько использую Writer для документов, в которых объясняется ход расчетов с цифрами и примерами.
Поэтому нужна возможность использования промежуточных результатов по ходу текста, в т.ч. в формулах Math.