使用 Shapetype 元素

本主题介绍 VML,此功能已弃用到 Windows Internet Explorer 9。 依赖 VML 的网页和应用程序应迁移到 SVG 或其他广受支持的标准。

注意

截至 2011 年 12 月,本主题已存档。 因此,它不再积极维护。 有关详细信息,请参阅 存档内容。 有关当前版本的 Windows Internet Explorer 的信息、建议和指南,请参阅 Internet Explorer 开发人员中心

 

在本主题中,我们将说明如何使用 <shapetype> 元素定义你自己的常用形状,然后从形状类型实例化或创建形状。

如果要绘制具有相同或类似属性的许多形状,则如果必须重复为每个形状键入相同的属性属性属性,则很繁琐。 VML 提供 <shapetype> 元素,以便可以定义形状的原型。 然后 <shape> ,可以使用该元素来实例化同一形状类型中形状的许多副本。

可以按照三个步骤定义形状类型,然后从形状类型实例化形状:

  1. 键入一个 <shapetype> 元素,并通过指定 ID 属性为其指定名称。
  2. 使用其属性属性或子元素描述形状类型。
  3. 通过键入 <shape> 元素来实例化形状,并将形状的类型属性引用为 shapetype 的 ID 属性。

例如,键入以下线条以创建名为“MyShape”的形状类型:

<v:shapetype id="MyShape" >
</v:shapetype>

然后,通过设置某些属性属性(例如 fillcolor="red" strokecolor="blue")来更改形状类型。 或者,可以在形状类型中使用子元素,例如<path><fill><stroke> (我们将在后面的主题) 中讨论这些子元素。

<v:shapetype id="MyShape" fillcolor="red" strokecolor="blue"...>
</v:shapetype>

然后,通过指定 type="#MyShape"从形状类型“MyShape”实例化形状,如以下 VML 表示形式所示。 此形状继承形状类型“MyShape”的所有属性,并且显示在其包含框中的大小为 100 到 80。

<v:shape type="#MyShape" style='width:100;height:80'/>

可以通过指定 type="#MyShape" 和覆盖某些属性(如 fillcolor="maroon"以下 VML 表示形式中所示)从形状类型“MyShape”实例化另一个形状。 此形状继承形状类型“MyShape”的所有属性,但填充颜色属性除外,并且以 70 到 90 的大小在其包含框中显示。

<v:shape type="#MyShape" fillcolor="maroon"
style='width:70; height:90'/>

下面是上述示例的完整 VML 表示形式:

type1-1.gif (477 bytes) type1-2.gif (471 bytes)

<body>
<v:shapetype id="MyShape" fillcolor="red" strokecolor="blue" coordsize="21600,21600"
path="m10860,2187c10451,1746,9529,1018,9015,730,7865,152,6685,,5415,,4175,
152,2995,575,1967,1305,1150,2187,575,3222,242,4220,,5410,242,6560,575,7597l10860,
21600,20995,7597c21480,6560,21600,5410,21480,4220,21115,3222,20420,2187,19632,
1305,18575,575,17425,152,16275,,15005,,13735,152,12705,730,12176,1018,11254,1746,
10860,2187xe">
</v:shapetype>
<v:shape type="#MyShape" style='width:100;height:80;'/>
<v:shape type="#MyShape" style='width:70;height:90;' fillcolor="maroon"/>
</body>

如你所学,当形状从形状类型实例化时,它将从形状类型继承所有属性属性。 可以通过在元素内 <shape> 重新定义属性来覆盖部分或全部继承的属性。 请注意,继承只是一个级别。 这是因为只有一个<shape><shapetype>元素才能引用元素。 元素 <shapetype> 不能引用另一个 <shapetype> 元素。

此外,形状类型不属于任何组。 因此,元素 <shapetype> 可以单独或出现在元素内部 <group> 。 可以在引用相同形状类型的不同组中有多个形状。 如果形状类型出现在组内,则生活在另一个组中的形状仍可引用此形状类型。

例如,在以下 VML 表示形式中,Rect1 和 Rect2 位于 GroupA 中,Rect3 位于 GroupB 中。 所有三个矩形都从 MyShape 形状类型实例化。

<body>
...
<v:shapetype id="MyShape" fillcolor="blue" strokecolor="red"...>
</v:shapetype>

<v:group id="GroupA"...>
<v:shape id="Rect1" type="#MyShape" .../>
<v:shape id="Rect2" type="#MyShape" strokecolor="black".../>
</v:group>

<v:group id="GroupB"...>
<v:shape id="Rect3" type="#MyShape" fillcolor="green".../>
</v:group>
...
</body>

有关此元素的详细信息,请参阅 VML 规范