Author |
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
|
Дело в том, что сложный шейп с программной точки зрения является коллекцией простых шейпов. Но сам он тоже шейп. И попытка его перекрашивания не действует на входящие. Нужно разбирать эту коллекцию и перекрашивать все входящие шейпы. Другой вариант - выбрать самый видимый из входящих и перекрашивать только его. Можно сделать его специально (предварительно накрыть сложный шейп еще одним дополнительным, предназначенным для перекрашивания). |
|
|
Dimas51
3 Posts |
Posted - 02/05/2004 : 05:29:55
|
"предварительно накрыть сложный шейп еще одним дополнительным, предназначенным для перекрашивания" - что-то я не совсем понял: Нужно включить в смарт-шейп простой шейп, который перекрашивать или как? И как все-таки сама Visio решает эту задачу - проходит по всем составляющим смарт-шейпа?
Дмитрий |
|
|
Dimas51
3 Posts |
Posted - 02/05/2004 : 06:00:53
|
Вроде бы решил проблему - группирую сложный шейп с простым (нарисовал на коммутаторе что-то вроде индикатора) прямоугольником и меняю его заливку.
Тогда еще вопрос вдогонку: Что означает фраза, когда я даю для смарт-шейпа команду "Разгруппировать" :"Это действие приведет к разрыву связи между объектом и его матером". Если шейп после этого снова сгруппировать, то заливка работает, но теряются специфические свойства смартшейпа. Что есть МАСТЕР?
Дмитрий |
|
|
Tumanov
Russia
1198 Posts |
Posted - 02/05/2004 : 16:00:36
|
Мастер - это как штамп, эталон. Мастер размещается на трафарете (левая поляна). Когда мастер переносится на лист рисунка, делается его копия. Свойства капии такие же, как у мастера.
Кроме нормальных трафаретов (видимых) есть еще один специальный (чаще всего он не открыт) - трафарет документа (Document Stencil). Все мастера, которые попадают на рисунок, копируются еще и в этот трафарет. Если изменить мастер в этом трафарете, то все копии его на рисунке изменятся также. Вот это и есть та связь. Если шейп разгруппировать, потом опять сгруппировать, то он становится другим и эта связь теряется.
Так не нужно его разгруппировывать. Подредактировать можно либо исходный мастер на трафарете (открыв его для редактирования), либо мастер в трафарете документа (это будет влиять только на текущий документ). Редактировать можно без разгруппировывания, выполнив команду Edit / Open Group. При этом специфические свойства потеряться не должны.
А структура шейпа хорошо просматривается специальным эксплорером, который включается по View / Drawing Explorer Window. Очень полезная штука.
|
|
|
|
Topic |
|
|
|