Перетащите в группу - MS Visio VBA - PullRequest
0 голосов
/ 08 сентября 2018

Я использую Visio в качестве инструмента моделирования через макросы VBA и пользовательские формы. Фигуры моделей могут иметь формы того же типа, что и «потомок», который затем может иметь потомок, ...

В настоящее время я могу добавлять фигуры «верхнего уровня» только путем перетаскивания из трафарета. Я использую событие ShapeAdded, чтобы открыть форму пользователя и позволить пользователю ввести данные формы.

Фигуры, у которых есть родительский элемент, могут быть добавлены только через отдельную пользовательскую форму, которая берет данные формы и родительский объект из списка всех объектов в модели. Затем он вызывает функцию, которая перебирает все фигуры на странице, пока не находит нужный «родитель», а затем использует метод Drop родительского объекта, чтобы удалить новую фигуру в правильном положении. Затем форма также добавляется в группу родительской формы.

Можно ли как-нибудь реализовать это с помощью перетаскивания? То есть можно узнать через VBA, на какой «Родительской» форме пользователь поместил новую фигуру, чтобы я мог сгруппировать их программно? (Также мне нужно, чтобы информация об отношениях родитель-потомок была синхронизирована с базой данных, поэтому мне нужно получить родительский объект формы для доступа к его данным формы).

Я хочу это, потому что это позволяет пользователю напрямую выбирать нужную позицию внутри родительской фигуры, и более интуитивно понятно использовать перетаскивание с трафарета, чем с помощью пользовательской формы.

Единственный вариант, о котором я мог подумать, - это открыть пользовательскую форму после удаления формы и получить родительскую информацию от пользователя, затем найти родительскую форму и добавить новую форму в ее группу -> это зависит от пользователя выберите тот же объект из списка, на котором он отбрасывает фигуру, что может привести к проблемам. Я хочу автоматически определять форму, которая находится ниже вновь выпавшей формы, и позволять пользователю только вводить данные новой формы.

1 Ответ

0 голосов
/ 08 сентября 2018

Обычно вы используете контейнеры для такого рода функций в Visio, а не в группах. Контейнеры гораздо более дружественны к функциям перетаскивания, таким как описанная вами (например, когда пользователь наводит на фигуру какой-либо контейнер, он выделяется, указывая пользователю, что он доступен как целевой объект перетаскивания). Кроме того, контейнеры предоставляют специализированный API, который позволяет перечислять фигуры в контейнере, добавлять / удалять и фигуры в / из контейнера, а также изменять размеры объектов.

Проверьте это учебное видео: https://support.office.com/en-us/article/video-organize-shapes-in-containers-75e42442-038a-48f6-9206-b029266cbfc7

Или это сообщение в блоге Microsoft Visio: https://blogs.msdn.microsoft.com/visio/2009/08/25/organizing-diagrams-with-containers/

Вот краткий обзор API: https://developer.microsoft.com/en-us/visio/blogs/container-list-and-callout-api-in-visio-2010/

...