All Forums
 Категория Visio
 Форум Вопросы и ответы
 Запуск внешней программы, add-on
Author Previous Topic Topic Next Topic  

immortal

Russia
391 Posts

Posted - 10/25/2004 :  12:35:19  Visit immortal's Homepage
может кто разобрался как запустить в 2003 внешнюю программу ехе из ShapeSheet, а то адд-ин так неудобно тестить

визио 2003 форэвер

...а вобще-то я белый и пушистый.

Tumanov

Russia
1198 Posts

Posted - 10/25/2004 :  17:22:18
Попытайтесь еще раз объяснить мне, в чем проблема.
Вот я сейчас взял Visio 2003 под XP.
Прописал в File Paths / Add-ons строку С:\Program Files\Microsoft Office\Visio11\1033.
Положил в указанную папку файл notepad.exe
Нарисовал квадратик, добавил ему секцию Actions и прописал в нее RUNADDON("notepad.exe")
Щелкнул по менюшке на шейпе и вижу, как запускается блокнот и еще ругается, что не может открыть дурацкий файл (это Visio ему при вызове параметры передает, а он их за имя файла принимает).
Security я, правда, понизил до Low, но это так, на всякий случай.

Так в чем проблема?
Go to Top of Page

immortal

Russia
391 Posts

Posted - 10/26/2004 :  07:19:37  Visit immortal's Homepage
это и надо, проблема в том что не знаю куда
quote:
Прописал в File Paths / Add-ons строку С:\Program Files\Microsoft Office\Visio11\1033.

поточнее можно, в меню Tools -> Add-Ons нету такого

визио 2003 форэвер

...а вобще-то я белый и пушистый.
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 10/26/2004 :  16:41:38
Не Tools -> Add-Ons, а Tools / Options / вкладка File Paths / поле Add-ons
Visio надо сообщить, где ему искать Add-on'ы. vsl он почему-то и так ищет, а вот exe не хочет. А когда я ему этот путь прописал - стал находить.
В Visio 2002 кажется пути при установке сами прописывались, а здесь смотрю - пустые.
Go to Top of Page

immortal

Russia
391 Posts

Posted - 10/27/2004 :  05:54:39  Visit immortal's Homepage
спасибо, нашел Tools / Options / вкладка Advanced кнопка File Paths... / поле Add-ons
ура! заработало
а может совершенно случайно знаете как из ShapeSheet запустить свою кнопку, или команду меню? которые я сделал с помощью com-надстроек add-in?

визио 2003 форэвер

...а вобще-то я белый и пушистый.
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 10/27/2004 :  16:37:36
Ну, разве что совершенно случайно... :)
Только до меня вопросы иногда очень тяжело доходят...
Что значит, "свою кнопку или команду меню" из ShapeSheet? У Вас обработчик написан в Add-in и надо вызвать этот Add-in по щелчку на выпадающем меню шейпа?
Попробуйте как-нибудь попроще сформулировать вопрос.
Go to Top of Page

immortal

Russia
391 Posts

Posted - 10/28/2004 :  05:54:45  Visit immortal's Homepage
quote:
Вас обработчик написан в Add-in и надо вызвать этот Add-in по щелчку на выпадающем меню шейпа
да написан add-in, но сказать что надо запускать (вызывать) add-in неправильно, т.к. add-in в моем случае запускается автоматически, и он добавляет меню в tools, и панель кнопок, если у вас есть мой add-in то вот листинг коннекта add-in, котором прописаны константы меню и кнопок

' меню 1
Const CMB_NAME1 As String = "Tools"
Const CMB_CAPTION1 As String = "Данные проекта"
Const CMB_KEY1 As String = "KSMaster"

' меню 2
Const CMB_NAME2 As String = "Tools"
Const CMB_CAPTION2 As String = "Настройка листов"
Const CMB_KEY2 As String = "KSMaster1"


' меню 3
Const CMB_NAME3 As String = "Tools"
Const CMB_CAPTION3 As String = "Печать на плоттере"
Const CMB_KEY3 As String = "KSMaster2"


' меню 4
Const CMB_NAME4 As String = "Tools"
Const CMB_CAPTION4 As String = "Электрика"
Const CMB_KEY4 As String = "KSMaster3"


