Author |
Topic |
|
immortal
Russia
391 Posts |
Posted - 10/25/2004 : 12:35:19
|
может кто разобрался как запустить в 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, но это так, на всякий случай.
Так в чем проблема? |
|
|
immortal
Russia
391 Posts |
Posted - 10/26/2004 : 07:19:37
|
это и надо, проблема в том что не знаю куда quote: Прописал в File Paths / Add-ons строку С:\Program Files\Microsoft Office\Visio11\1033.
поточнее можно, в меню Tools -> Add-Ons нету такого
визио 2003 форэвер
...а вобще-то я белый и пушистый. |
|
|
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 кажется пути при установке сами прописывались, а здесь смотрю - пустые. |
|
|
immortal
Russia
391 Posts |
Posted - 10/27/2004 : 05:54:39
|
спасибо, нашел Tools / Options / вкладка Advanced кнопка File Paths... / поле Add-ons ура! заработало а может совершенно случайно знаете как из ShapeSheet запустить свою кнопку, или команду меню? которые я сделал с помощью com-надстроек add-in?
визио 2003 форэвер
...а вобще-то я белый и пушистый. |
|
|
Tumanov
Russia
1198 Posts |
Posted - 10/27/2004 : 16:37:36
|
Ну, разве что совершенно случайно... :) Только до меня вопросы иногда очень тяжело доходят... Что значит, "свою кнопку или команду меню" из ShapeSheet? У Вас обработчик написан в Add-in и надо вызвать этот Add-in по щелчку на выпадающем меню шейпа? Попробуйте как-нибудь попроще сформулировать вопрос. |
|
|
immortal
Russia
391 Posts |
Posted - 10/28/2004 : 05:54:45
|
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 форэвер
...а вобще-то я белый и пушистый. |
|
|
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 решается. Скорее всего, вариант не единственный... |
|
|
|
Topic |
|
|
|