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

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

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


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


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

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



Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
 Заголовок сообщения: Как узнать, что было между EnterScope и ExitScope
СообщениеДобавлено: 17 июн 2019, 12:49 
Не в сети
Постоянный участник

Зарегистрирован: 16 окт 2016, 12:41
Сообщений: 99
Использую Visio c: 2016
Очков репутации: 4

Добавить очки репутацииУменьшить очки репутации
Здравствуйте, уважаемые форумчане. Подскажите пожалуйста есть ли возможность узнать посредством VBA, что было между событиями EnterScope и ExitScope. Например:
Код:
2653 > EnterScope  [1312;0;Данные фигуры;790296]
2654 | FormulaChanged Sheet.1!Prop.Row_1 UZ1 = "UZ1"  [/doc=1 /page=1 /shape=Sheet.1 /shapeu=Sheet.1 /sec=243 /row=0 /col=0]
2654 | CellChanged Sheet.1!Prop.Row_1 UZ1 = "UZ1"  [/doc=1 /page=1 /shape=Sheet.1 /shapeu=Sheet.1 /sec=243 /row=0 /col=0]
2655 | FormulaChanged Sheet.2!Prop.Row_1 UZ1 = "UZ1"  [/doc=1 /page=1 /shape=Sheet.2 /shapeu=Sheet.2 /sec=243 /row=0 /col=0]
2655 | CellChanged Sheet.2!Prop.Row_1 UZ1 = "UZ1"  [/doc=1 /page=1 /shape=Sheet.2 /shapeu=Sheet.2 /sec=243 /row=0 /col=0]
2656 | FormulaChanged Sheet.1!Prop.Row_1.LangID 1033 = 1033  [/doc=1 /page=1 /shape=Sheet.1 /shapeu=Sheet.1 /sec=243 /row=0 /col=14]
2656 | CellChanged Sheet.1!Prop.Row_1.LangID 1033 = 1033  [/doc=1 /page=1 /shape=Sheet.1 /shapeu=Sheet.1 /sec=243 /row=0 /col=14]
2657 | FormulaChanged Sheet.2!Prop.Row_1.LangID 1033 = 1033  [/doc=1 /page=1 /shape=Sheet.2 /shapeu=Sheet.2 /sec=243 /row=0 /col=14]
2657 | CellChanged Sheet.2!Prop.Row_1.LangID 1033 = 1033  [/doc=1 /page=1 /shape=Sheet.2 /shapeu=Sheet.2 /sec=243 /row=0 /col=14]
2658 < ExitScope  [1312;0;Данные фигуры;790296]

Я могу отловить события EnterScope и ExitScope, но после ExitScope я хочу обработать все шейпы, которые попали в эти "пределы". Это нужно мне, так как с вашей помощью, стало ясно, что нельзя чтобы много шейпов запускали один и тот же макрос на выполнение, так как возникнет ошибка "Out of stack space".


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Как узнать, что было между EnterScope и ExitScope
СообщениеДобавлено: 17 июн 2019, 13:05 
Не в сети
Administrator

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

Добавить очки репутацииУменьшить очки репутации
Цитата:
отловить события EnterScope и ExitScope, но после ExitScope я хочу обработать все шейпы, которые попали в эти "пределы".

Напоминает выражение "от забора до обеда".
EnterScope и ExitScope - это события. Если у Вас стоят обработчики, то эти события можно обработать.
Между ними может происходить множество других событий. Чтобы их отловить тоже нужны обработчики. Как еще?
А уже в обработчиках можно разбираться, от каких объектов они поступили.
Но ведь событий может быть очень много. Замучаешься столько обработчиков создавать.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Как узнать, что было между EnterScope и ExitScope
СообщениеДобавлено: 17 июн 2019, 14:35 
Не в сети
Постоянный участник

Зарегистрирован: 16 окт 2016, 12:41
Сообщений: 99
Использую Visio c: 2016
Очков репутации: 4

Добавить очки репутацииУменьшить очки репутации
Мне в частности нужно обработать только те шейпы, у которых изменились пользовательские данные. Обрабатывать все события не выйдет. Допустим я отслеживаю cellChanged внутри EnterScope и ExitScope. Выделил много шейпов, и изменил у них одно данное. Все эти шейпы одновременно создадут событие CellChanged и в какой-то момент выпадет ошибка "Out of stack space".
Я надеялся на что есть некий журнал событий, в EnterScope я узнаю какое это событие по счёту (не знаю можно или нет это узнать), в ExitScope тоже узнаю его номер. А далее по номерам событий между ними узнаю что было из журнала. Понимаю, что скорее всего такого журнала нет. Хотя вопрос: как visio понимает, что отменять при команде Ctrl+Z


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Как узнать, что было между EnterScope и ExitScope
СообщениеДобавлено: 17 июн 2019, 18:28 
Не в сети
Постоянный участник

Зарегистрирован: 16 окт 2016, 12:41
Сообщений: 99
Использую Visio c: 2016
Очков репутации: 4

Добавить очки репутацииУменьшить очки репутации
Думаю свою задачу решу следующем способом. Когда пользователь выбрал объекты и видит, что у них есть одно и тоже поле данных, при изменении этого данного сработает как enterscope так и exitscope. В обработчике последнего я просто возьму объект selection и обработаю все шейпы


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Как узнать, что было между EnterScope и ExitScope
СообщениеДобавлено: 17 июн 2019, 23:02 
Не в сети
Ветеран
Аватара пользователя

Зарегистрирован: 28 апр 2013, 14:03
Сообщений: 963
Откуда: Вена, Австрия
Использую Visio c: 1998
Очков репутации: 100614

Добавить очки репутацииУменьшить очки репутации
Раньше, помнится, для предотвращения всяких глюков можно было просто прокачивать очередь сообщений (DoEvents вызывать периодически, если речь про vba) может попробуешь?

А так stack overflow на баг репорт тянет.
Попробую воспроизвести.

_________________
Полезные инструменты для создания диаграмм Visio:
https://unmanagedvisio.com/


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

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



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

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


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

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