【问题标题】:New Created Custom List Shape Doesn't Work in Microsoft Visio 2013 x64新创建的自定义列表形状在 Microsoft Visio 2013 x64 中不起作用
【发布时间】:2015-05-06 19:31:13
【问题描述】:

目标:

首先,我应该说我想做什么,然后我将在下一个(描述)部分描述我为实现我的目标所做的工作。 em>

我想从功能区“插入”选项卡中的图表部件部分的普通容器创建一个自定义列表主形状。然后,我想创建另一个主形状,它可以将用作创建的自定义列表主形状的成员形状。

换句话说,我想将我创建的主形状添加到我的自定义列表主形状,就像附加成员和分隔符主形状 到 UML 模板的 Class Master Shape

因此,我在实现我在接下来的部分中描述的目标方面遇到了一些问题。


说明:

我在“Visio Stencil (.vssx)”文件中创建了一些新的主形状,如下所示:

图 1 - 新创建的主控形状和使用过的主控形状

  1. Property Master Shape(绿框):UML 类模板的成员主形状(蓝框)创建。
  2. 对象主形状(红框):是从功能区插入选项卡中图表部件部分的普通容器创建的。

创建属性主形状以用作对象主形状中的成员形状,就像在 UML 模板的类主形状中使用的成员主形状一样。

图 2 - 类主形状及其初始成员

Member Master Shape创建的Property Master Shape已更改如下:

  • 我向其中添加了一个形状数据(图 3)。

    图 3 - Property Master Shape 的“Shape Data”对话框

  • 我添加了 一个数据图形项(图 4)。

    图 4 - Property Master Shape 的“数据图形”和“数据图形项”对话框

  • 我更改了用户定义单元格部分中的“User.MemberName”公式ShapeSheet窗口如下(图5):

    =MID(SUBSTITUTE(TRIM(SHAPETEXT(TheText)),"[",""),1,FIND(" ",SUBSTITUTE(TRIM(SHAPETEXT(TheText)),"[",""))-1)

    代替:

    =SHAPETEXT(TheText)

    图 5 - Property Master Shape 的“ShapeSheet”窗口

Plain Container 创建的 Object Master Shape 已更改如下:

  • 我更改了 ShapeSheet 窗口的用户定义的单元格和事件部分中单元格的内容,如图 6:

    图 6 - 更改内容后 ShapeSheet 窗口的用户定义单元格和事件部分中的单元格

    代替:

    图 7 - ShapeSheet 窗口的用户定义单元格和事件部分中的单元格在更改其内容之前


问题:

第一个问题:

为什么属性主形状的实例在添加到对象主形状的实例后没有/不是正确排列和放置就像添加实例一样(s) Member Master Shape 到 UML Stencil 的 Class Master Shape 的实例(图 8)?

图 8 - 将 Object Master Shape 的一个实例和 Property Master Shape 的一个实例与 UML Stencil 及其初始成员的 Class Master Shape 的一个实例进行比较

第二个问题:

为什么对象主形状的实例在将其/它们附加到页面后不添加其初始成员,就像在添加实例后添加初始成员一样UML Stencil 的 Class Master Shape 到页面(图 9)?

图 9 - 将 Object Master Shape 的一个实例与 UML Stencil 的 Class Master Shape 的一个实例进行比较

我添加了以下公式来实现这个目标;但是,我认为它不起作用:

=IF(LISTMEMBERCOUNT()=0,DOCMD(2270),0)

第三个问题:

为什么没有在 Object Master Shape 的实例中显示 Bar 以插入 Property Master Shape 的实例,就像在的实例中显示 Bar UML Stencil 的 Class Master Shape 以插入其成员(图 10)?

图 10 - 将 Object Master Shape 的实例与 UML Stencil 的 Class Master Shape 的实例进行比较,以显示 Bar 以插入相关的成员

第四个问题:

为什么对象主形状的实例接受所有主形状的实例,除了属性主形状的实例,而不是实例只接受 UML 模板的成员和分隔符主形状的实例的 UML 模板的类主形状(图 11)?

图 11 - 将接受所有主形状实例的对象主形状实例与仅接受成员实例的 UML 模板的类主形状实例进行比较和 UML 模板的分隔符主形状

我在 用户定义的单元格部分中为 "User.msvSDListItemMaster" 设置了 =USE("Property") ShapeSheet 窗口; 但是,我认为它不起作用。

第五个问题:

为什么不显示用于将属性主形状的添加实例上的成员插入到对象主形状的实例中的选项,如附加实例( s) 将 UML 模板的成员和分隔符主形状转换为 UML 模板的类主形状的实例(图 12)?

图 12 - 将 Object Master Shape 的一个实例和 Property Master Shape 的一个实例与 UML Stencil 及其成员的 Class Master Shape 的一个实例进行比较,以显示添加的插入成员的选项成员

第 6 个(最终)问题:

为什么当我将其主对象更改为列表时,对象主形状的实例的行为和行为类似于容器?

【问题讨论】:

    标签: shape visio shapes stencils shapesheet


    【解决方案1】:

    第一个问题的答案:

    这个问题一直是因为不注意“类别”这个词。在大多数情况下,人们不会注意这个词,而是使用 “形状主名称” 而不是 “形状类别”;但是,它们彼此不同。

    在我的例子中,我被输入 Shape Master Name (Property)User.msvSDContainerRequiredCategories (A分号分隔的类别名称列表。其他形状必须至少有一个匹配的名称才能被允许作为容器成员。)User.msvSDListRequiredCategories (分号分隔的列表类别名称。其他形状必须至少有一个匹配名称才能作为列表成员。) 而不是 形状类别(User.msvShapeCategories = Member)。 p>

    图 1 - 比较“形状主名称”与“形状类别”


    第二个问题的答案:

    为了解决这个问题,我们必须注意两件事

    首先,我们必须在实例化主形状后自动添加我们想要添加的形状。因此,我们必须为每个想要添加的形状添加行名称为User.msvSDListItemMaster[Index] (用于为插入命令创建实例的主控形状的名称或 UniqueID。该值必须放在 USE() 函数中。)

    如您所见,我只想添加一个形状。所以,我必须将User.msvSDListItemMaster 行的名称更改为User.msvSDListItemMaster1如果我想在实例化时添加更多形状,我必须添加另一行,如User.msvSDListItemMaster2User.msvSDListItemMaster3 等。

    第二件事,也是最后一件事,我们必须在 "Events" 部分的 "EventDrop" 单元格中添加一个公式。 你可以看,我已将它添加到我的自定义列表形状中,正如 herehere 中提到的那样:

    指定插入形状

    有几种方法可以将形状添加到列表中:拖放形状、单击列表边缘附近出现的蓝色插入三角形,或右键单击现有成员并插入形状单击插入三角形和右键单击插入形状都使用User.msvSDListItemMaster 单元格来确定要添加到列表中的形状。 主人的名字放在 USE() 函数中的引号(例如,USE("List member master"))。 如果 User.msvSDListItemMaster 中未指定形状,Visio 将复制列表中的相邻形状插入形状时。

    当列表第一次放到页面上时,还可以使用一些成员形状自动填充列表。为此,请将以下公式放入列表的 EventDrop 单元格中,为要添加的每个成员重复一次 DOCMD(2270)

    IF(LISTMEMBERCOUNT()=0,DOCMD(2270)+DOCMD(2270)+DOCMD(2270),0)

    2270 是用于在列表中的项目之前插入的命令 (visUiCmds.visCmdListInsertBefore)。也可以使用 2271,该命令用于在列表中的项目之后插入 (visUiCmds.visCmdListInsertAfter)。

    问题出在2270 号码上。 我不知道为什么它不起作用;但是,当我检查 UML Stencil 的 Class Master Shape 的 "Events" 部分中的上述单元格时,我看到 已被使用 2499 strong> 而不是 2270 所以,我在公式中使用了这个数字,它起作用了。如果User.msvSDListItemMaster[Index] 行有多个形状,我必须在形状 1 之后为每个形状添加 +DOCMD(2499)


    第三个问题的答案:

    如果第一题的问题解决了,这个问题就解决了。


    第四个问题的答案:

    如果第一个问题的问题解决了,这个问题就解决了。正如herehere中提到的:

    控制列表成员

    列表有自己的单元格来管理列表成员资格。 使用User.msvSDListRequiredCategoriesUser.msvSDListExcludedCategories 单元格来限制哪些形状可以成为列表成员。 因为列表也是容器,所以形状可以成为列表的容器成员。标准的User.msvSDContainerRequiredCategoriesUser.msvSDContainerExcludedCategories 单元格决定了这种行为。 默认情况下,Visio 会尝试将形状作为列表成员添加到列表中,但如果失败,它可能会尝试将其添加为一个容器成员。 列表成员和容器成员之间的区别在于,只有列表成员才会按列表排列并影响其大小。形状设计师应该管理两组成员单元格以确保正确的结果。

    最好同时使用 User.msvSDListRequiredCategoriesUser.msvSDContainerRequiredCategories以获得最佳效率


    第五题的答案:

    如果第一题的问题解决了,这个问题就解决了。


    第 6 个(最终)问题的答案:

    答案是(herehere):

    自定义列表

    对于User.msvStructureType 单元格的值为 "List" 的任何形状都被 Visio 视为列表。 列表对其进行排序和排列成员形状自动。 请注意,列表也被视为容器,它们具有类似的功能,例如自动移动、复制或删除成员形状。 前面提到的所有容器单元格都适用列出形状。

    表 1. ShapeSheet 容器属性

    User.msvSDContainerMargin

          The distance between the container boundary and member shapes.
    

    User.msvSDContainerResize

          The automatic-resize behavior for the shape:
    
    • 0 = 不自动调整大小。

    • 1 = 根据需要展开。

    • 2 = 始终适合内容。

    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.
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-26
      • 1970-01-01
      • 2015-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-28
      • 2013-06-04
      相关资源
      最近更新 更多