新创建的自定义列表形状在 Microsoft Visio 2013 x64 中不起作用
New Created Custom List Shape Doesn't Work in Microsoft Visio 2013 x64
Objective:
首先,我应该说一下我想做什么,然后我会在接下来描述我为实现我的目标所做的事情(描述)部分.
我想从图表部件部分的普通容器创建一个自定义列表主形状插入功能区选项卡。然后,我想创建 另一个可以使用 作为 Created Custom List Master Shape[= 的成员形状的 Master Shape 218=].
换句话说,我想将我创建的主控形状添加到我的自定义列表主控形状,如附加成员和分隔符主形状到UML模板的Class主形状。
所以,我在实现我的目标时遇到了一些问题,我在接下来的部分中描述了这些问题。
描述:
我在 "Visio Stencil (.vssx)" 文件中创建了一些 新的主控形状,如下所示:
图 1 - 使用主控形状新建主控形状
- 属性主控形状(绿框):从UML的成员主控形状创建Class模板(蓝框).
- Object Master Shape(红框): 从 Diagram Parts 部分的 Plain Container 创建在功能区的“插入”选项卡中。
创建 属性 Master Shape 用作对象主形状中的成员形状,就像成员主形状在 UML 的 Class 主形状中使用一样模具.
图 2 - Class 主形状及其初始成员
从成员主形状创建的属性主形状已更改如下:
我添加了一个形状数据(图3)
图 3 - "Shape Data" 属性 Master Shape 的对话框
我在里面添加了一个Data Graphic Item(图4)
图 4 - 属性 Master Shape
的 "Data Graphic" 和 "Data Graphic Item" 对话框
我改了"User.MemberName"公式在ShapeSheetwindow的User-defined cells'section如下(图5):
=MID(SUBSTITUTE(TRIM(SHAPETEXT(TheText)),"[",""),1,FIND(" ",SUBSTITUTE(TRIM(SHAPETEXT(TheText)),"[",""))-1)
而不是:
=SHAPETEXT(TheText)
图 5 - 属性 主图形的 "ShapeSheet" window
从 Plain Container 创建的 Object Master Shape 已更改如下:
我更改了 ShapeSheet 用户定义单元格和事件部分中单元格的内容 window 如图6:
图 6 - ShapeSheet 的用户定义单元格和事件部分中的单元格 window 更改内容后
而不是:
图 7 - ShapeSheet 的用户定义单元格和事件部分中的单元格 window 在更改其内容之前
问题:
第一个问题:
为什么在将 it/them 添加到实例后,属性 Master Shape 的“t/aren”实例没有正确排列和放置Object Master Shape 喜欢将 Member Master Shape 的实例添加到 UML Stencil 的 Class Master Shape 的实例(图 8)?
图 8 - 比较 Object Master Shape 的一个实例和 属性 Master Shape 的一个实例与 UML Stencil 的 Class Master Shape 的实例和它的初始成员
第二题:
为什么 Object Master Shape 的实例在将 it/them 附加到页面后添加其初始成员 就像添加初始成员一样在将 UML 模板的 Class Master Shape 的实例添加到页面后(图 9)?
图 9 - 比较 Object Master Shape 的实例与 UML Stencil 的 Class Master Shape 的实例
我添加了以下公式来实现此 objective; 但是,我认为它不起作用:
=IF(LISTMEMBERCOUNT()=0,DOCMD(2270),0)
第三题:
为什么不在 Object Master Shape 的实例中显示一个 Bar 来插入 属性 Master Shape 的实例,就像显示一样在 UML 模板的 Class Master Shape 实例中的 Bar 插入其成员(图 10)?
图 10 - 比较 Object Master Shape 的实例与 Class UML Stencil 的 Master Shape 的实例以显示用于插入相关成员的栏
第四题:
为什么对象主形状的实例接受所有主形状的实例,除了 属性 主形状的实例,而不是只接受 UML 模板的成员和分隔符主形状实例的 Class 主形状实例(图 11) )?
图 11 - 将接受所有主形状实例的对象主形状实例与仅接受 UML 模板的 Class 主形状实例进行比较UML 模板的成员和分隔符主形状的实例
我已经为"User.msvSDListItemMaster"设置了=USE("Property")
167=]ShapeSheet 的用户定义单元格部分 window; 但是,我认为它不起作用。
第五题:
为什么't/aren不显示用于将 属性 主控形状的添加实例上的成员插入对象实例的选项Master Shape 喜欢将 UML Stencil 的 Member 和 Separator Master Shapes 的实例附加到 UML Stencil 的 Class Master Shape 的实例(图 12)?
图 12 - 比较 Object Master Shape 的一个实例和 属性 Master Shape 的一个实例与 UML Stencil 的 Class Master Shape 的实例和its Members 用于在添加的成员上显示插入成员的选项
第 6(最终)问题:
当我将 its/their 主对象更改为列表时,为什么对象主形状的实例表现得像容器?
第一个问题的答案:
这个问题总是因为没有注意“类别”这个词。在大多数情况下,人们不会注意这个词并使用“形状大师名称”而不是“形状类别”;但是,它们彼此不同。
在我的例子中,我被输入 形状主名称 (Property
) for User.msvSDContainerRequiredCategories
(以分号分隔的类别名称列表。其他形状必须至少有一个匹配的名称才能作为容器成员。) 和 User.msvSDListRequiredCategories
(以分号分隔的类别名称列表。其他形状必须至少有一个匹配名称才能被允许作为列表成员。)而不是 形状类别 (User.msvShapeCategories = Member
).
图 1 - 比较“形状主名称”与“形状类别”
第二题答案:
为了解决这个问题,我们必须注意两件事:
首先,我们必须添加我们想要在实例化主形状后自动添加的形状。因此,我们必须为每个形状添加行我们要添加名称 User.msvSDListItemMaster[Index]
(主形状的名称或 UniqueID 以创建插入命令的实例。该值必须放在 USE() 函数中。).
如您所见,我只想添加一个形状。因此,我必须将 User.msvSDListItemMaster
行的名称更改为 User.msvSDListItemMaster1
。 如果我想在实例化时添加更多形状,我必须添加另一行,如 User.msvSDListItemMaster2
、User.msvSDListItemMaster3
等等。
第二件事也是最后一件事,我们必须在 "EventDrop" 单元格 "Events" 中添加一个公式] 部分。 如您所见,我已将其添加到我的自定义列表形状中,如 here and here:
中所述
Specifying an Insertion Shape
There are several ways to add a shape to a list: dragging and dropping the shape, clicking the blue insertion triangle that appears near the list edge, or right-clicking an existing member and inserting a shape. Clicking the insertion triangle and right-clicking to insert a shape both use the User.msvSDListItemMaster
cell to determine what shape to add to the list. The name of the master is placed in quotes inside a USE()
function (for example, USE("List member master")
). If no shape is specified in User.msvSDListItemMaster, Visio will duplicate an adjacent shape in the list when inserting the shape.
It is also possible to automatically populate the list with some member shapes when the list is first dropped on the page. To do this, put the following formula in the EventDrop cell of the list, repeating the DOCMD(2270)
once for each member to be added:
IF(LISTMEMBERCOUNT()=0,DOCMD(2270)+DOCMD(2270)+DOCMD(2270),0)
2270
is the command for inserting before an item in a list (visUiCmds.visCmdListInsertBefore
). It is also possible to use 2271
, the command for inserting after an item in a list (visUiCmds.visCmdListInsertAfter
).
问题是2270
号。不知道为什么不行;然而,当我在 UML Stencil 的 Class Master Shape 的 "Events" 部分检查上述单元格时,我看到 已经使用 2499
而不是 2270
. 因此,我在公式中使用了该数字,并且有效。如果 User.msvSDListItemMaster[Index]
行有多个形状,我必须为形状 1 之后的每个形状添加 +DOCMD(2499)
。
第三个问题的答案:
第一题的问题解决了,本题也就解决了
第四题答案:
如果第一个问题解决了,这个问题也就解决了。正如here and here中提到的:
Controlling List Membership
Lists have their own cells to govern list membership. Use the User.msvSDListRequiredCategories
and User.msvSDListExcludedCategories
cells to restrict what shapes can become list members. Because lists are also containers, it is possible for shapes to become container members of the list. The standard User.msvSDContainerRequiredCategories
and User.msvSDContainerExcludedCategories
cells determine this behavior. By default, Visio will attempt to add a shape to a list as a list member, but if that fails it may try to add it as a container member. The difference between a list member and a container member is that only list members will be arranged by the list and affect its size. Shape designers should manage both sets of membership cells to ensure the right results.
我们最好同时使用User.msvSDListRequiredCategories
和User.msvSDContainerRequiredCategories
行获得最佳效率.
第 5 个问题的答案:
第一题的问题解决了,本题也就解决了
第 6 个(最终)问题的答案:
Custom Lists
Any shape that has a value of "List"
for the User.msvStructureType
cell is treated by Visio as a list. A list orders and arranges its member shapes automatically. Note that lists are also considered to be containers, and they have similar capabilities such as automatically moving, copying, or deleting member shapes. All of the previously mentioned container cells apply to list shapes.
Table 1. ShapeSheet container properties
User.msvSDContainerMargin
The distance between the container boundary and member shapes.
User.msvSDContainerResize
The automatic-resize behavior for the shape:
0 = No automatic resize.
1 = Expand as needed.
2 = Always fit to contents.
User.msvSDContainerStyle
A one-based index value for the current visual style of the container.
User.msvSDContainerStyleCount
The total number of visual styles that the container supports.
User.msvSDHeadingStyle
A one-based index value for the current visual style of the container heading.
User.msvSDHeadingStyleCount
The total number of visual styles that the container heading supports.
User.msvSDContainerLocked
A Boolean value that prevents membership changes in the container.
User.msvSDContainerRequiredCategories
A semicolon-delimited list of category names. Other shapes must have at least one matching name to be allowed as container members.
User.msvSDContainerExcludedCategories
A semicolon-delimited list of category names. Other shapes with at least one matching name are disallowed as container members.
User.msvSDContainerNoHighlight
A Boolean value that suppresses the container highlighting when member shapes are selected or added to the container.
User.msvSDContainerNoRibbon
A Boolean value that hides the Container Tools contextual tab in the ribbon for this container.
User.msvSDContainerHeadingEdge
A string that designates the location of the interior of the container from the perspective of the container heading. Must be "Left", "Right", "Top", or "Bottom".
User.msvSDMembersOnHiddenLayer
A Boolean value that determines whether Visio severs container relationships when the container or member is placed on a hidden layer. If True, Visio allows relationships to exist on the hidden layer. If False, Visio severs the relationships.
Objective:
首先,我应该说一下我想做什么,然后我会在接下来描述我为实现我的目标所做的事情(描述)部分.
我想从图表部件部分的普通容器创建一个自定义列表主形状插入功能区选项卡。然后,我想创建 另一个可以使用 作为 Created Custom List Master Shape[= 的成员形状的 Master Shape 218=].
换句话说,我想将我创建的主控形状添加到我的自定义列表主控形状,如附加成员和分隔符主形状到UML模板的Class主形状。
所以,我在实现我的目标时遇到了一些问题,我在接下来的部分中描述了这些问题。
描述:
我在 "Visio Stencil (.vssx)" 文件中创建了一些 新的主控形状,如下所示:
图 1 - 使用主控形状新建主控形状
- 属性主控形状(绿框):从UML的成员主控形状创建Class模板(蓝框).
- Object Master Shape(红框): 从 Diagram Parts 部分的 Plain Container 创建在功能区的“插入”选项卡中。
创建 属性 Master Shape 用作对象主形状中的成员形状,就像成员主形状在 UML 的 Class 主形状中使用一样模具.
图 2 - Class 主形状及其初始成员
从成员主形状创建的属性主形状已更改如下:
我添加了一个形状数据(图3)
图 3 - "Shape Data" 属性 Master Shape 的对话框
我在里面添加了一个Data Graphic Item(图4)
图 4 - 属性 Master Shape
的 "Data Graphic" 和 "Data Graphic Item" 对话框
我改了"User.MemberName"公式在ShapeSheetwindow的User-defined cells'section如下(图5):
=MID(SUBSTITUTE(TRIM(SHAPETEXT(TheText)),"[",""),1,FIND(" ",SUBSTITUTE(TRIM(SHAPETEXT(TheText)),"[",""))-1)
而不是:
=SHAPETEXT(TheText)
图 5 - 属性 主图形的 "ShapeSheet" window
从 Plain Container 创建的 Object Master Shape 已更改如下:
我更改了 ShapeSheet 用户定义单元格和事件部分中单元格的内容 window 如图6:
图 6 - ShapeSheet 的用户定义单元格和事件部分中的单元格 window 更改内容后
而不是:
图 7 - ShapeSheet 的用户定义单元格和事件部分中的单元格 window 在更改其内容之前
问题:
第一个问题:
为什么在将 it/them 添加到实例后,属性 Master Shape 的“t/aren”实例没有正确排列和放置Object Master Shape 喜欢将 Member Master Shape 的实例添加到 UML Stencil 的 Class Master Shape 的实例(图 8)?
图 8 - 比较 Object Master Shape 的一个实例和 属性 Master Shape 的一个实例与 UML Stencil 的 Class Master Shape 的实例和它的初始成员
第二题:
为什么 Object Master Shape 的实例在将 it/them 附加到页面后添加其初始成员 就像添加初始成员一样在将 UML 模板的 Class Master Shape 的实例添加到页面后(图 9)?
图 9 - 比较 Object Master Shape 的实例与 UML Stencil 的 Class Master Shape 的实例
我添加了以下公式来实现此 objective; 但是,我认为它不起作用:
=IF(LISTMEMBERCOUNT()=0,DOCMD(2270),0)
第三题:
为什么不在 Object Master Shape 的实例中显示一个 Bar 来插入 属性 Master Shape 的实例,就像显示一样在 UML 模板的 Class Master Shape 实例中的 Bar 插入其成员(图 10)?
图 10 - 比较 Object Master Shape 的实例与 Class UML Stencil 的 Master Shape 的实例以显示用于插入相关成员的栏
第四题:
为什么对象主形状的实例接受所有主形状的实例,除了 属性 主形状的实例,而不是只接受 UML 模板的成员和分隔符主形状实例的 Class 主形状实例(图 11) )?
图 11 - 将接受所有主形状实例的对象主形状实例与仅接受 UML 模板的 Class 主形状实例进行比较UML 模板的成员和分隔符主形状的实例
我已经为"User.msvSDListItemMaster"设置了=USE("Property")
167=]ShapeSheet 的用户定义单元格部分 window; 但是,我认为它不起作用。
第五题:
为什么't/aren不显示用于将 属性 主控形状的添加实例上的成员插入对象实例的选项Master Shape 喜欢将 UML Stencil 的 Member 和 Separator Master Shapes 的实例附加到 UML Stencil 的 Class Master Shape 的实例(图 12)?
图 12 - 比较 Object Master Shape 的一个实例和 属性 Master Shape 的一个实例与 UML Stencil 的 Class Master Shape 的实例和its Members 用于在添加的成员上显示插入成员的选项
第 6(最终)问题:
当我将 its/their 主对象更改为列表时,为什么对象主形状的实例表现得像容器?
第一个问题的答案:
这个问题总是因为没有注意“类别”这个词。在大多数情况下,人们不会注意这个词并使用“形状大师名称”而不是“形状类别”;但是,它们彼此不同。
在我的例子中,我被输入 形状主名称 (Property
) for User.msvSDContainerRequiredCategories
(以分号分隔的类别名称列表。其他形状必须至少有一个匹配的名称才能作为容器成员。) 和 User.msvSDListRequiredCategories
(以分号分隔的类别名称列表。其他形状必须至少有一个匹配名称才能被允许作为列表成员。)而不是 形状类别 (User.msvShapeCategories = Member
).
图 1 - 比较“形状主名称”与“形状类别”
第二题答案:
为了解决这个问题,我们必须注意两件事:
首先,我们必须添加我们想要在实例化主形状后自动添加的形状。因此,我们必须为每个形状添加行我们要添加名称 User.msvSDListItemMaster[Index]
(主形状的名称或 UniqueID 以创建插入命令的实例。该值必须放在 USE() 函数中。).
如您所见,我只想添加一个形状。因此,我必须将 User.msvSDListItemMaster
行的名称更改为 User.msvSDListItemMaster1
。 如果我想在实例化时添加更多形状,我必须添加另一行,如 User.msvSDListItemMaster2
、User.msvSDListItemMaster3
等等。
第二件事也是最后一件事,我们必须在 "EventDrop" 单元格 "Events" 中添加一个公式] 部分。 如您所见,我已将其添加到我的自定义列表形状中,如 here and here:
中所述Specifying an Insertion Shape
There are several ways to add a shape to a list: dragging and dropping the shape, clicking the blue insertion triangle that appears near the list edge, or right-clicking an existing member and inserting a shape. Clicking the insertion triangle and right-clicking to insert a shape both use the
User.msvSDListItemMaster
cell to determine what shape to add to the list. The name of the master is placed in quotes inside aUSE()
function (for example,USE("List member master")
). If no shape is specified in User.msvSDListItemMaster, Visio will duplicate an adjacent shape in the list when inserting the shape.It is also possible to automatically populate the list with some member shapes when the list is first dropped on the page. To do this, put the following formula in the EventDrop cell of the list, repeating the
DOCMD(2270)
once for each member to be added:
IF(LISTMEMBERCOUNT()=0,DOCMD(2270)+DOCMD(2270)+DOCMD(2270),0)
2270
is the command for inserting before an item in a list (visUiCmds.visCmdListInsertBefore
). It is also possible to use2271
, the command for inserting after an item in a list (visUiCmds.visCmdListInsertAfter
).
问题是2270
号。不知道为什么不行;然而,当我在 UML Stencil 的 Class Master Shape 的 "Events" 部分检查上述单元格时,我看到 已经使用 2499
而不是 2270
. 因此,我在公式中使用了该数字,并且有效。如果 User.msvSDListItemMaster[Index]
行有多个形状,我必须为形状 1 之后的每个形状添加 +DOCMD(2499)
。
第三个问题的答案:
第一题的问题解决了,本题也就解决了
第四题答案:
如果第一个问题解决了,这个问题也就解决了。正如here and here中提到的:
Controlling List Membership
Lists have their own cells to govern list membership. Use the
User.msvSDListRequiredCategories
andUser.msvSDListExcludedCategories
cells to restrict what shapes can become list members. Because lists are also containers, it is possible for shapes to become container members of the list. The standardUser.msvSDContainerRequiredCategories
andUser.msvSDContainerExcludedCategories
cells determine this behavior. By default, Visio will attempt to add a shape to a list as a list member, but if that fails it may try to add it as a container member. The difference between a list member and a container member is that only list members will be arranged by the list and affect its size. Shape designers should manage both sets of membership cells to ensure the right results.
我们最好同时使用User.msvSDListRequiredCategories
和User.msvSDContainerRequiredCategories
行获得最佳效率.
第 5 个问题的答案:
第一题的问题解决了,本题也就解决了
第 6 个(最终)问题的答案:
Custom Lists
Any shape that has a value of
"List"
for theUser.msvStructureType
cell is treated by Visio as a list. A list orders and arranges its member shapes automatically. Note that lists are also considered to be containers, and they have similar capabilities such as automatically moving, copying, or deleting member shapes. All of the previously mentioned container cells apply to list shapes.Table 1. ShapeSheet container properties
User.msvSDContainerMargin
The distance between the container boundary and member shapes.
User.msvSDContainerResize
The automatic-resize behavior for the shape:
0 = No automatic resize.
1 = Expand as needed.
2 = Always fit to contents.
User.msvSDContainerStyle
A one-based index value for the current visual style of the container.
User.msvSDContainerStyleCount
The total number of visual styles that the container supports.
User.msvSDHeadingStyle
A one-based index value for the current visual style of the container heading.
User.msvSDHeadingStyleCount
The total number of visual styles that the container heading supports.
User.msvSDContainerLocked
A Boolean value that prevents membership changes in the container.
User.msvSDContainerRequiredCategories
A semicolon-delimited list of category names. Other shapes must have at least one matching name to be allowed as container members.
User.msvSDContainerExcludedCategories
A semicolon-delimited list of category names. Other shapes with at least one matching name are disallowed as container members.
User.msvSDContainerNoHighlight
A Boolean value that suppresses the container highlighting when member shapes are selected or added to the container.
User.msvSDContainerNoRibbon
A Boolean value that hides the Container Tools contextual tab in the ribbon for this container.
User.msvSDContainerHeadingEdge
A string that designates the location of the interior of the container from the perspective of the container heading. Must be "Left", "Right", "Top", or "Bottom".
User.msvSDMembersOnHiddenLayer
A Boolean value that determines whether Visio severs container relationships when the container or member is placed on a hidden layer. If True, Visio allows relationships to exist on the hidden layer. If False, Visio severs the relationships.