Работа с LibreOffice, как с Com-объектом

Автор Борис_С, 22 октября 2021, 17:15

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

sokol92

Это Михаилу спасибо! Иностранцы с ask.libreoffice.org меня уже в личке спрашивают - где Mike?  :)
Владимир.

Борис_С

Напоследок, как получить в C# свойство oElement.TextField
(в алгоритме есть оператор  If oElement.TextField.supportsService("com.sun.star.text.TextField.URL") Then

sokol92

Так же, как в Basic. Метод supportsService описан здесь.
Владимир.

mikekaganski

#63
Цитата: Борис_С от  3 декабря 2021, 16:21Напоследок, как получить в C# свойство oElement.TextField

На самом деле очень интересный вопрос.
Basic позволяет обращаться к свойствам "напрямую" - скрывая детали. А на самом деле свойства реализованы разными способами (см. Properties). Реально - с т.з. использования в языках, не предоставляющих таких удобств - доступ к свойствам может быть двух видов: через XPropertySet, и через get/set-методы.

TextField - из первой категории.
С уважением,
Михаил Каганский

sokol92

... Наш любимый MRI пишет:

XPropertySet xPropSet = (XPropertySet)oInitialTarget;
XTextField xTextField = (XTextField) xPropSet.getPropertyValue("TextField").Value;
Владимир.

Борис_С

А что он пишет по поводу Representation?

Борис_С

Мне нужно получить свойство Representation.
В API пишут, что доступ к этому свойству через интерфейс com::sun::star::text::textfield::URL
В CLI - unoidl::com::sun::star::text::textfield::URL
В CLI такого интерфейса нет.

sokol92

XPropertySet xPropSet_2 = (XPropertySet)xTextField;
String sRepresentation = (String) xPropSet_2.getPropertyValue("Representation").Value;

      
Владимир.

mikekaganski

Цитата: Борис_С от  3 декабря 2021, 17:03В API пишут, что доступ к этому свойству через интерфейс com::sun::star::text::textfield::URL

Нет, в API пишут, что сервис com::sun::star::text::textfield::URL имеет такое свойство. И это свойство помечено как [property] (что означает "доступно через XPropertySet", в отличие от [attribute], обозначающее доступ через get/set-методы.)

Сервис - это не интерфейс.
С уважением,
Михаил Каганский

Борис_С

Всем спасибо. Теперь все работает.

Борис_С

Цитата: mikekaganski от  3 декабря 2021, 17:08Нет, в API пишут, что сервис com::sun::star::text::textfield::URL имеет такое свойство. И это свойство помечено как [property] (что означает "доступно через XPropertySet", в отличие от [attribute], обозначающее доступ через get/set-методы.)

Сервис - это не интерфейс.
А где там написано, что это property. Я не нашел.

sokol92

Попробую продолжить ответ #63.
Есть "настоящие" свойства, которые в модели UNO называются атрибутами. К ним мы из C# (и др. "неспециализированных" языков) обращаемся через метод getPropertyValue интерфейса XPropertySet.
Есть "псевдосвойства"  - MRI их показывает с признаком Pseud в столбце Info. К ним надо обращаться через Get/Set методы. При этом если в столбце Attr. MRI написано Read_Only, то метод Set... применять нельзя, если WriteOnly - то нельзя применять метод Get...
Владимир.

Борис_С

Я спросил, где в API свойство Representation помечено как property?

mikekaganski

С уважением,
Михаил Каганский

Борис_С