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

Gane

16 Posts

Posted - 05/08/2009 :  21:33:30
Здравствуйте!
Я использую диаграмму состояний (StateChart). На первой странице рисую составное состояние. На другой странице оно раскрывается, там разные состояния и переходы, которые внутри составного. Вопрос: как до них добраться из составного шейпа (или просто с главной страницы)?..

Спасибо!

Tumanov

Russia
1198 Posts

Posted - 05/09/2009 :  06:20:42
Могут быть варианты...
1. Если Вы используете шаблон UML Statechart, то диаграмма получает встроенную поддержку переходов. При переносе на страницу мастер-шейпа CompositeState Visio автоматически добавляет страницу, на которой будет раскрываться его содержание. А сам шайп имеет пункт контекстного меню Diagram (по правой кнопке мыши). При выборе этого пункта произойдет переход на нужную страницу.
2. А в произвольном случае для переходов чаще всего пользуются назначением функции перехода на двойной клик. Для шейпа выполняется Format / Behavior, на вкладке Double-click выбирается Go to page и из списка выбирается нужная страница перехода. После этого при двойном щелчке по шейпу будет осуществляться переход на указанную страницу.
Если этого не хватит, то можно поискать и другие (более сложные) варианты.
Go to Top of Page

Gane

16 Posts

Posted - 05/09/2009 :  08:59:07
Ой, забыла указать что вопрос заключается в том, как это сделать программно, функциями Visio SDK...
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 05/09/2009 :  10:05:48
Тогда придется еще и рассказывать, что Вы понимаете под словами "это сделать программно"
Если только записать способность перехода по двойному клику, то нужно будет вписать в ячейку EventDblClick соответствующего шейпа что-то вроде =GOTOPAGE("Page-1").
Или задача другая?
Go to Top of Page

Gane

16 Posts

Posted - 05/09/2009 :  11:08:26
Задача состоит в том, чтобы получить доступ ко всем шейпам, находящимся внутри данного (получить их имя, связи между ними и тд).
То есть, допустим, внутри некоторого составного состояния я нарисовала 2 простых и переход между ними (на той отдельной странице). Вот к ним я и хочу получить доступ. При этом я должна знать, что это не просто абстрактные состояния и переход, а что они являются внутренними для данного конкретного составного состояния.
Go to Top of Page

Gane

16 Posts

Posted - 05/09/2009 :  11:11:28
Конечная задача состоит в генерации кода по диаграмме (если это поможет пониманию...)
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 05/09/2009 :  12:06:59
Это в корне меняет ситуацию
Значит Вам просто понадобились данные модели, которые разработчики приложения UML для Visio тщательно скрывают. То есть официальных путей доступа к этим данным для пользователей не существует.
Опытным путем выяснено, что в аналогичных случаях разработчики засовывают данные модели в виде встроенного объекта в невидимый мастер-шейп в Document Stencil. Приложение их в нужный момент достает и, например, рисует в виде дерева в специальном окошке. В данном случае этот мастер называется UML. В принципе, их можно оттуда достать программно, но так как структура хранения неизвестна, операция эта большого смысла не имеет.
Можно, конечно, попробовать вытаскивать кусочки информации окольными путями...
Например, переход на раскрывающуюся страницу идет через ячейку Actions.Row_1. Там записана формула =RUNADDONWARGS("UML Background Add-on","/CMD=1007")
Так что, если программно обратиться к тому же самому аддону с аналогичными параметрами, мы скорее всего попадем на нужный лист (он станет активным). В приложении скорее всего соблюдается условие - на одном листе раскрывается только один CompositeState. Значит, попав на нужную страницу, Вы можете просмотреть все шейпы и выбрать имена и связи.
Go to Top of Page

Gane

16 Posts

Posted - 05/09/2009 :  12:24:13
Спасибо большое, буду пробовать :)
Go to Top of Page

Gane

16 Posts

Posted - 05/28/2009 :  15:22:31
Не могу найти способ, как программно обратиться к аддон-у :(
Я это делала только через меню, а в данном случае это не подходит...
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 05/28/2009 :  16:16:30
Надо найти соответствующий аддон и сказать ему Run.
Примерно вот так
Public Sub Addons_Example()

Dim vsoAddons As Visio.Addons
Dim vsoAddon As Visio.Addon

Set vsoAddons = Visio.Addons
For Each vsoAddon In vsoAddons
'Debug.Print vsoAddon.Name
If StrComp(vsoAddon.Name, "UML Background Add-on") = 0 Then
MsgBox "UML Background Add-on"
vsoAddon.Run ("/CMD=1001")
End If
Next
End Sub
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)