All Forums
 Категория Visio
 Форум Вопросы и ответы
 Удаление объекта.
Author Previous Topic Topic Next Topic  

mers

Russia
159 Posts

Posted - 03/28/2007 :  10:05:07
Здравствуйте.
Задача следующая. Есть два шейпа: главный и вспомогательный.
PinX и PinY вспомогательного задаются через координаты главного шейпа.
Каким образом через шейпшит можно сделать удаление второстепенного шейпа при удалении главного?
Т.е. выглядит это так: лежит два шейпа, один "привязан" к другому. При удалении главного, "привязанный" тоже удаляется.

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

mers

Russia
159 Posts

Posted - 03/28/2007 :  13:31:59
Отловить событие удаление главного объекта в шейпшите привязанного я могу. Вопрос теперь как можно удалить объект через его шейпшит. Может функция какая-нибудь есть?
Go to Top of Page

mers

Russia
159 Posts

Posted - 04/03/2007 :  09:45:30
Если кому-то интересно.
Ответ: сделать этого нельзя. Можно только сделать объект невидимым.

Поэтому вопрос несколько изменился.
Необходимо удалить объект из его шейпшита. Насколько я понимаю по событию можно вызывать какую-либо пользовательскую функцию. Каким образом я могу программно создать такую функцию? Или может быть имеет смысл ее создать раньше, а потом вызывать? Подскажите как лучше? А то что-то не соображу.

Edited by - mers on 04/03/2007 09:52:15
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 04/04/2007 :  10:57:02
Например создать макрос или AddOn, удаляющий шейп. А из шейп-листа вызывать его.
Макрос будет совсем простенький. Типа такого
sub ttt()
sh.Delete
end sub
Надо только умудриться передать ему ссылку на удаляемый шейп.
А в AddOn шейп должен передаться автоматикой при вызове, но AddOn будет посложнее.
Сам вызов в шейп-листе будет примерно таким
=RUNMACRO("ThisDocument.ttt") или RUNADDON
Как передать ссылку в макрос, надо подумать... Один из вариантов (может и не лучший, но работающий) вот такой:
На странице заводим CustomProperties целого типа и через нее передаем ID удаляемого шейпа.
Тогда макрос чуть усложнится
Sub ttt()
i = ActivePage.PageSheet.Cells("Prop.Row_1")
ActivePage.Shapes("Sheet." & i).Delete
End Sub
В первой строке достается индекс, во второй - собственно удаление.
Вызов будет таким
=SETF(GetRef(ThePage!Prop.Row_1),ID())&RUNMACRO("ThisDocument.ttt")
Здесь объединены две команды. Первая записывает ID шейпа в свойство страницы, вторая вызывает макрос.
Go to Top of Page

mers

Russia
159 Posts

Posted - 04/04/2007 :  12:46:45
Замечательно.
А можно ли создать макрос программно?
Насколько я понимаю подключить сделанный нельзя?

Edited by - mers on 04/04/2007 14:34:16
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 04/04/2007 :  19:01:52
Не понял... Скорее наоборот. Вот создать макрос на ходу - проблематично по причинам безопасности.
А использовать ранее сделанный - без проблем. Это и делается в примере.
Если Вы хотите сделать что-то программно, то программа у Вас уже выполняется, значит она существует. Значит в ней или рядом с ней может находиться нечто похожее на приведенное выше Sub ttt(). Вот и вызывайте его.
Go to Top of Page

mers

Russia
159 Posts

Posted - 04/08/2007 :  12:16:09
Насколько я понимаю макрос привязывается к документу.
А можно ли создать макрос "где-то там" и потом привязать его к текущему документу и вызвать его. Т.е. на момент создания макроса я не знаю в каких документах он будет мне нужен. Я хочу подключать его динамически к необходимым документам и использовать в них.
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 04/08/2007 :  16:30:05
"Где-то там" работают Add-On'ы. Они к документу не привязываются.
Еще можно записать макрос в шаблон и создавать нужные документы на основе этого шаблона. Вам ведь макрос нужен будет не в совершенно произвольных документах, а в нацеленных на решение какой-то задачи... Вот и создавать их все по этому шаблону.
Go to Top of Page
  Previous Topic Topic Next Topic  
Данный сайт является архивом форума visio.artberg.ru, который был закрыт в связи с переходом на новую платформу visio.getbb.ru
Все материалы доступны только для чтения! Если у вас появились вопросы, или вы хотите что-то обсудить, связанное с Visio, обращайтесь на новый форум!
Архив был создан благодаря совместным усилиям Генадия Туманова @Tumanov (visio.artberg.ru), Александра ака @Surrogate (visio.getbb.ru), и Николая Белых @nbelyh (unmanagedvisio.com)