【问题标题】:Open/Libre Office macro to scroll view to selection打开/Libre Office 宏以滚动视图到选择
【发布时间】:2016-04-03 13:44:57
【问题描述】:

在 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:我在 Windows 7 x64 上运行版本 5.0.5.2

【问题讨论】:

    标签: openoffice.org libreoffice openoffice-basic libreoffice-basic


    【解决方案1】:

    电子表格有View Panes可以操作,但在Writer中貌似没有类似的界面。

    改为使用View Cursor 向下翻一页或两页,然后移回搜索结果的位置。

    此外,请勿使用调度程序进行搜索。请改用 API,如 Andrew Pitonyak's macro document 的第 7.14 节。

    【讨论】:

    • 谢谢吉姆。我确实尝试了视图光标,但在我的实验中,视图光标并没有更改视图以显示选择。然后我想起了调度程序示例并想尝试一下,我很惊喜 做到了。
    • 在发布之前的评论并看到其他人提出的 Jim 的建议后,我意识到从编辑器运行宏时视图没有被刷新。我必须分配一个键盘快捷键并以这种方式运行宏才能让它改变视图......一个设计缺陷???
    • 我通常不会从编辑器运行宏,因为这会使编辑器成为当前组件(这可能很有用,但在这种情况下不是我们想要的)。相反,我通常使用键盘快捷键去Tools -> Macros -> Run Macro。为了能够从编辑器运行,而不是使用 ThisComponent,而是使用文本文档的组件,以 desktop.getComponents() 开头。
    • Jim,检查Andrew's macro document,它在不止一个地方说ThisComponent 在使用IDE 时不会改变(参见第3.6.9.2 节),它继续指向最后一个文件。从 OOo 的 v2 开始就是这样。另一方面,StarDesktop.getCurrentComponent() 在使用时会指向 IDE。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-29
    • 1970-01-01
    • 2010-10-28
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    相关资源
    最近更新 更多