All Forums
 Категория Visio
 Форум Вопросы и ответы
 OLE-automation: программная смена заливки смарт-ше
Author Previous Topic Topic Next Topic  

Dimas51

3 Posts

Posted - 02/05/2004 :  03:02:35
Проблема такая:
В С++ программе получаем ссылку на нужный шейп в документе:
1) shape = visio_page.OlePropertyGet("Shapes",Sh_name);
2)Получаем доступ к ячейке, хранящей формулу цвета заливки [FillForegnd]
clr_cell = shape.OlePropertyGet("CellsSRC",1,3,0);
3)Меняем значение формулы
clr_cell.OlePropertySet("FormulaForce","=2")
Это работает для простых шейпов. Для сложных смарт-шейпов, состоящих из множества составляющих это не катит. Однако через GUI Visio заливка меняется. Как это можно сделать программно?



Дмитрий

Tumanov

Russia
1198 Posts

Posted - 02/05/2004 :  04:47:27
Дело в том, что сложный шейп с программной точки зрения является коллекцией простых шейпов. Но сам он тоже шейп. И попытка его перекрашивания не действует на входящие. Нужно разбирать эту коллекцию и перекрашивать все входящие шейпы.
Другой вариант - выбрать самый видимый из входящих и перекрашивать только его. Можно сделать его специально (предварительно накрыть сложный шейп еще одним дополнительным, предназначенным для перекрашивания).
Go to Top of Page

Dimas51

3 Posts

Posted - 02/05/2004 :  05:29:55
"предварительно накрыть сложный шейп еще одним дополнительным, предназначенным для перекрашивания" - что-то я не совсем понял: Нужно включить в смарт-шейп простой шейп, который перекрашивать или как? И как все-таки сама Visio решает эту задачу - проходит по всем составляющим смарт-шейпа?

Дмитрий
Go to Top of Page

Dimas51

3 Posts

Posted - 02/05/2004 :  06:00:53

Вроде бы решил проблему - группирую сложный шейп с простым (нарисовал на коммутаторе что-то вроде индикатора) прямоугольником и меняю его заливку.

Тогда еще вопрос вдогонку: Что означает фраза, когда я даю для смарт-шейпа команду "Разгруппировать" :"Это действие приведет к разрыву связи между объектом и его матером". Если шейп после этого снова сгруппировать, то заливка работает, но теряются специфические свойства смартшейпа. Что есть МАСТЕР?

Дмитрий
Go to Top of Page

Tumanov

Russia
1198 Posts

Posted - 02/05/2004 :  16:00:36
Мастер - это как штамп, эталон. Мастер размещается на трафарете (левая поляна). Когда мастер переносится на лист рисунка, делается его копия. Свойства капии такие же, как у мастера.

Кроме нормальных трафаретов (видимых) есть еще один специальный (чаще всего он не открыт) - трафарет документа (Document Stencil). Все мастера, которые попадают на рисунок, копируются еще и в этот трафарет. Если изменить мастер в этом трафарете, то все копии его на рисунке изменятся также. Вот это и есть та связь. Если шейп разгруппировать, потом опять сгруппировать, то он становится другим и эта связь теряется.

Так не нужно его разгруппировывать. Подредактировать можно либо исходный мастер на трафарете (открыв его для редактирования), либо мастер в трафарете документа (это будет влиять только на текущий документ). Редактировать можно без разгруппировывания, выполнив команду Edit / Open Group. При этом специфические свойства потеряться не должны.

А структура шейпа хорошо просматривается специальным эксплорером, который включается по View / Drawing Explorer Window. Очень полезная штука.
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)