Форум пользователей Visio

Форум по вопросам применения и программирования в Visio
Текущее время: 28 мар 2024, 21:01

Часовой пояс: UTC + 3 часа [ Летнее время ]


Правила форума


При размещении файлов предпочтительным является формат vsd (а не vsdx/vsdm)
Размещая ваши вложения на форуме не используйте имена файлов содержащих кириллицу, в противном случае файл будет иметь имя .<расширение файла> !

Для форматирования ваших сообщений используйте BBCodes, описание используемых на форуме BBCodes.



Начать новую тему Ответить на тему  [ 1 сообщение ] 
Автор Сообщение
 Заголовок сообщения: Определение взаимосвязи Документа и Библиотеки
СообщениеДобавлено: 26 май 2014, 16:51 
Не в сети
Новичок

Зарегистрирован: 21 май 2014, 11:11
Сообщений: 45
Использую Visio c: 2005
Очков репутации: 3

Добавить очки репутацииУменьшить очки репутации
Обозначенный вопрос был мной озвучен в разделе "Программирование", выкладываю здесь оформленный и опробованный код. Вдруг кому понадобится. В своей практике использую второе решение выполняя действия по "Включению" и "Отключению" библиотеки в зависимости от того какое окно активно. Это позволяет не вмешиваться в работу файлов не имеющих отношения к моей библиотеке.
ВАЖНО: для документа указывается имя файла без расширения, а для библиотеки название, оно задается в свойствах и ничего общего с именем файла не имеет.

Задача: определить подключение к документу определенной библиотеки

Решение №1: здесь проверяется именно связь документа и библиотеки
Код:
Sub Test01()
    If IsDocumentConnectVSS(Application.Windows, "Имя документа без расширения", "Название библиотеки, не файла!") Then
        ' Код который необходимо выполнить, если для указанного документа подключена указанная библиотека
    End If
End Sub

Function IsDocumentConnectVSS(ByVal AppWindows As IVWindows, DocName As String, VSSCaption As String)
    IsDocumentConnectVSS = False
    ' Перебираем все подчиненные окна(в том числе документы) для указанного документа в поиске подключенной библиотеки
    For Each Wnd In AppWindows.ItemEx(DocName).Windows
        ' Проверяем подключена ли библиотека к документу
        If Wnd.Caption = VSSCaption Then
            IsDocumentConnectVSS = True
            Exit For
        End If
    Next Wnd
End Function

Решение №2: в моей ситуации проверку было удобней производить при смене окна, для этого можно применить следующий код
Код:
Public WithEvents MyApplication As Visio.Application

Private Sub MyApplication_ViewChanged(ByVal Window As IVWindow)
    If IsConnectVSS(Window, "Название библиотеки, не файла!") Then
        ' Код который необходимо выполнить, если активно окно документа в котором подключена библиотека
    Else
        ' Код который необходимо выполнить, если активно окно любого другого документа не имеющего отношения к библиотеке
    End If
End Sub

Function IsWindowConnectVSS(ByVal Window As IVWindow, VSSCaption As String) As Boolean
    IsConnectVSS = False
    ' Перебираем все подчиненные окна(в том числе документы) в поиске подключенной библиотеки
    For Each Wnd In Window.Windows
        ' Проверяем подключена ли библиотека к документу
        If Wnd.Caption = VSSCaption Then
            IsConnectVSS = True
            Exit For
        End If
    Next Wnd
End Function


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ 1 сообщение ] 

Часовой пояс: UTC + 3 часа [ Летнее время ]



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3


Вы можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Вы можете создать форум бесплатно PHPBB3 на Getbb.Ru, Также возможно сделать готовый форум PHPBB2 на Mybb2.ru
Русская поддержка phpBB