All Forums
 Категория Visio
 Форум Вопросы и ответы
 Извлечеие свойтв шейпа отсутствующих в Cells
Author Previous Topic Topic Next 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
А это значения атрибутов, которые мы и ожидали увидеть.
Все (вкратце)
Go to Top of Page

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
Go to Top of Page

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
Go to Top of Page

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
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 03/03/2008 :  15:38:28
Спасибо за хорошую ссылочку.
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)