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

Форум по вопросам применения и программирования в Visio
Текущее время: 18 ноя 2018, 06:41

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


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


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



Начать новую тему Ответить на тему  [ Сообщений: 12 ] 
Автор Сообщение
 Заголовок сообщения: Перехватить удаление шейпа
СообщениеДобавлено: 12 фев 2018, 13:51 
Не в сети
Просто PowerCat
Аватара пользователя

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

Добавить очки репутацииУменьшить очки репутации
Привет.
Много шейпов на листе. Нужно из внешней программы перехватить удаление произвольного.
Для чего нужно - при создании этих шейпов (из внешней же программы), для каждого из них создавался экземпляр класса для хранения данных. Соответственно, при удалении шейпа нужно и соответствующий экземпляр убить. Проблема в том, что убить шейп можно с листа без внешней проги...может перехватывать нажатие кнопки Del?
Как это сделать? Работа через библиотеку вижуо на C#, через контрол AxMicrosoft.Office.Interop.VisOcx.AxDrawingControl - поле вижуо.


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

Зарегистрирован: 30 июл 2014, 14:28
Сообщений: 492
Использую Visio c: 2008
Очков репутации: 100

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


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Перехватить удаление шейпа
СообщениеДобавлено: 12 фев 2018, 14:04 
Не в сети
Просто PowerCat
Аватара пользователя

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

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

Тоже так думал...
Сейчас склоняюсь к мысли перехвата нажатия на Del, т.к. удалять скорее всего будут именно так - как привыкли...


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

Зарегистрирован: 30 июл 2014, 14:28
Сообщений: 492
Использую Visio c: 2008
Очков репутации: 100

Добавить очки репутацииУменьшить очки репутации
Цитата:
Сейчас склоняюсь к мысли перехвата нажатия на Del, т.к. удалять скорее всего будут именно так - как привыкли...

А как насчет Ctrl+X ?


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Перехватить удаление шейпа
СообщениеДобавлено: 12 фев 2018, 14:52 
Не в сети
Просто PowerCat
Аватара пользователя

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

Добавить очки репутацииУменьшить очки репутации
Да ну щас, на все проверки делать )))

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


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

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

Добавить очки репутацииУменьшить очки репутации
А традиционный путь чем не подходит?
Обычно ставят обработчик на BeforeShapeDelete. Например, на страницу. Хотя, можно и на документ.


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Перехватить удаление шейпа
СообщениеДобавлено: 12 фев 2018, 15:43 
Не в сети
Просто PowerCat
Аватара пользователя

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

Добавить очки репутацииУменьшить очки репутации
Tumanov писал(а):
А традиционный путь чем не подходит?
Обычно ставят обработчик на BeforeShapeDelete. Например, на страницу. Хотя, можно и на документ.


Да всем подходит, при условии работы под VBA...а я из c# пишу.
НО - может я просто не знаю, и можно обращаться к событиям вижуо из другой проги? Это было бы вообще суперотлично! Нда...что-то я опять туплю, оно же и так есть ))) Теперь понять бы, как это событие ээ...активировать что-ль? В VBA это просто закладки вверху страницы, а тут в виде Page.Before...
Можно пример на пару строк активации события?


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Перехватить удаление шейпа
СообщениеДобавлено: 12 фев 2018, 16:17 
Не в сети
Просто PowerCat
Аватара пользователя

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

Добавить очки репутацииУменьшить очки репутации
Повесить событие на контрол, выбрав его из списка событий - это просто.
Но шейпы-то я дропаю на лист...


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

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

Добавить очки репутацииУменьшить очки репутации
Ну, вот, что-то в таком духе...
Код:
        private bool Application_ShapeDelete(Visio.Selection target)
        {
            if (ActiveDoc == null) { return false; }
            if (!CheckDoc(ActiveApp.ActiveDocument )) { return false; }
            DelShape = target[1];
            DelOrder = 30;
            return true;
        }

        private void ThisAddIn_Startup(object sender, System.EventArgs e)
        {
            this.Application.ViewChanged +=new Visio.EApplication_ViewChangedEventHandler(Application_ViewChanged);
            this.Application.MarkerEvent += new Visio.EApplication_MarkerEventEventHandler(Application_MarkerEvent);
            this.Application.DocumentCreated += new Visio.EApplication_DocumentCreatedEventHandler(Application_DocumentCreated);
            this.Application.DocumentOpened += new Visio.EApplication_DocumentOpenedEventHandler(Application_DocumentOpened);
            this.Application.BeforeDocumentClose +=new Visio.EApplication_BeforeDocumentCloseEventHandler(Application_BeforeDocumentClose);
            this.Application.BeforeDocumentSave += new Visio.EApplication_BeforeDocumentSaveEventHandler(Application_BeforeDocumentSave);
            this.Application.BeforeDocumentSaveAs +=new Visio.EApplication_BeforeDocumentSaveAsEventHandler(Application_BeforeDocumentSaveAs);
            this.Application.ShapeExitedTextEdit += new Visio.EApplication_ShapeExitedTextEditEventHandler(Application_ShapeExitedTextEdit);
            this.Application.QueryCancelSelectionDelete += new Visio.EApplication_QueryCancelSelectionDeleteEventHandler(Application_ShapeDelete);
...


Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Перехватить удаление шейпа
СообщениеДобавлено: 12 фев 2018, 16:25 
Не в сети
Просто PowerCat
Аватара пользователя

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

Добавить очки репутацииУменьшить очки репутации
Непонятно ((
Вот есть событие
AxMicrosoft.Office.Interop.VisOcx.AxDrawingControl.Document.Pages[1].BeforeShapeDelete
Не пойму, как с ним дальше быть...что-то куда-то надо далее разместить и записать...


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

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

Добавить очки репутацииУменьшить очки репутации
Там Visual Studio подсказывает, куда нажимать надо...
Вот попытался сделать картинку. Правда, подсказок не видно, но они есть :)
Сначала надо выбрать момент, когда этот обработчик подключать. У меня это в стартапе аддина. У Вас, естественно, будет другое место. Но это не важно.
Далее выбираем объект. На картинке это this.Application.ActivePage
Ставим точку и смотрим, какие события предложит Visual Studio. Выбираем нужное.
Пишем += и Visual Studio вывешивает пример подключения обработчика для этого события. Остается нажать Tab.
Ну и сам обработчик написать и куда-нибудь вставить.


Вложения:
event.gif
event.gif [ 219.75 Кб | Просмотров: 143 ]
Пожаловаться на это сообщение
Вернуться к началу
 Профиль  
Ответить с цитатой  
 Заголовок сообщения: Re: Перехватить удаление шейпа
СообщениеДобавлено: 13 фев 2018, 10:35 
Не в сети
Просто PowerCat
Аватара пользователя

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

Добавить очки репутацииУменьшить очки репутации
Не вдруг, но получилось.
Очередное большое БЛАГОДАРЮ )))


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

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



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

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


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

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