Для русскоязычных пользователей Visio. Начинающих и профессионалов. Где взять, как сделать, что купить и т.д.

Smart-шейпы

Перечень литературы

10.11.2021  ShapeSheet. Управление видимостью фигур   Kuzin Alexander   Video 

27.03.2020  Extreme Scales in Visio   Chris Roth    

08.03.2020  Creating a Visio shape with an expanding row count   John Goldsmith    

15.01.2020  Visio: Creating a Smart Shape   Morgan Adair    

16.12.2019  Шейп для отображения событий   Геннадий Туманов    

17.11.2019  Смарт-шейп Активы   Геннадий Туманов    

17.04.2014  Creating SmartShapes with the ShapeSheet (part 1) - Introducing the ShapeSheet   Microsoft    

03.02.2012  Easy Music Note Paper with the Smart Staff Shape!   Chris Roth    

21.01.2011  How fonts travel in Visio   John Goldsmith    

24.06.2010  Jump to Any Page With Visio SmartShapes   Chris Roth    

31.05.2010  Playing with the Shape of Data   Chris Roth    

22.07.2009  Why Visio Shape Smarts Makes Your Life Easier   Chris Roth    

27.03.2009  Run Circles Around Your Text With the Circle-text Title SmartShape   Chris Roth    

25.09.2008  Смарт-шейпы   Геннадий Туманов   Из серии статей об автоматизации. Как создавать интеллектуальные шейпы. Рассматриваются практические примеры работы с шейп-листом. 

22.09.2008  A SmartShape is Worth 1000 Symbols   Chris Roth    

14.06.2008  Punish Your Users with (not so) SmartShapes That Misbehave   Chris Roth    

Ответы на вопросы

Фиксированный список в ShapeData и единицы измерения - ошибка конвертирования

Замечено, что в некоторых случаях Visio нежелательно конвертирует фиксированный список в ShapeData. Это происходит,если значение похоже на числовое значение с единицами измерения. Например, значения из списка Prop.fieldValue.Format="25P;13IN" конвертируются в "25 p", "13 in".  

Варианты исправления ситуации: 1. В случаях, когда возможна угроза нежелательного конвертирования, использовать явно текстовый формат. Например, вместо "25P;13IN" использовать """25P"";""13IN""". Тогда в окне ShapeData вместо 25 p будет видно "25P". Если все-таки при чтении данных необходимо получить именно 25P, то использовать формулу =SUBSTITUTE(Prop.Row_1,Chr(34),"") или =MID(Prop.Row_1,2,LEN(Prop.Row_1)-2) В случае SUBSTITUTE предполагается, что сами значения не должны содержать кавычек. Иначе данные будут искажены. 2. Другой вариант - экранировать значения спецсимволом. Например знак "_" в конце значения или (по аналогии с Excel) знак апострофа в начале значения. То есть "25P_;13IN_" или "'25P;'13IN". Соответственно удаление экранирующего символа производить формулой  

=SUBSTITUTE(Prop.Row_1,"_","") или =IF(RIGHT(Prop.Row_1,1)="_",LEFT(Prop.Row_1,LEN(Prop.Row_1)-1),Prop.Row_1) или =IF(LEFT(Prop.Row_1,1)="'",RIGHT(Prop.Row_1,LEN(Prop.Row_1)-1),Prop.Row_1)  

источник: http://visguy.com/vgforum/index.php?topic=8634.msg37648  

Как вычислить факт подключения динамического коннектора

Я пытаюсь заставить динамический коннектор показывать другой цвет, если он не подключен к шейпам обоими концами. Насколько я могу судить, единственное, что изменяется при соединении - это то, что в ячейках BeginX, EndX литеральные значения изменяются на функции. Существует ли функция, которую можно использовать, чтобы отличить функцию от литерала (или есть какой-либо другой способ)?  

Можно использовать EndTrigger/BeginTrigger в секции GlueInfo.  

LineColor=IF(BegTrigger+EndTrigger>=3,2,0)  

Да, вроде бы это работает. Но мой Visio показывает _XFTrigger(Connector!EventXFMod) или _XFTRIGGER(Sheet.17!EventXFMod). Получается, что это как-то превращается в 1/2?  

То, что вы видите - это формулы. Щелкните правой кнопкой на ячейке и выберите "show values". Или нажмите F5 для переключения формула/значение. 

Как задать фиксированное расстояние Connection points на коннекторе

Я пытаюсь сделать смарт-шейп, который автоматически корректируется в зависимости от данных, поступающих из БД. Одна из последних задач - сделать на коннекторе две точки соединения, чтобы одна была на 10 мм от начала коннектора, а вторая - на 10 мм от конца. Проблема в том, что точки соединения не остаются на коннекторе или нарушается расстояние.  

Если у вас Visio 2010 или старше, можно использовать функцию pointalongpath. Только нужна небольшая добавка, потому что эта функция принимает процент от пути, а не абсолютное расстояние. Поэтому нужно 10 мм преобразовать в процент.  

User.Pathlength = Guard(PathLength(Geometry1.Path)+0 mm) User.Percentile = Guard(10 mm/User.Pathlength) Connections.Port1 X = Guard(Pointalongpath(Geometry1.Path,User.Percentile)) Connections.Port1 Y = Guard(Pointalongpath(Geometry1.Path,User.Percentile)) Connections.Port2 X = Guard(Pointalongpath(Geometry1.Path,1-User.Percentile)) Connections.Port2 Y = Guard(Pointalongpath(Geometry1.Path,1-User.Percentile))  

Источник - http://visguy.com/vgforum/index.php?topic=8717