Автоопределение типов подключенных соседей фигур для Microsoft Visio 2013/16 - PullRequest
1 голос
/ 23 июня 2019

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

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

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

Идея состоит в том, чтобы изменить параметры соединителя, чтобы показать правильный тип соединения.

1 Ответ

0 голосов
/ 24 июня 2019

Я создал собственный список основных фигур и поместил его в VSS-файл

Вы действительно должны уже использовать .vssx!

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

Событие для добавленных подключений на этом уровне ThisDocument отсутствует, но на уровне приложения оно есть.
Таким образом, вы можете добавить объект приложения к вашему ThisDocument и прослушать его событие. Это может привести к непредвиденным утечкам памяти, так как он ссылается на своего родителя! Описание здесь
Кто-то может пролить свет на это ...

В коде ThisDocument:

Option Explicit

Private WithEvents vsApp As Visio.Application


Private Sub Document_DocumentOpened(ByVal doc As IVDocument)
    OnStart
End Sub

Private Sub Document_BeforeDocumentClose(ByVal doc As IVDocument)
    OnStop
End Sub

Public Function Kickstart()
    'Call this function to restart in case the program stops
    OnStart
End Function

Private Sub OnStart()
    Set vsApp = Me.Application
End Sub

Private Sub OnStop()
    Set vsApp = Nothing
End Sub


Private Sub vsApp_ConnectionsAdded(ByVal Connects As IVConnects)
   If Not Connects.Document Is Me.DocumentSheet Then Exit Sub 'make sure only to listen to events happening in this document
    Dim connect As connect
    For Each connect In Connects
        Debug.Print "Added Connection: ", connect.FromSheet & " To " & connect.ToSheet
    Next connect
End Sub
Private Sub vsApp_ConnectionsDeleted(ByVal Connects As IVConnects)
   If Not Connects.Document Is Me.DocumentSheet Then Exit Sub 'make sure only to listen to events happening in this document
    Dim connect As connect
    For Each connect In Connects
        Debug.Print "Deleted Connection: ", connect.FromSheet & " To " & connect.ToSheet
    Next connect
End Sub

... и вызов нужной строки из раздела действий на основе типов связанных фигур

Чтобы найти тип соединения / формы, существует множество возможностей. Мой метод перехода - использовать пользовательские ячейки в моих фигурах, чтобы идентифицировать их / проверить, должны ли они вызывать действие. Оттуда вы можете использовать блок выбора дела.

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

Последние два особенно интересны, так как вы можете применить к ним фильтры.

...