Author |
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 и из списка выбирается нужная страница перехода. После этого при двойном щелчке по шейпу будет осуществляться переход на указанную страницу. Если этого не хватит, то можно поискать и другие (более сложные) варианты. |
|
|
Gane
16 Posts |
Posted - 05/09/2009 : 08:59:07
|
Ой, забыла указать что вопрос заключается в том, как это сделать программно, функциями Visio SDK... |
|
|
Tumanov
Russia
1198 Posts |
Posted - 05/09/2009 : 10:05:48
|
Тогда придется еще и рассказывать, что Вы понимаете под словами "это сделать программно" Если только записать способность перехода по двойному клику, то нужно будет вписать в ячейку EventDblClick соответствующего шейпа что-то вроде =GOTOPAGE("Page-1"). Или задача другая?
|
|
|
Gane
16 Posts |
Posted - 05/09/2009 : 11:08:26
|
Задача состоит в том, чтобы получить доступ ко всем шейпам, находящимся внутри данного (получить их имя, связи между ними и тд). То есть, допустим, внутри некоторого составного состояния я нарисовала 2 простых и переход между ними (на той отдельной странице). Вот к ним я и хочу получить доступ. При этом я должна знать, что это не просто абстрактные состояния и переход, а что они являются внутренними для данного конкретного составного состояния. |
|
|
Gane
16 Posts |
Posted - 05/09/2009 : 11:11:28
|
Конечная задача состоит в генерации кода по диаграмме (если это поможет пониманию...) |
|
|
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. Значит, попав на нужную страницу, Вы можете просмотреть все шейпы и выбрать имена и связи.
|
|
|
Gane
16 Posts |
Posted - 05/09/2009 : 12:24:13
|
Спасибо большое, буду пробовать :) |
|
|
Gane
16 Posts |
Posted - 05/28/2009 : 15:22:31
|
Не могу найти способ, как программно обратиться к аддон-у :( Я это делала только через меню, а в данном случае это не подходит... |
|
|
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 |
|
|
|
Topic |
|