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

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

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


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


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

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



Начать новую тему Ответить на тему  [ Сообщений: 11 ] 
Автор Сообщение
 Заголовок сообщения: Выделенный шейп
СообщениеДобавлено: 01 дек 2015, 05:30 
Не в сети

Зарегистрирован: 19 ноя 2015, 06:12
Сообщений: 12
Использую Visio c: 2013
Очков репутации: 3

Добавить очки репутацииУменьшить очки репутации
Здравствуйте!
В макросе идет перебор определенных шейпов, как узнать выделен шейп на листе или нет.
Производить дополнительный перебор всех выделенных шейпов на листе до совпадения ID, или есть другой способ?


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Выделенный шейп
СообщениеДобавлено: 01 дек 2015, 06:15 
Не в сети
Content manager
Content manager
Аватара пользователя

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 5043
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Интеграция системных интеграторов
Должность: Дизайнер по оформлению документации
Уровнь квалификации: Форматирование документов MS Word
Не совсем понял задачу. Критерием поиска шейпа, также может быть имя шейпа или его свойство: user-defined cell или shape data (custom property).

_________________
База знаний ShapeSheet
Мой Youtube-канал @surrogate-tm
Мои трафареты


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Выделенный шейп
СообщениеДобавлено: 01 дек 2015, 06:30 
Не в сети

Зарегистрирован: 19 ноя 2015, 06:12
Сообщений: 12
Использую Visio c: 2013
Очков репутации: 3

Добавить очки репутацииУменьшить очки репутации
Выделяется определенный шейп далее запускается макрос который выделяет зависимые шейпы по ссылкам пользовательской ячейки:
Код:
Sub ïåðåáîð_çàâèñèìûõ_øåéïîâ()

'Dim id_i As Integer
Dim sh1  As Visio.Shape
Dim vsoCell As Visio.Cell
Dim vsoSelection As Visio.Selection

