Несмотря на наличие в 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 пытается добавить фигуру в список как участник списка, но если это не удается, фигура может быть добавлена как участник контейнера. Разница между участником списка и участником контейнера заключается в том, что только участники списка могут быть упорядочены списком и влияют на его размер. Для достижения нужного результата необходимо эффективно управлять обоими наборами ячеек членства.