Макрос Open / Libre Office для прокрутки просмотра до выбора

В Writer я хотел бы найти какой-то текст и, когда он будет найден, расположить представление в верхней части представления / окна.

Используя следующий код,

document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

dim args1(1) as new com.sun.star.beans.PropertyValue
args1(0).Name = "SearchItem.SearchString"
args1(0).Value = ":"

dispatcher.executeDispatch(document, ".uno:ExecuteSearch", "", 0, args1())

вид меняется, и он показывает выбор, но не в каком-то конкретном месте. Я хочу, чтобы он был вверху окна / представления.

Я также нашел в другом месте использование ThisComponent.currentController.getViewData() и restoreViewData(). Я поэкспериментировал и решил, как изменить возвращаемые данные, чтобы получить вертикальную прокрутку, но ничего не произошло. Например...

vd = ThisComponent.currentController.getViewData()
vdParts = Split(vd, ";")
vdParts(6) = CLng(vdParts(6)) + 1000
vd = join(vdParts, ";")
ThisComponent.currentController.restoreViewData(vd)

Какие-либо предложения?

PS: я использую версию 5.0.5.2 на Windows 7 x64


person Vic    schedule 03.04.2016    source источник


Ответы (1)


В электронных таблицах есть панели просмотра, которыми можно управлять, но это не похоже на в Writer есть аналогичный интерфейс.

Вместо этого используйте Просмотр курсора, чтобы перейти на одну или две страницы вниз, а затем вернуться назад к месту, где находится результат поиска.

Также не используйте диспетчер для поиска. Вместо этого используйте API, как в разделе 7.14 документа макроса Эндрю Питоняка.

person Jim K    schedule 04.04.2016
comment
Спасибо, Джим. Я пробовал использовать курсор просмотра, но в моих экспериментах курсор просмотра не менял вид, чтобы отобразить выбор. Затем я вспомнил примеры диспетчера и подумал попробовать, и был приятно удивлен, что это сработало. - person Vic; 05.04.2016
comment
После публикации предыдущего комментария и просмотра вашего предложения, сделанного Джимом другими, я понял, что представление не обновляется при запуске макроса из редактора. Мне пришлось назначить сочетание клавиш и запустить макрос таким образом, чтобы заставить его изменить представление ... недостаток дизайна ??? - person Vic; 05.04.2016
comment
Обычно я не запускаю макросы из редактора, потому что это делает редактор текущим компонентом (что может быть полезно, но не то, что мы хотим в данном случае). Вместо этого я обычно перехожу к Tools -> Macros -> Run Macro с помощью сочетаний клавиш. Чтобы можно было запускать из редактора, вместо использования ThisComponent используйте компонент текстового документа, начиная с desktop.getComponents (). - person Jim K; 05.04.2016
comment
Джим, проверяя с помощью документа макроса Эндрю, более чем в одном месте говорится, что ThisComponent не изменяется когда IDE используется (см. раздел 3.6.9.2), она продолжает указывать на последний документ. Так было с v2 OOo. StarDesktop.getCurrentComponent() с другой стороны, будет указывать на IDE, когда она используется. - person Vic; 06.04.2016