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

Форум по вопросам применения и программирования в Visio
Текущее время: 21 июн 2018, 12:26

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


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


При размещении файлов предпочтительным является формат vsd (а не vsdx/vsdm)



Начать новую тему Ответить на тему  [ Сообщений: 13 ] 
Автор Сообщение
 Заголовок сообщения: Узнать имя ConnectionPoint
СообщениеДобавлено: 15 фев 2018, 16:25 
Не в сети
Ветеран
Аватара пользователя

Зарегистрирован: 16 фев 2016, 10:11
Сообщений: 281
Использую Visio c: 2000
Очков репутации: 2

Добавить очки репутацииУменьшить очки репутации
Привет.

Есть: шейп с конекшнпойтом и коннектор. Соединил. Как узнать имя конекшнпойнта?

FromSheet и FromPart - не подходят. Нужно именно имя точки

Объект коннектора (шейп) получаю для работы с ним, всю конструкцию надо построить "от коннектора" ))


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Узнать имя ConnectionPoint
СообщениеДобавлено: 15 фев 2018, 17:00 
Не в сети
Administrator

Зарегистрирован: 30 авг 2009, 11:02
Сообщений: 1130
Очков репутации: 100585

Добавить очки репутацииУменьшить очки репутации
Цитата:
FromSheet и FromPart - не подходят. Нужно именно имя точки

А нет у них имен, как правило.
Бывают, конечно, но очень редко.
Если повезло и имя есть, то можно узнать примерно так
Код:
Debug.Print ActivePage.Shapes(1).Cells("Connections.X2").RowNameU


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Узнать имя ConnectionPoint
СообщениеДобавлено: 15 фев 2018, 17:13 
Не в сети
Ветеран
Аватара пользователя

Зарегистрирован: 16 фев 2016, 10:11
Сообщений: 281
Использую Visio c: 2000
Очков репутации: 2

Добавить очки репутацииУменьшить очки репутации
ох ты ж...
Блин...интересно, как тогда идентифицируют, к какому конекшпойнту прицеплена связь, если их несколько для одного шейпа...
А имена есть, я ж их сам вносил в шейпшит, только не знаю, как к ним обратиться...
Никак не могу осилить нотацию SRC


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Узнать имя ConnectionPoint
СообщениеДобавлено: 15 фев 2018, 17:29 
Не в сети
Administrator

Зарегистрирован: 30 авг 2009, 11:02
Сообщений: 1130
Очков репутации: 100585

Добавить очки репутацииУменьшить очки репутации
Если есть, то так, как я написал.
Через ToPart найти ячейку и узнать для нее имя строки.
----
Да, через ToCell можно сразу на ячейку выйти.
Типа,
Код:
ActivePage.Shapes(2).Connects(1).ToCell.RowNameU


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Узнать имя ConnectionPoint
СообщениеДобавлено: 15 фев 2018, 18:24 
Не в сети
Ветеран
Аватара пользователя

Зарегистрирован: 16 фев 2016, 10:11
Сообщений: 281
Использую Visio c: 2000
Очков репутации: 2

Добавить очки репутацииУменьшить очки репутации
Да, получилось, что хотел. Благодарю. Вот не знал, что имя конекшнпойнта - это имя строки :o


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Узнать имя ConnectionPoint
СообщениеДобавлено: 15 фев 2018, 18:26 
Не в сети
Ветеран
Аватара пользователя

Зарегистрирован: 16 фев 2016, 10:11
Сообщений: 281
Использую Visio c: 2000
Очков репутации: 2

Добавить очки репутацииУменьшить очки репутации
кстати для прилепления - отлов события приконнекчивания - организуется через событие шейпа FormulaChanged. А в обработчике проверяется формула какой ячейки меняется, остальное отсеивается. И получается отличный перехват коннекта хоть мордой, хоть жопой )))

Вот пример:

Код:
какой-тоShape.FormulaChanged+=new v.EShape_FormulaChangedEventHandler(Bind_обработчик);

          private static void Bind_обработчик(v.Cell Cell)
          {
               //Если происходит изменение формулы в этой ячейке. Это значит, что коннектор прицепился своим началом к шейпу
               if(Cell.Name=="BegTrigger")
               {
                    //Определение имени конекшпойнта, к которой прицепился коннектор
                    string pointName=Vars.droppedConnector.Connects[1].ToCell.RowName;
                    w.MessageBox.Show(pointName);
               }
          }


Для морды проверить EndTrigger


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Узнать имя ConnectionPoint
СообщениеДобавлено: 16 фев 2018, 11:38 
Не в сети
Ветеран

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

Добавить очки репутацииУменьшить очки репутации
почему не использовать событие, специально для этого предназначенное ConnectionsAdded?
FormulaChanged слишком часто возникает - постоянная обработка - пустая нагрузка на приложение.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Узнать имя ConnectionPoint
СообщениеДобавлено: 16 фев 2018, 12:00 
9rey писал(а):
почему не использовать событие, специально для этого предназначенное ConnectionsAdded?
три варианта:
1. Чтоб хакеры желающие взломать данный продукт
2. Чтоб долго работало, у заказчика создавалась иллюзия что продукт работает с офигенной нагрузкой ( значит реально крут и должен стоить не мало)
3. Автору кода не досуг почитать про возможности и объектную модель продукта, что такое шейпшит. Просто скачать SDK.
Я голосую за третий вариант! Хотя если автор ветки прошарен в соц-инжиниринге, то тогда все три. Но главный все равно третий вариант


