MSVisio Персонажи нестандартного цвета - PullRequest
0 голосов
/ 21 февраля 2019

Я знаю, что я могу изменить цвет всего текста в форме следующим образом:

Shape.CellsU["Char.Color"].FormulaForceU = "RGB(255,255,255)";

Существует также способ изменить цвет определенных символов в форме следующим образом:

Characters.Begin = 2;
Characters.End = 5;    
Characters.set_CharProps((short)MSVisio.VisCellIndices.visCharacterColor, (short)MSVisio.VisDefaultColors.visRed;);

Но я не могу найти способ передать пользовательское значение цвета RGB (или HEX, или любого другого типа) только определенным символам в форме.Я не хочу разрезать фигуры на маленькие фигуры.

Не могли бы вы помочь?Спасибо

1 Ответ

0 голосов
/ 25 февраля 2019

Свойство CharProps позволяет указывать индекс в предопределенной коллекции цветов документа.Для пользовательского RGB вы можете установить соответствующую формулу ячейки, сначала получив индекс строки с помощью CharPropsRow следующим образом:

    var shp = vApp.ActiveWindow.Selection.PrimaryItem;
    var shpChars = shp.Characters;

    shpChars.Begin = 2;
    shpChars.End = 5;
    //shpChars.set_CharProps((short)Visio.VisCellIndices.visCharacterColor, (short)Visio.VisDefaultColors.visRed);

    var targetRow = shpChars.CharPropsRow[0];
    shp.CellsSRC[(short)Visio.VisSectionIndices.visSectionCharacter, 
                 targetRow,
                 (short)Visio.VisCellIndices.visCharacterColor].FormulaU = "RGB(40,220,40)";

, и это должно дать вам аналогичные результаты: enter image description here

[Обновить] Выше предполагается, что вы нацеливаетесь на существующее форматирование и изменяете его.Чтобы добавить новые прогоны, вы можете сначала использовать CharProps, чтобы добавить строку, а затем CharPropsRow, чтобы назначить этот новый прогон.Таким образом, вы можете запустить этот код для новой страницы:

    var vPag = vApp.ActivePage;
    var shp = vPag.DrawRectangle(3,3,5,4);
    shp.Text = "GoodMorning";

    var shpChars = shp.Characters;

    shpChars.Begin = 0;
    shpChars.End = 4;
    var targetRow = shpChars.CharPropsRow[(short)Visio.VisCharsBias.visBiasLetVisioChoose];
    shp.CellsSRC[(short)Visio.VisSectionIndices.visSectionCharacter,
                 targetRow,
                 (short)Visio.VisCellIndices.visCharacterColor].FormulaU = "RGB(220,40,40)";

    shpChars.Begin = 4;
    shpChars.End = 11;
    shpChars.set_CharProps((short)Visio.VisCellIndices.visCharacterColor, (short)Visio.VisDefaultColors.visBlack);
    targetRow = shpChars.CharPropsRow[(short)Visio.VisCharsBias.visBiasLetVisioChoose];
    shp.CellsSRC[(short)Visio.VisSectionIndices.visSectionCharacter,
                 targetRow,
                 (short)Visio.VisCellIndices.visCharacterColor].FormulaU = "RGB(40,200,40)";

... и это должно привести к следующему:

enter image description here

...