目前在我的ppt addin项目中,我想知道是否可以跟踪用户所做的形状更改:
我对PPT 2013的了解有一个AfterShapeSizeChange
事件,因此您可以在重新调整大小后知道,但我需要更多,这是用户所做的所有可能的更改。
在尝试通过浏览找到之后,这里有一些可能性:
答案 0 :(得分:0)
您是否需要实际跟踪更改,还是需要能够检测到已进行更改?即,给定的形状与原始形状不完全相同。
如果是后者,那怎么样:
编写一个例程,“触摸”演示文稿中的每个形状,并为其添加标签,每个属性的一个标签,您希望能够检测到更改。
然后你需要做的就是查看每个形状的标签,看看那里存储的属性是否与形状的当前属性相匹配。
例如,要标记形状:
For each oSl in ActivePresentation.Slides
For each oSh in oSl.Shapes
oSh.Tags.Add "Left", cstr(oSh.Left)
oSh.Tags.Add "Top", cstr(oSh.Top)
Next
Next
答案 1 :(得分:0)
我遇到了同样的问题。
让我说,我认为最好的解决方案是将形状序列化为XML(形状状态)并将其保存为自己的形状。这样,下次访问形状时,可以使用序列化状态检查当前状态。
可以将XML保存在一个形状中,但是你不能在“一个命令”中序列化COM形状,你已经实现了你自己的序列化查找所有形状属性(我认为!!!!)。
我的解决方法是:每次用户在幻灯片中放置一个形状(比如ShapeA),在特定母版页(ShapeA_state1)中创建一个形状副本,新形状保持我的ShapeA状态。然后我将ShapeA_state1的引用保存到ShapeA中。通过这种方式,当应用程序第二次访问ShapeA时,应用程序可以检查状态是否已更改,并查看引用的ShapeA_state1。发生这种情况时,ShapeA.1将更新为ShapeA_edited
答案 2 :(得分:0)
解决此问题的另一种方法是向监控Application.ActivePresentation.Saved的程序添加一个线程 - 如果它设置为false,您知道已经进行了更改并且可以查看所选对象或幻灯片 - 当然您需要添加一个图层来重置Saved标志 - 并在保存之前将其传回。
访问撤消信息我没有成功。
我在PPT之前添加鼠标钩子和拦截按钮取得了很好的成功 - 非常适合拦截Application_SlideShowBegin之前的PlaySlideShow按钮和在Application_SlideShowNext *事件之前播放期间的Next / Prev幻灯片。
当您想要拦截按钮位置的位置时,请记住PresenterMode和DPI比例变化等事项。