我正在办公室powerpoint(2007年,2010年和2013年版本)上进行一些开发工作,并寻找一个在PowerPoint幻灯片中调整对象大小(如文本框)时触发的事件 . 我想在用C#编码的COM加载项中捕获此事件 . 有没有办法实现这个目标?请指教 .
谢谢,萨蒂什
对,
读这个:http://msdn.microsoft.com/en-us/library/office/jj227375.aspx
在你的构造函数或任何地方
Application.AfterShapeSizeChange += AfterShapeSizeChanged;
然后创建一个函数
// Object "shape" is the one you currently edit void AfterShapeSizeChange(Microsoft.Office.Interop.PowerPoint.Shape shape) { // do something }
请注意,这仅适用于PPT 2013.对于以前的版本(2007或2010),您可能需要付出更多努力 . 我自己实现了这种方法,但从未找到更好的解决方案:
1. 为所有形状对象创建代理类
2. 记录属性(位置,宽度和高度),您需要将您拥有的值与当前形状对象进行比较
3. 创建一个Timer(创建一个类似于线程的函数但是这个函数与winform同步),检查加班,每秒设置15次就足够了 . 只检查当前选择的形状,不要检查你的ppt中的所有形状,否则它将非常慢
4. 与事件WindowSelectionChange组合http://msdn.microsoft.com/en-us/library/office/ff743918.aspx(这个是应对ctrl z或ctrl y,用户可以使用撤消或重做进行编辑,从而编辑当前所选幻灯片上没有的形状) . 在WindowSelectionChange()中类似于第3点,但现在你需要检查你拥有的所有形状 .
1 回答
对,
读这个:http://msdn.microsoft.com/en-us/library/office/jj227375.aspx
在你的构造函数或任何地方
然后创建一个函数
请注意,这仅适用于PPT 2013.对于以前的版本(2007或2010),您可能需要付出更多努力 . 我自己实现了这种方法,但从未找到更好的解决方案:
1. 为所有形状对象创建代理类
2. 记录属性(位置,宽度和高度),您需要将您拥有的值与当前形状对象进行比较
3. 创建一个Timer(创建一个类似于线程的函数但是这个函数与winform同步),检查加班,每秒设置15次就足够了 . 只检查当前选择的形状,不要检查你的ppt中的所有形状,否则它将非常慢
4. 与事件WindowSelectionChange组合http://msdn.microsoft.com/en-us/library/office/ff743918.aspx(这个是应对ctrl z或ctrl y,用户可以使用撤消或重做进行编辑,从而编辑当前所选幻灯片上没有的形状) . 在WindowSelectionChange()中类似于第3点,但现在你需要检查你拥有的所有形状 .