Форум пользователей Visio http://visio.getbb.ru/ |
|
Перехватить удаление шейпа http://visio.getbb.ru/viewtopic.php?f=6&t=1291 |
Страница 1 из 1 |
Автор: | powercat [ 12 фев 2018, 13:51 ] |
Заголовок сообщения: | Перехватить удаление шейпа |
Привет. Много шейпов на листе. Нужно из внешней программы перехватить удаление произвольного. Для чего нужно - при создании этих шейпов (из внешней же программы), для каждого из них создавался экземпляр класса для хранения данных. Соответственно, при удалении шейпа нужно и соответствующий экземпляр убить. Проблема в том, что убить шейп можно с листа без внешней проги...может перехватывать нажатие кнопки Del? Как это сделать? Работа через библиотеку вижуо на C#, через контрол AxMicrosoft.Office.Interop.VisOcx.AxDrawingControl - поле вижуо. |
Автор: | Shishok [ 12 фев 2018, 13:59 ] |
Заголовок сообщения: | Re: Перехватить удаление шейпа |
Имхо, надо настроить шейп так, чтобы его нельзя было удалить с листа. А при удалении внешней прогой эти настройки снимать. |
Автор: | powercat [ 12 фев 2018, 14:04 ] |
Заголовок сообщения: | Re: Перехватить удаление шейпа |
Shishok писал(а): Имхо, надо настроить шейп так, чтобы его нельзя было удалить с листа. А при удалении внешней прогой эти настройки снимать. Тоже так думал... Сейчас склоняюсь к мысли перехвата нажатия на Del, т.к. удалять скорее всего будут именно так - как привыкли... |
Автор: | Shishok [ 12 фев 2018, 14:06 ] |
Заголовок сообщения: | Re: Перехватить удаление шейпа |
Цитата: Сейчас склоняюсь к мысли перехвата нажатия на Del, т.к. удалять скорее всего будут именно так - как привыкли... А как насчет Ctrl+X ? |
Автор: | powercat [ 12 фев 2018, 14:52 ] |
Заголовок сообщения: | Re: Перехватить удаление шейпа |
Да ну щас, на все проверки делать ))) Уже придумал, как решить - пусть удаляется, что угодно, потом просто перед анализом схемы пройти по списку имен экземпляров и проверить их на листе, и если их нет на листе - прибить в коллекции. |
Автор: | Tumanov [ 12 фев 2018, 15:08 ] |
Заголовок сообщения: | Re: Перехватить удаление шейпа |
А традиционный путь чем не подходит? Обычно ставят обработчик на BeforeShapeDelete. Например, на страницу. Хотя, можно и на документ. |
Автор: | powercat [ 12 фев 2018, 15:43 ] |
Заголовок сообщения: | Re: Перехватить удаление шейпа |
Tumanov писал(а): А традиционный путь чем не подходит? Обычно ставят обработчик на BeforeShapeDelete. Например, на страницу. Хотя, можно и на документ. Да всем подходит, при условии работы под VBA...а я из c# пишу. НО - может я просто не знаю, и можно обращаться к событиям вижуо из другой проги? Это было бы вообще суперотлично! Нда...что-то я опять туплю, оно же и так есть ))) Теперь понять бы, как это событие ээ...активировать что-ль? В VBA это просто закладки вверху страницы, а тут в виде Page.Before... Можно пример на пару строк активации события? |
Автор: | powercat [ 12 фев 2018, 16:17 ] |
Заголовок сообщения: | Re: Перехватить удаление шейпа |
Повесить событие на контрол, выбрав его из списка событий - это просто. Но шейпы-то я дропаю на лист... |
Автор: | Tumanov [ 12 фев 2018, 16:19 ] |
Заголовок сообщения: | Re: Перехватить удаление шейпа |
Ну, вот, что-то в таком духе... Код: 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); ... |
Автор: | powercat [ 12 фев 2018, 16:25 ] |
Заголовок сообщения: | Re: Перехватить удаление шейпа |
Непонятно (( Вот есть событие AxMicrosoft.Office.Interop.VisOcx.AxDrawingControl.Document.Pages[1].BeforeShapeDelete Не пойму, как с ним дальше быть...что-то куда-то надо далее разместить и записать... |
Автор: | Tumanov [ 12 фев 2018, 17:04 ] |
Заголовок сообщения: | Re: Перехватить удаление шейпа |
Там Visual Studio подсказывает, куда нажимать надо... Вот попытался сделать картинку. Правда, подсказок не видно, но они есть Сначала надо выбрать момент, когда этот обработчик подключать. У меня это в стартапе аддина. У Вас, естественно, будет другое место. Но это не важно. Далее выбираем объект. На картинке это this.Application.ActivePage Ставим точку и смотрим, какие события предложит Visual Studio. Выбираем нужное. Пишем += и Visual Studio вывешивает пример подключения обработчика для этого события. Остается нажать Tab. Ну и сам обработчик написать и куда-нибудь вставить. Содержимое спрятано под спойлер ↓ Спойлер: ▼ |
Автор: | powercat [ 13 фев 2018, 10:35 ] |
Заголовок сообщения: | Re: Перехватить удаление шейпа |
Не вдруг, но получилось. Очередное большое БЛАГОДАРЮ ))) |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |