All Forums
 Категория Visio
 Форум Вопросы и ответы
 RUNADDONWARGS
Author Previous Topic Topic Next Topic  

jetsnake

3 Posts

Posted - 05/15/2003 :  06:57:08
Помогите чайнику.
Есть в трафарете form shapes шейп такой Table.
Для изменения количества строк или столцов в ней используется, как я понял, аддон Tab.
Вопрос: как этот аддон вызвать из басика? Или другими словами как программно управлять этим шейпом.
Спасибо всем.:)

eug

Russia
19 Posts

Posted - 05/23/2003 :  08:58:43
Не очень точно сформулирован вопрос. Из какого Бейсика? и что такое tab?
Если из VBA этого же рис, и например Tab - эта функция этого рис в ThisDocument, то так:
Dim shp As Shape
ID = shp.UniqueID(visGetOrMakeGUID)
shp.DeleteSection (visSectionAction) 'Add the section.
If shp.RowCount(visSectionAction) = 0 Then
i = shp.AddSection(visSectionAction)
shp.AddRow i, visRowAction + 0, visActionMenu
shp.CellsSRC(i, visRowAction + 0, visActionPrompt).Formula = """tab"""
shp.CellsSRC(i, visRowAction + 0, visActionMenu).Formula = """tab"""
'shp.CellsSRC(i, visRowAction + 0, visActionAction).Formula = "RunADDON(""ThisDocument.tab"")"
shp.CellsSRC(i, visRowAction + 0, visActionChecked).Formula = 0
shp.CellsSRC(i, visRowAction + 0, visActionDisabled).Formula = 0
End If
----------------------------------------
Но у меня дополнительный вопрос, можно ли пользоваться RunADDON или
RunADDONArgs в случае, если док-т Визио открываем из клиентского приложения, например на VB6, и надо вызвать в кач-ве Add-On функцию
этого клиентс приложения? а)как обращаться к ней в RunADDON?
б)Должна ли эта функция в проекте клиента быть определена как Public?
напр я проверял, что код подобный тому что выше в клиенте VB6, для
вызова Public-функции Bind:
shp.CellsSRC(i, visRowAction + 0, visActionAction).Formula = "RunADDON(""Bind"")" где
Public Sub Bind()
.....
End Sub
не дает сбоя, но и не выполняет никакого действия.
Если залепить покруче:
shp.CellsSRC(i, visRowAction + 0, visActionAction).Formula = "RunADDON(""LNK.Show"")" (где LNK - форма клиентского проекта), то вылетает по ошибке.

Багоцкий
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 05/23/2003 :  14:01:22
Тут требуются некоторые уточнения.
1. Что такое Tab понятно. В Charting Shapes.vss есть такой мастер-шейп table, который работает в паре с Add-On'ом Tab. А вот на предмет поуправлять им надо уточнить.
Так как шейп и AddOn настроены друг на друга, эту связь нельзя разрывать. Вызвать функции AddOn без этого шейпа нельзя - их некуда будет применить.
Программно создать экземпляр шейпа похоже тоже не получится, так как на входе отрабатывает настройка шейпа, а там нужно действовать руками.
Остается только следующая ситуация: шейп уже на рисунке и нужно имитировать вызов его меню для выполнения операций типа Вставить строку, Убрать столбец и т.д. Некоторые из этих операций скорее всего выполнить можно. Видно, что при вызове из Visio в AddOn передается код команды, определяющий операцию, типа =RUNADDONWARGS("TBL";"/CMD=8"). Но надо помнить, что помимо этого передается еще группа индексов (лист, шейп ...), их придется симитировать. В принципе это возможно, так как передаются они строковыми переменными. Прибавляет забот сложная структура шейпа (он представляет собой группу - то есть шейп, имеющий свою коллекцию шейпов).
Опять же существуют операции выхдящие на дополнительный диалог со стороны AddOn, такими операциями командовать программно скорее всего не удастся.
Короче, если все это просуммировать, то напрашивается вывод: Управлять таким шейпом программно сложно будет не только чайнику, но и серьезному специалисту. Затраты на исследования сравнимы с разработкой своего аналога и не гарантируют результата.
------------
2. По поводу дополнительного вопроса.
Я бы не стал пытаться напрямую вызывать функцию одного приложения (клиентского) из другого (Visio). Более привычными выглядят два других варианта:
1) Вызов приложения с параметром, указывающим, какую функцию надо выполнить, опять же типа =RUNADDONWARGS("TBL";"/CMD=8");
2) Механизм, аналогичный обработке событий Visio в клиентском приложении.
Судя по описанию, в данном случае больше подходит именно второй способ, хотя он и несколько сложнее.
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)