Author |
Topic |
|
magniy
6 Posts |
Posted - 10/25/2004 : 12:14:31
|
Здравствуйте. Помогите решить следующую задачу. Необходимо, по двойному нажатию на шейп запустить макрос. Проблема в том, что диаграмма создается программно и требуемый макрос должен быть импортирован из файла. Т.е. из внешней программы идет выгрузка данных и построение диаграммы, после визуализации диаграммы, макрос должен быть уже подключен. С уважением, Александр.
|
|
Tumanov
Russia
1198 Posts |
Posted - 10/25/2004 : 18:02:49
|
А у Вас нет желания макрос записать в шаблон и создавать документ на основе шаблона с уже готовым макросом? Тогда остается только прописать в созданный шейп вызов макроса.
Dim docObj As Visio.Document Dim pagObj As Page Set appVisio = CreateObject("visio.application") Set docObj = appVisio.Documents.Open("c:\ttt.vst") 'Вот мы создали документ, и макрос там уже сидит Set pagObj = docObj.Pages(1) pagObj.DrawRectangle 1, 6, 3, 7 pagObj.Shapes(1).Cells("EventDblClick").Formula = "RunADDON(""ThisDocument.ttt"")" 'Теперь нарисовали шейп и вписали в качестве обработчика DblClick выполнение макроса ttt |
|
|
magniy
6 Posts |
Posted - 10/26/2004 : 08:25:53
|
Здравствуйте. Спасибо за ответ. Шалон - это тоже решение, однако есть одно но... Шаблон необходимо включать в поставку. Необходимо, чтобы у клиента предварительно лежал шаблон. Нет ли возможности после создания диаграммы провести импорт макроса, что нибудь типа appVisio.Documents.ImportFile("c:\ttt.bas"). Макрос предварительно программно записать по указанному пути. С уважением, Александр |
|
|
Tumanov
Russia
1198 Posts |
Posted - 10/26/2004 : 16:41:01
|
Так если макрос можно предварительно программно записать по указанному пути, то и шаблон можно предварительно программно записать по указанному пути :) а потом уже рисовать рисунок. А с импортом макроса я все хотел поковыряться, но руки пока не дошли. И в общем-то - эта операция на грани игры с безопасностью, а ее все ужесточают и ужесточают... Так что не исключено, что начиная с Visio 2002 или 2003 этого уже вообще нельзя сделать.
|
|
|
immortal
Russia
391 Posts |
Posted - 10/27/2004 : 06:22:46
|
немного не понял, макрос создается программно, т.е. код макроса создается с помощью программы и каждый раз может быть разным? а может проще написать внешнюю программу и запускать ее, по крайней мере установки безопасности ей по барабану, раньше все делал макрасами, и один раз был случай, что тот для кого я это делал ни как не хотел менять уровень безопасности, его право и оно вполне оправдано.
визио 2003 форэвер
...а вобще-то я белый и пушистый. |
|
|
magniy
6 Posts |
Posted - 10/27/2004 : 07:21:12
|
Здравствуйте. Спасибо за участие. Буду думать. (макрос не меняется, просто, чтобы его не распространять с исходниками, предполагается создать его программно по указанному пути) С уважением, Александр. |
|
|
immortal
Russia
391 Posts |
Posted - 10/27/2004 : 12:43:24
|
quote: чтобы его не распространять с исходниками, предполагается создать его программно по указанному пути
вьехал, надо сделать внешнюю программу в Визуал бейсике, скомпилировать, и запускать как add-on, тогда исходники будут не доступны для просмотра, обо всем этом писалось тут.
визио 2003 форэвер
...а вобще-то я белый и пушистый. |
|
|
magniy
6 Posts |
Posted - 10/28/2004 : 12:47:38
|
Здравствуйте, Запустить макрос на основе шаблона получилось. Работает. Прошу прошения за следующий вопрос... Как в макросе получить доступ к Шейпу на котором данный макрос был инициализирован.
Есть возможность получить активную страницу Set Page = ActivePage... Коллекцию шейпов... Set shps = Page.Shapes
Как получить доступ к активному шейпу?
Видимо вопрос тривиальный. С уважением, Александр. |
|
|
Tumanov
Russia
1198 Posts |
Posted - 10/28/2004 : 17:41:23
|
Из предыдущего текста видно. что Вы собираетесь запускать макрос по двойному клику. В этом случае на странице будет селектирован один шейп - тот на котором кликают. Доступ к нему организуется как Set shpObj = ActiveWindow.Selection(1)
Если случай более сложный, то вместо Runaddon можно использовать CallThis, которая позволяет передавать и шейп и любые дополнительные аргументы procedure(shpObj As Visio.shape [arg1 As type, arg2 As type...])
И еще один случай - когда вызывается не макрос, а именно Add-on, то Visio передает в командной строке полнейшую информацию /visio=instanceHandle /doc=docIndex /master=masterIndex /shape=NameID и шейп определяется как Set shpObj = appVisio.Documents(docIndex).Pages(pagIndex).Shapes(NameID)
|
|
|
|
Topic |
|