如何使宏“原子”

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(); 

【讨论】:

以上是关于如何使宏“原子”的主要内容,如果未能解决你的问题,请参考以下文章

求助,怎样在ACCESS2003 中某个窗体上设置登录界面,就是如何实现输入密码成功了才能进入下一个窗体?

Redis如何保证原子性

spark append 如何保证原子性

如何修改3D模型的原子属性

如何执行双重原子读取?

如何进行原子文件替换? [复制]