Несмотря на наличие в Visio 2010 множества готовых фигур контейнеров, списков и выносок, любую двумерную фигуру можно использовать в качестве контейнера, списка или выноски. В этом посте мы рассмотрим способы создания собственных фигур структурированных схем - списков.
Любая фигура, для ячейки User.msvStructureType которой задано значение «Список», воспринимается Visio как список. Список служит для автоматического упорядочивания и организации входящих в него фигур. Обратите внимание, что списки также считаются контейнерами и включают сходные возможности, такие как автоматическое перемещение, копирование и удаление фигур-участников. Все упомянутые выше ячейки фигуры «Контейнер» также применяются к фигурам списка. Следующие ячейки таблицы свойств фигуры определяют дополнительные свойства списка.
Название ячейки |
Описание |
User.msvSDListAlignment |
Определяет способ выравнивания фигур-участников списка в списке (0 = «Слева»; 1 = «В центре»; 2 = «Справа» для вертикальных списков; 0 = «Вверху»; 1 = «Посередине»; 2 = «Внизу» для горизонтальных списков). |
User.msvSDListDirection |
Направление, в котором упорядочиваются фигуры-участники в списке (0 = «Слева направо»; 1 = «Справа налево»; 2 = «Сверху вниз»; 3 = «Снизу вверх»). |
User.msvSDListSpacing |
Расстояние между краями участников списка. |
User.msvSDListItemMaster |
Имя или уникальный идентификатор образца фигуры для создания экземпляров в командах вставки. Значение необходимо поместить в функцию USE(). |
User.msvSDListNoReorder |
Логическое значение, которое блокирует изменение порядка участников списка. Чтобы этот параметр вступил в силу, список также должен быть заблокирован с помощью ячейки User.msvSDContainerLocked (значение «Истина»). |
User.msvSDListRequiredCategories |
Список имен категорий, разделяемых точкой с запятой. Другие фигуры должны иметь по крайней мере одно соответствующее значение, чтобы их можно было назначить участниками списка. |
User.msvSDListExcludedCategories |
Список имен категорий, разделяемых точкой с запятой. Другие фигуры, имеющие по крайней мере одно совпадающее имя, запрещается назначать участниками списка. |
Указание фигуры для вставки
Существует несколько способов добавления фигуры в список: перетаскивание фигуры, нажатие синей стрелки вставки, отображаемой возле края списка, или щелчок правой кнопкой мыши текущего участника и вставка фигуры. Функции нажатия стрелки вставки и щелчка правой кнопкой для вставки фигуры используют ячейку User.msvSDListItemMaster для определения типа фигуры, добавляемой в список. Имя фигуры-образца помещается в кавычки внутри функции USE(), например USE("образец участника списка"). Если в ячейке User.msvSDListItemMaster не указаны фигуры, при вставке Visio скопирует смежную ячейку в список.
Кроме того, доступна функция автоматического заполнения списка фигурами-образцами при первоначальном помещении списка на страницу. Для этого в ячейку EventDrop списка необходимо поместить следующую формулу, повторяя DOCMD(2270) для каждого добавляемого участника:
IF(LISTMEMBERCOUNT()=0,DOCMD(2270)+DOCMD(2270)+DOCMD(2270),0)
«2270» — это команда вставки объекта перед элементом в списке (visUiCmds.visCmdListInsertBefore). Также можно использовать команду «2271» для вставки объекта после элемента в списке (visUiCmds.visCmdListInsertAfter).
Управление членством в списке
Для управления членством в списках предусмотрены отдельные ячейки. Ячейки User.msvSDListRequiredCategories и User.msvSDListExcludedCategories служат для ограничения типов фигур, которые могут быть участниками списка. Поскольку списки также являются контейнерами, фигуры могут стать участниками контейнера списка. Этим поведением управляют стандартные ячейки User.msvSDContainerRequiredCategories и User.msvSDContainerExcludedCategories. По умолчанию Visio пытается добавить фигуру в список как участник списка, но если это не удается, фигура может быть добавлена как участник контейнера. Разница между участником списка и участником контейнера заключается в том, что только участники списка могут быть упорядочены списком и влияют на его размер. Для достижения нужного результата необходимо эффективно управлять обоими наборами ячеек членства.