Пожаловаться на это сообщение
Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Узнать имя ConnectionPoint
СообщениеДобавлено: 16 фев 2018, 12:55 
Не в сети
Ветеран

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

Добавить очки репутацииУменьшить очки репутации
:mrgreen:
первый вариант вообще звучит философски)

если серьезно. я когда-то наступал на эти грабли с FormulaChanged. это событие возникает постоянно, если просто затронешь шейп. валом идет. у меня просто прога висла.
из тысячи таких событий на коннект вообще ни одного может не быть, пользователь ведь просто может шейп передвигать, менять размер и тд.
и у тебя впустую будут выполняться эти проверки if(Cell.Name=="BegTrigger") - сотнями.

неправильно это...

вообще ведь достаточно посмотреть события на коннекты. открываешь в визио объектный браузер - F2. вводишь в поиск "connections" смотришь события - значок молнии. смотришь какие объекты это событие зажигают и выбираешь нужный. жмешь F1 - читаешь хелп (до версии 2010 включительно - замечательный встроенный хелп). там все с примерами.
и это не важно VBA или внешний код. суть одна.

PS. я может сгустил краски. CellChanged (которую я использовал) более жрущая. FormulaChanged не так часто загорается. но все-таки сам подход, мне кажется, надо менять.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Узнать имя ConnectionPoint
СообщениеДобавлено: 19 фев 2018, 10:59 
Не в сети
Ветеран
Аватара пользователя

Зарегистрирован: 16 фев 2016, 10:11
Сообщений: 281
Использую Visio c: 2000
Очков репутации: 2

Добавить очки репутацииУменьшить очки репутации
Почему не использовать МСДН? Все просто - для этого надо В ПРИНЦИПЕ ЗНАТЬ, ЧТО ТАКОЕ СОБЫТИЕ СУЩЕСТВУЕТ. И уже потом искать его в эвентах шейпа. И нужно знать, ДЛЯ КАКОГО ОБЪЕКТА оно существует - для шейпа, для страницы, для документа, для приложения и т.д...Поэтому такие костыли...


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Узнать имя ConnectionPoint
СообщениеДобавлено: 19 фев 2018, 12:52 
Не в сети
Ветеран

Зарегистрирован: 05 июл 2012, 21:34
Сообщений: 212
Очков репутации: 27

Добавить очки репутацииУменьшить очки репутации
powercat писал(а):
Почему не использовать МСДН? Все просто - для этого надо В ПРИНЦИПЕ ЗНАТЬ, ЧТО ТАКОЕ СОБЫТИЕ СУЩЕСТВУЕТ. И уже потом искать его в эвентах шейпа. И нужно знать, ДЛЯ КАКОГО ОБЪЕКТА оно существует - для шейпа, для страницы, для документа, для приложения и т.д...Поэтому такие костыли...

Обозреватель объектов, не слышал?


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Узнать имя ConnectionPoint
СообщениеДобавлено: 19 фев 2018, 14:12 
Не в сети
Ветеран

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

Добавить очки репутацииУменьшить очки репутации
powercat писал(а):
И нужно знать, ДЛЯ КАКОГО ОБЪЕКТА оно существует

ну слушай, все ж просто. в визио есть 3 основных объекта, не считая Application это: Document, Page, Shape. и их коллекции.
5 минут на то, чтоб бегло просмотреть события трех объектов в объектном браузере, только не говори, что не знаешь про него :)
работает пользователь всегда с одной страницей - текущей - Application.ActivePage
ну и лови события с нее - значит тебе нужен объект Page, в нем находишь ConnectionsAdded, получаешь из него коллекцию установленных коннектов со всей нужной тебе инфой.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Узнать имя ConnectionPoint
СообщениеДобавлено: 21 фев 2018, 11:56 
Не в сети
Ветеран
Аватара пользователя

Зарегистрирован: 16 фев 2016, 10:11
Сообщений: 281
Использую Visio c: 2000
Очков репутации: 2

Добавить очки репутацииУменьшить очки репутации
9rey писал(а):
powercat писал(а):
И нужно знать, ДЛЯ КАКОГО ОБЪЕКТА оно существует

ну слушай, все ж просто. в визио есть 3 основных объекта, не считая Application это: Document, Page, Shape. и их коллекции.
5 минут на то, чтоб бегло просмотреть события трех объектов в объектном браузере, только не говори, что не знаешь про него :)
работает пользователь всегда с одной страницей - текущей - Application.ActivePage
ну и лови события с нее - значит тебе нужен объект Page, в нем находишь ConnectionsAdded, получаешь из него коллекцию установленных коннектов со всей нужной тебе инфой.


Вот потому я тут и задаю вопросы приблизительные, чтобы потом уже быстро найти необходимое самому )))


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

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



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

Сейчас этот форум просматривают: Yandex [bot] и гости: 1


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

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