Аналог функции Selection.Information в Libreoffice Basic

Автор vcomp71, 8 ноября 2022, 08:16

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

vcomp71

В Visual Basic for application есть такая фунцкция Selection.Information, которая указывает информацию о выделении. Кроме всего прочего, при выделении абзаца, можно узнать, что это
1. Картинка
2. Текст
3. Нумерованный список
В связи с переходом на LibreOffice, хотелось бы узнать, если кто сталкивался, есть аналогичная функция доступа к абзацу и описания его свойств?  O0

mikekaganski

Хм. Спасибо за ссылку. Глядя на такое, начинаешь думать, что наш API не так уж плох ;)

Свойство Selection.Information у нас реализовано (правда, частично).

Радует "широта взглядов" перечисления WdInformation - от позиции начала/конца выделения до состояния Caps Lock. Интересно было бы увидеть проектировщика такого "интерфейса" ;)

"Родные" методы определения "что выделено" можно посмотреть, например, в коде расширения Formatting of All Math Formulas.
С уважением,
Михаил Каганский

sokol92

Цитата: mikekaganski от  8 ноября 2022, 08:58Интересно было бы увидеть проектировщика такого "интерфейса" ;)
Тем не менее, разработчики LO частично реализовали эмуляцию указанного метода.  :)
Было бы любопытно, если бы автор темы провел исследование, какие именно возможности метода Selection.Information реализованы и поделился результатами.
Стенд для проверки выделенного фрагмента документа Writer (можно записать в библиотеку приложения или документа):

Sub TestVBASelection
  Dim wordGlob, app, selection, v
  wordGlob=CreateUnoService("ooo.vba.word.Globals")
  app=CreateUnoService("ooo.vba.word.Globals").Application
  selection=app.selection
  v=Selection.Information(3)  ' номер страницы для конца выделения
  Msgbox "Последняя страница для выделенного фрагмента " & v
End Sub
Владимир.

mikekaganski

Цитата: sokol92 от  8 ноября 2022, 15:05исследование, какие именно возможности метода Selection.Information реализованы

Так я же привёл ссылку на реализацию.

Должны работать вызовы с wdActiveEndPageNumber, wdNumberOfPagesInDocument, wdVerticalPositionRelativeToPage, wdWithInTable, wdHeaderFooterType.
С уважением,
Михаил Каганский

sokol92

Цитата: mikekaganski от  8 ноября 2022, 15:14Так я же привёл ссылку на реализацию.
Так не все же читают внимательно. :(
Владимир.

vcomp71

Цитата: sokol92 от  8 ноября 2022, 15:34
Цитата: mikekaganski от  8 ноября 2022, 15:14Так я же привёл ссылку на реализацию.
Так не все же читают внимательно. :(
Так не все же читают вопросы! У вас реализация на чем? Или вы мне предлагаете javascript изучить, перевести все свои скрипты на kavascript, потому что они круче?

mikekaganski

@vcomp71: не могли бы Вы подробно описать свои домыслы, чтобы понять, что именно Вам не понравилось: ссылка на исходный код LibreOffice (который Вы, возможно, приняли за JavaScript и подумали, что Вам что-то предлагают перереализовать) или пример кода на Basic, предложенного sokol92?
С уважением,
Михаил Каганский

sokol92

Цитата: sokol92 от  8 ноября 2022, 15:34Так не все же читают внимательно
@vcomp71, я имел в виду себя и только себя.  :beer:

В #2 приведен путь для получения "эмулированных" объектов в LO Basic, скажем, переменная selection указывает на объект, являющийся аналогом Word.Selection.. Метод Information этого объекта реализован "скупо" (конкретика указана в ответе Михаила) и вряд ли представляет практический интерес.

Изучение "родных" методов работы с текстами документов LO Writer, на мой взгляд, лучше начинать с классической книги А.Питоньяка OOME_4_0.odt, разделы 14.5 и 14.6.
Владимир.

mikekaganski

Цитата: sokol92 от 12 ноября 2022, 16:57Метод Information этого объекта реализован "скупо" ... и вряд ли представляет практический интерес

На данный момент - не представляет, согласен. Однако скелет функции есть, расширить функционал достаточно просто (добавляй обработку соответствующих констант). Так что всё упирается в отсутствие запроса пользователя (нет ни одного написанного бага на эту тему).
С уважением,
Михаил Каганский

vcomp71

Цитата: sokol92 от  8 ноября 2022, 15:05
Цитата: mikekaganski от  8 ноября 2022, 08:58Интересно было бы увидеть проектировщика такого "интерфейса" ;)
Тем не менее, разработчики LO частично реализовали эмуляцию указанного метода.  :)
Было бы любопытно, если бы автор темы провел исследование, какие именно возможности метода Selection.Information реализованы и поделился результатами.
Стенд для проверки выделенного фрагмента документа Writer (можно записать в библиотеку приложения или документа):

Sub TestVBASelection
  Dim wordGlob, app, selection, v
  wordGlob=CreateUnoService("ooo.vba.word.Globals")
  app=CreateUnoService("ooo.vba.word.Globals").Application
  selection=app.selection
  v=Selection.Information(3)  ' номер страницы для конца выделения
  Msgbox "Последняя страница для выделенного фрагмента " & v
End Sub

О Как! Надо проверить!
Функцию искал вот здесь
https://help.libreoffice.org/latest/ro/text/sbasic/shared/main0601.html