【问题标题】:MSVisio Characters custom colorMSVisio 字符自定义颜色
【发布时间】:2019-07-15 01:46:39
【问题描述】:

我知道,我可以通过这种方式更改所有形状文本的颜色:

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 或任何类型)颜色值传递给形状中的某些字符。我不想把形状切成小形状。

你能帮忙吗?谢谢

【问题讨论】:

    标签: c# .net vba visio


    【解决方案1】:

    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)";
    

    这应该会给你类似的结果:

    [更新] 以上假设您正在针对现有格式并对其进行更改。要添加新运行,您可以先使用 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)";
    

    ...这应该会导致以下结果:

    【讨论】:

    • 感谢您的回答 :) 我不知道为什么,但这会更改形状中所有字符的颜色,并且不会更改此形状中其他字符的颜色。所以代替这个:{RED}Good{/RED} {BLUE}Morning{/BLUE} 改为:{RED}Good Morning{/RED}
    • 抱歉,我假设您的目标是具有现有格式的形状(多个字符部分行)。如果你不这样做,那么你需要首先使用 set_CharProps 添加一个新的运行,也许将它设置为 visBlack,然后使用你的自定义行调用来跟随它。我会更新答案。
    • 非常感谢 :) 这终于解决了我的问题。
    猜你喜欢
    • 2021-05-25
    • 2019-05-16
    • 2020-06-01
    • 1970-01-01
    • 2018-07-20
    • 2019-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多