0

我编写了一个 PowerPoint 2010 插件,允许用户创建形状对。这些对是同步的(例如位置、颜色、文本...)。这些对存储为以下类的对象:

class Pair
{
     Shape LeftShape { get; set; }
     Shape RightShape { get; set; }
}

如果修改了一个形状,其中有一对包含该形状,则另一个形状将被更新。

可以在主布局上定义对。同步在主服务器上工作。如果该对由两个占位符组成,并且我基于母版创建幻灯片,那么新形状当然不会同步。有没有办法找到形状的主人等价物,反之亦然?那么算法将是:

 s1's modification is recognized
 if s1 is a placeholder
     find s1's equivalent in master -> m1
     look up the partner of m1 -> m2
     find the shape in the current slide that is based on m2 -> s2
     update s2

我查看了新形状的NameId属性。但它们与主形状的属性不同。

顺便说一句,有没有一种很好的方法来确定形状是否是占位符?如果形状没有占位符,我目前的方法是查询PlaceholderFormat哪个抛出异常。但这绝对不是一个好办法。

4

1 回答 1

1

可以在主布局上定义对。

我很好奇:怎么做?

Shape 的 .Type 属性将指示它是占位符还是其他一些形状类型。

如果形状是 msoPlaceholder ( 14 ),它是一个占位符。在这种情况下,它的 .PlaceholderFormat.Type 属性会告诉你它是哪种类型的占位符,如果它是一种可以容纳多种类型的内容,它的 .PlaceholderFormat.ContainedType 会告诉你它是否包含图表、对象、图片, ETC。

您可能会考虑使用标签来指示对。要“标记”形状范围的成员,使用当前选定的形状作为示例范围:

Dim oSh As Shape
For Each oSh In ActiveWindow.Selection.ShapeRange
    oSh.Tags.Add "MagicPair", "TagValue"
Next

要返回其中一对的另一半,请编写一个简单的函数,查看当前幻灯片上的每个形状并检查其 MagicPair 标记值是否与第一个形状的值匹配。

于 2012-09-11T14:54:14.483 回答