Set vsoSelection = ActiveWindow.Selection
Set sh1 = vsoSelection(1)
Set vsoCell = sh1.CellsSRC(visSectionUser, 2, visUserValue)
Set myAL = CreateObject("System.Collections.ArrayList") 'êîëëåêöèÿ çàâèñèìûõ øåéïîâ
On Error Resume Next
myAL.Add (sh1.ID)
'MsgBox myAL.Count
While myAL.Count > 0
   For Each id_i In myAL
   Set vsoCell = ActiveWindow.Page.Shapes.ItemFromID(id_i).CellsSRC(visSectionUser, 2, visUserValue)
     
          If UBound(vsoCell.Precedents) > 0 Then
          For j = LBound(vsoCell.Precedents) To UBound(vsoCell.Precedents)
          'If t.Shape Then
          Next
         
      '''Ïåðåáîð ïî çàâèñèìûì ÿ÷åéêàì
      For Each t In vsoCell.Dependents
      myAL.Add (t.Shape.ID)
      ActiveWindow.Select t.Shape, visSelect
      Set vsoCell = t.Shape.CellsSRC(visSectionUser, 2, visUserValue)
      Next
      '''''''''''''''''''''''''''''''
      myAL.Remove (id_i) 'óäàëÿåì èç êîëëåêöèè
   Next
Wend

End Sub

В этом месте необходимо проверить селектирован ли шейп:
Код:
          If UBound(vsoCell.Precedents) > 0 Then
          For j = LBound(vsoCell.Precedents) To UBound(vsoCell.Precedents)
          'If t.Shape Then
          Next


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Выделенный шейп
СообщениеДобавлено: 01 дек 2015, 06:38 
Не в сети
Content manager
Content manager
Аватара пользователя

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 5043
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Интеграция системных интеграторов
Должность: Дизайнер по оформлению документации
Уровнь квалификации: Форматирование документов MS Word
я правильно понимаю задачу в комплексе:
1. где-то программно выделяется несколько шейпов на листе (зачем-то)
2. у первого из выделенных шейпов проверить, есть ли в секции user ссылки на другие выделенные шейпы ?

_________________
База знаний ShapeSheet
Мой Youtube-канал @surrogate-tm
Мои трафареты


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Выделенный шейп
СообщениеДобавлено: 01 дек 2015, 07:12 
Не в сети

Зарегистрирован: 19 ноя 2015, 06:12
Сообщений: 12
Использую Visio c: 2013
Очков репутации: 3

Добавить очки репутацииУменьшить очки репутации
Вопрос простой: допустим я выделил шейпы №1,2,3,4
Програмно необходимо проверить что шейп №1 выделен, а шейп №5 нет.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Выделенный шейп
СообщениеДобавлено: 01 дек 2015, 07:50 
Не в сети
Новичок

Зарегистрирован: 01 янв 2010, 05:46
Сообщений: 45
Откуда: ЕАО, Россия
Использую Visio c: 2010
Очков репутации: 1

Добавить очки репутацииУменьшить очки репутации
Станислав, откуда дровишки?
Я имею в виду вышеприведённый код.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Выделенный шейп
СообщениеДобавлено: 01 дек 2015, 08:06 
Не в сети

Зарегистрирован: 19 ноя 2015, 06:12
Сообщений: 12
Использую Visio c: 2013
Очков репутации: 3

Добавить очки репутацииУменьшить очки репутации
Сам придумываю (есть определенный опыт в Excel), но данный макрос необходимо доработать.
Варианты есть но они мне не нравятся, думаю тут подскажут.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Выделенный шейп
СообщениеДобавлено: 01 дек 2015, 08:25 
Не в сети
Content manager
Content manager
Аватара пользователя

Зарегистрирован: 02 окт 2009, 01:01
Сообщений: 5043
Откуда: оттуда
Использую Visio c: 1998
Отрасль: Интеграция системных интеграторов
Должность: Дизайнер по оформлению документации
Уровнь квалификации: Форматирование документов MS Word
у меня тоже код не работает !
то while не нравится , то пишет что последний next лишний.

_________________
База знаний ShapeSheet
Мой Youtube-канал @surrogate-tm
Мои трафареты


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Выделенный шейп
СообщениеДобавлено: 01 дек 2015, 09:04 
Не в сети

Зарегистрирован: 19 ноя 2015, 06:12
Сообщений: 12
Использую Visio c: 2013
Очков репутации: 3

Добавить очки репутацииУменьшить очки репутации
эти строчки уберите:
If UBound(vsoCell.Precedents) > 0 Then
For j = LBound(vsoCell.Precedents) To UBound(vsoCell.Precedents)
'If t.Shape Then
Next
эта часть еще не дописана


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Выделенный шейп
СообщениеДобавлено: 01 дек 2015, 10:38 
Не в сети
Ветеран

Зарегистрирован: 21 окт 2011, 12:01
Сообщений: 939
Откуда: г. Екатеринбург
Использую Visio c: 2011
Очков репутации: 127

Добавить очки репутацииУменьшить очки репутации
Станислав писал(а):
Производить дополнительный перебор всех выделенных шейпов на листе до совпадения ID, или есть другой способ?

на сколько я помню у самого шейпа к сожалению нет свойства типа "IsSelected". я когда то сталкивался с такой проблемой. только перебор :(
для быстроты проверки я бы сначала добавил в коллекцию все ID выделенных шейпов с ключом = ID. и потом по ключу бы и проверял входит ли шейп в коллекцию селектированных: обращение в коллекцию по ключу - ошибка - значит не селектирован. и наоборот.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Выделенный шейп
СообщениеДобавлено: 02 дек 2015, 03:22 
Не в сети

Зарегистрирован: 19 ноя 2015, 06:12
Сообщений: 12
Использую Visio c: 2013
Очков репутации: 3

Добавить очки репутацииУменьшить очки репутации
решил все таки задачу!: можно подсчитать количество выделенных шейпов (ActiveWindow.Selection.Count) затем тот шейп который необходимо проверить убираем выделение (ActiveWindow.Select j.Shape, visDeselect), если после этого Selection.Count изменилось следовательно он входил в коллекцию селектированных...


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

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



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

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


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

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