Author |
Topic |
|
xstar
Russia
3 Posts |
Posted - 03/20/2003 : 04:16:43
|
Как программно добраться до свойств шейпа (Properties)? В Cells их не видно. Например у шейпа Class есть много свойств(Attributes,Operations) - там довольно большой уровень вложенности и их нигде не видно |
|
Tumanov
Russia
1198 Posts |
Posted - 03/20/2003 : 11:49:14
|
Попробую не только ответить, но и показать подход. Начинаем исследования. Создаем рисунок UML и бросаем всего один шейп Class (о нем шла речь в примере). Нажимаем View / Drawing Explorer Window и раскрываем в дереве Foregorund Pages. Видим последовательно вложенные Static Structure-1, Shapes, Class. Это наш первый шейп Class на рисунке. Пытаемся раскрыть дальше и видим, что в нем появляются еще Shapes и целая линейка из 8 шейпов. Вот они наши Attributes, Parameters и т.д. Вывод - Class представляется вроде как группой из восьми шейпов, каждый из которых несет свою информацию. Как несет - пока не видно. Чтобы было, что искать, задаем пару атрибутов. Например attribute1 : Short и attribute2 : bool. Сохраняем рисунок в виде XML, открываем в текстовом редакторе и даем поиск "attribute1". Ну, вот оно и проявилось - <Text><cp IX='0'/>-attribute1 : Short -attribute2 : bool</Text>. То есть искомые атрибуты хранятся внутри группы в шейпе Attributes в виде обычного текста. Проверяем из VBA: Sub ttt() MsgBox ActivePage.Shapes(1).Shapes.Count MsgBox ActivePage.Shapes(1).Shapes(6).Name MsgBox ActivePage.Shapes(1).Shapes(6).Text End Sub Видим последовательно: 8 - (число шейпов в группе) Attributes - (шестой шейп - этот как раз шейп Attributes) attribute1 : Short attribute2 : bool А это значения атрибутов, которые мы и ожидали увидеть. Все (вкратце) |
|
|
AsTeRiX
11 Posts |
Posted - 02/27/2008 : 12:28:12
|
Скажите, а в 2007 что-то поменялось? Метод Shapes не хочет принимать никаких параметров. Сам шейп на листе получила через:
shapes = page.Shapes(); shape = shapes.Item(1);
(работаю во внешнем приложении через ком-объекты)
А получить атрибуты не могу :( Что не так?
UPD. Уфф, получлось :)
shapes = page.Shapes(); shape = shapes.Item('Class'); attShapes = shape.Shapes(); attShape = attShapes.Item(6); |
Edited by - AsTeRiX on 02/27/2008 14:47:10 |
|
|
AsTeRiX
11 Posts |
Posted - 02/28/2008 : 10:27:03
|
И снова вопрос по атрибутам/операциям класса, помогите люди добрые :)
Как програмно добавить новый атрибут в shape класс? Пробовала даже не добавить а заменить текст на такой же - не получается:
//получили шейп атрибуты attShape = attShapes.Item(6);
//запомнили существующий текст tmpText = attShape.Text();
//пытаемся поставить заново этот же текст attShape.Text(tmpText);
В итоге получаю ошибку: "Method 'Text' in COM object of class 'IVShape' returned error code 0x86DB089A(<unknown>) which means: Requested operation is presently disabled".
При этом имя класса меняется без проблем тем же способом. Если менять через Characters - результат тот же. Вообще это возможно - добавлять новые атрибуты програмно?
(Версия визио 2007)
|
Edited by - AsTeRiX on 02/28/2008 10:28:15 |
|
|
AsTeRiX
11 Posts |
Posted - 03/03/2008 : 10:13:53
|
Для информации, вдруг кто еще будет извращаться так же:
Текст в атрибуты можно добавить, стоит только установить значение ячейки LockTextEdit в 0 (позволит редактировать текст шейпа атрибутов). Но положение это никак не спасает - когда вы откроете проперти то атрибуты будут пустыми. И если добавить новый атрибут через проперти, это перезатрет текст, добавленный програмно. Вот что нашла на буржуинском форуме:
"You're probably going to see some of that because the UML solution uses proprietary code and hidden data structures that are not ailable externally. "
вот :( кстати, хороший вроде форум по визио, рекомендую http://www.talkaboutsoftware.com/index.php (там внизу ветки по визио - Visio developer, Visio Modeling и тп) |
Edited by - AsTeRiX on 03/03/2008 10:35:44 |
|
|
Tumanov
Russia
1198 Posts |
Posted - 03/03/2008 : 15:38:28
|
Спасибо за хорошую ссылочку. |
|
|
|
Topic |
|
|
|