' меню 5
Const CMB_NAME5 As String = "Tools"
Const CMB_CAPTION5 As String = "Печать..."
Const CMB_KEY5 As String = "KSMaster4"







' Панель инструментов
Const CTB_NAME As String = "KS" ' название панели
' кнопки панели
'1
Dim mcbToolbarCommandBar1 As Office.CommandBarButton
Public WithEvents keysmy1 As Office.CommandBarButton
Const CTB_CAPTION1 As String = "Данные проекта" ' название кнопки
Const CTB_KEY1 As String = "KS_Master1" ' имя кнопки
Const CMB_PIC1 As String = "1.bmp" ' картинка кнопки

'2
Dim mcbToolbarCommandBar2 As Office.CommandBarButton
Public WithEvents keysmy2 As Office.CommandBarButton
Const CTB_CAPTION2 As String = "Настройка листов" ' название кнопки
Const CTB_KEY2 As String = "KS_Master2" ' имя кнопки
Const CMB_PIC2 As String = "2.bmp"

'3
Dim mcbToolbarCommandBar3 As Office.CommandBarButton
Public WithEvents keysmy3 As Office.CommandBarButton
Const CTB_CAPTION3 As String = "Печать на плоттере" ' название кнопки
Const CTB_KEY3 As String = "KS_Master3" ' имя кнопки
Const CMB_PIC3 As String = "3.bmp"

'4
Dim mcbToolbarCommandBar4 As Office.CommandBarButton
Public WithEvents keysmy4 As Office.CommandBarButton
Const CTB_CAPTION4 As String = "Электрика" ' название кнопки
Const CTB_KEY4 As String = "KS_Master4" ' имя кнопки
Const CMB_PIC4 As String = "4.bmp"

'5
Dim mcbToolbarCommandBar5 As Office.CommandBarButton
Public WithEvents keysmy5 As Office.CommandBarButton
Const CTB_CAPTION5 As String = "Печать..." ' название кнопки
Const CTB_KEY5 As String = "KS_Master5" ' имя кнопки
Const CMB_PIC5 As String = "5.bmp"

в меню tools появляются Данные проекта, Настройка листов, Печать на плоттере, Электрика, Печать..., с соотв. именами KSMaster,KSMaster1,KSMaster2,KSMaster3,KSMaster4, из меню запускаются соотв. события обработки нажатия кнопок, я думаю что обработчик запустить из ShapeSheet (по щелчку на выпадающем меню шейпа) невозможно, но можно наверно имитировать нажатие кнопки меню, или панели, как это сделать?

визио 2003 форэвер

...а вобще-то я белый и пушистый.
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 10/28/2004 :  17:39:49
Элементарно...
Когда мы объявляем кнопочку WithEvents (например, Public WithEvents keysmy5 As Office.CommandBarButton), то Add-in начинает обрабатывать ее события. Например, событие Click.
Точно так же можно было объявить WithEvents и шейп и другой объект и использовать другие события.
Остается только сделать так, чтобы этот объект сгенерил событие по указанию из ShapeSheet. Это самый шаткий момент в моей теории, но в принципе работает...
Рассматриваем сразу худший случай. Пусть нам надо отследить нажатие меню шейпа по секции Actions. Пишем туда RunAddon(макрос). А макрос пусть что-нибудь меняет в шейпе, например Custom Properties. Вот теперь у нас появляется возможность пользоваться в Add-in обработчиком события изменение ячейки.
В принципе, через одну такую ячейку можно передавать множество различных событий, сопровождая их, например, индексом породившего шейпа или номером пункта меню и т.д.
В качестве передатчика тоже можно выбрать не изменение ячейки, а что-то еще.
Объектом может быть шейп, документ, трафарет... Вместо макроса, естественно, можно Add-on задействовать. Короче, все в зависимости от ситуации.

Кажется немного запутано получилось... :)
Еще раз другими словами. В Add-in создаем объект с WithEvents. Пишем обработчик события какого-либо изменения этого объекта. Из меню шейпа вызываем Add-on или макрос, который этот объект нужным образом меняет.

Таким образом задача вызова обработчика, размещенного в Add-in, из ShapeSheet решается.
Скорее всего, вариант не единственный...
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)