我写了一个PowerPoint 2010插件,允许用户创建形状对。这些对是同步的(例如位置,颜色,文本......)。这些对存储为以下类的对象:
class Pair
{
Shape LeftShape { get; set; }
Shape RightShape { get; set; }
}
如果修改了Shape,其中有一对包含Shape,则会更新另一个形状。
可以在主布局上定义对。同步适用于主服务器。如果该对由两个占位符组成,并且我创建了一个基于主控的幻灯片,当然,新形状不会同步。有没有办法找到形状的主等效,反之亦然?然后算法将是:
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
我查看了新形状的Name
和Id
属性。但它们与主形状的属性不同。
PlaceholderFormat
,如果形状没有占位符。但这绝对不是一个好方法。
答案 0 :(得分:1)
可以在主布局上定义对。
我很好奇:怎么样?
Shape的.Type属性将指示它是占位符还是其他形状类型。
如果形状是msoPlaceholder(14),则它是占位符。在这种情况下,它的.PlaceholderFormat.Type属性告诉你它是哪种类型的占位符,如果它是一种可以容纳多种内容的类型,它的.PlaceholderFormat.ContainedType会告诉你它是否包含图表,对象,图片等等。
您可以考虑使用标记来表示对。要“标记”形状范围的成员,请使用当前选定的形状作为示例范围:
Dim oSh As Shape
For Each oSh In ActiveWindow.Selection.ShapeRange
oSh.Tags.Add "MagicPair", "TagValue"
Next
要返回其中一对的另一半,请编写一个简单的函数,查看当前幻灯片上的每个形状,并检查其MagicPair标记值是否与第一个形状的值匹配。