返回介绍

使用形状(绘图对象)

发布于 2019-10-04 14:06:00 字数 3485 浏览 1025 评论 0 收藏 0

形状或绘图对象由三种不同的对象表示:Shapes 集合、ShapeRange 集合和Shape 对象。通常,Shapes 集合用于创建形状并对幻灯片中的所有形状进行重复操作;Shape 对象用于修改单个形状;而ShapeRange 集合用于修改多个形状,就象在用户界面中使用多个选定的形状一样。

设置形状的属性

形状的许多格式属性不是由直接应用于ShapeShapeRange 对象的属性设置的。相反,相关的形状属性在第二级对象内进行组合。例如FillFormat 对象,其中包含了与形状填充相关的所有属性;又如LinkFormat 对象,其中包含了链接的 OLE 对象的所有特有属性。若要设置一个形状的属性,必须先返回代表相关形状属性的对象,然后设置该返回的对象的属性。例如,使用Fill 属性返回FillFormat 对象,然后设置FillFormat 对象的ForeColor 属性,从而设置指定形状的前景填充色,如以下示例所示。

Set myDocument = ActivePresentation.Slides(1)
myDocument.Shapes(1).Fill.ForeColor.RGB = RGB(255, 0, 0)

同时对多个形状应用属性或方法

在用户界面中,有些操作可以对选定的多个形状执行;例如,可以选定多个形状并同时设置它们各自的填充。其他些操作则只能对选定的单个形状执行;例如,只有选定单个形状时才能编辑其中的文本。

在 Visual Basic 中,对一组形状应用属性和方法有两种方式。这两种方式使您可以对若干形状执行在单个形状上能执行的所有操作,而不管是否可以在用户界面上执行这些操作。

  • 如果该操作在用户界面上影响多个选定的形状,则要在 Visual Basic 中执行该操作时,只需先建立一个包含要使用的形状的ShapeRange 集合,然后直接对该ShapeRange 集合应用适当的属性和方法。
  • 如果该操作在用户界面上不影响多个选定的形状,仍然可以在 Visual Basic 中执行该操作。方法是:在包含要使用的形状的Shapes 集合或ShapeRange 集合中执行循环,并对集合中的单个Shape 对象应用适当的属性和方法。

许多应用于Shape 对象和ShapeRange 集合的属性和方法在用于特定形状时会失败。例如,如果将TextFrame 属性应用于不能包含文本的形状,将会失败。如果不能确定特定的属性或方法对ShapeRange 集合中的每个形状都能应用,则不要对ShapeRange 集合应用于该属性或方法。如果确实要对形状集合应用一个这样的属性或方法,则必须在应用之前逐个测试集合中的每个形状,以确保形状的类型与所应用的属性和方法相匹配。

对 ShapeRange 集合应用属性和方法

如果可以同时在用户界面上对多个选定的形状执行某种操作,则可以通过编程的方式创建一个ShapeRange 集合,再应用适当的属性和方法以执行该操作。以下示例在 myDocument 中创建一个包含自选图形“Big Star”和“Little Star”的形状区域,并对它们应用过渡填充。

Set myDocument = ActivePresentation.Slides(1)
Set myRange = myDocument.Shapes _
 .Range(Array("Big Star", "Little Star"))
myRange.Fill.PresetGradient msoGradientHorizontal, _
 1, msoGradientBrass

下面是将属性和方法应用于ShapeRange 集合的一般原则。

  • 将方法应用于集合等于对集合中的每个Shape 对象都应用该方法。
  • 设置集合的属性值等于设置该范围内每个形状的属性值。
  • 如果集合中所有形状的某一返回常数的属性值相同,则集合的该属性将返回单个形状的该属性值。如果集合中所有形状的该属性值不相同,则返回“mixed”常数。
  • 如果集合中所有形状的某一返回简单数据类型的属性值相同(例如LongSingleString),集合的该属性将返回单个形状的该属性值。
  • 有些属性值仅当集合中有且只有一个形状时才能返回或设置。如果集合中有一个以上的形状,将发生运行时错误。此情况通常在用户界面中的等价操作只能用于单个形状时(例如,编辑形状中的文本或编辑任意多边形的点)发生。

设置组合在ShapeRange 集合第二级对象中的形状的属性时,上述原则同样适用。例如FillFormat 对象。如果第二级对象代表可在用户界面中对多个选定对象执行的操作,则可以从ShapeRange 集合返回该对象并设置其属性。例如,可以使用Fill 属性返回FillFormat 对象,该对象代表ShapeRange 集合中所有形状的填充。设置该FillFormat 对象的属性将设置ShapeRange 集合中所有形状的相同属性。

循环 Shapes 或 ShapeRange 集合

选择多个形状并执行某个命令,即使无法在用户界面中同时对多个形状执行一个操作,但可以用编程方式执行相同的操作。方法是:在包含要使用的形状的Shapes 集合或ShapeRange 集合中执行循环,然后对集合中的单个Shape 对象应用适当的属性和方法。以下示例逐个检查 myDocument 中的所有形状,并在每个自选图形中添加文本。

Set myDocument = ActivePresentation.Slides(1)
For Each sh In myDocument.Shapes
 If sh.Type = msoAutoShape Then
 sh.TextFrame.TextRange.InsertAfter " (version 1)"
 End If
Next

以下示例创建包含当前窗口中所有选定形状的ShapeRange 集合,并为集合中每个能够包含文本的形状设置文本。

For Each sh in ActiveWindow.Selection.ShapeRange
 If sh.HasTextFrame Then
 sh.TextFrame.TextRange = "Initially selected"
 End If
Next

在形状区域中对齐、布置、分组形状

使用AlignDistribute 方法定位一组形状的相互位置或相对于包含它们的文档的位置。使用Group 方法或Regroup 方法从多个形状中创建单个形状组。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文