如何使宏“原子”
Posted
技术标签:
【中文标题】如何使宏“原子”【英文标题】:How to make a macro "atomic" 【发布时间】:2009-05-12 15:29:43 【问题描述】:IOW 如何在执行宏时使 OOo 的 undo/redo 正常工作?
这和我之前的问题有关:#853176
【问题讨论】:
【参考方案1】:您可以与 UndoManager 对话,在宏的开头调用 enterUndoContext()
,然后在结尾调用 leaveUndoContext()
。例如:
Dim undo As Object
undo = ThisComponent.UndoManager
undo.enterUndoContext("MyAtomicTest")
...
[YOUR COMPLEX OPERATIONS HERE]
...
undo.leaveUndoContext
这会创建一个原子撤消操作,在用户面前显示为“MyAtomicTest”。
【讨论】:
谢谢,这对我来说效果很好。【参考方案2】:对于我们当中喜欢用 javascript 编写 OOo 宏的人来说,这是一个应该工作的最小 sn-p(它已经过测试,但我将这段代码从更大的上下文中分离出来):
importClass( Packages.com.sun.star.document.XUndoManager );
importClass( Packages.com.sun.star.document.XUndoManagerSupplier );
var doc = XSCRIPTCONTEXT.getDocument();
var undo_manager = UnoRuntime.queryInterface(XUndoManagerSupplier, doc).getUndoManager();
undo_manager.enterUndoContext( 'your descriptive title here' );
// get stuff done
undo_manager.leaveUndoContext();
【讨论】:
以上是关于如何使宏“原子”的主要内容,如果未能解决你的问题,请参考以下文章