【问题标题】:Ownerdraw VCL grids not picking expected selected colour for VCL StyleOwnerdraw VCL 网格没有为 VCL 样式选择预期的选定颜色
【发布时间】:2016-12-23 09:41:53
【问题描述】:

我们的产品使用自绘网格 (TStringGrid) - 我们将所有内容都从网格中绘制出来。我试图尊重应用程序使用的 VCL 样式。这大部分都有效,但是当我尝试为网格获取选定的颜色时,它要么看起来是黑色(当使用的样式已经很暗时不太好),要么看起来是随机的渐变。这是我用来获取所选颜色的代码(可能是我使用了错误的元素或ElementColor 来获取预期的颜色)。

    StyleServices.GetElementColor (StyleServices.GetElementDetails (tgCellSelected), ecFillColor, theColor);

任何帮助将不胜感激。谢谢

【问题讨论】:

    标签: delphi vcl-styles


    【解决方案1】:

    并非所有TElementColor (ecBorderColor, ecFillColor, ecTextColor, ..) 都是为所有可能的TThemedElementDetails 定义的,因此您必须始终检查GetElementColor 函数返回的布尔结果。

    如果结果为假,则表示未定义颜色。在您的情况下,当元素为tgCellSelected 时,没有为ecFillColor 定义颜色值。

    试试这个示例,它使用 tgClassicCellSelected 元素代替,如果不存在,则使用活动 VCL 样式的 HighLight 颜色。

    if not StyleServices.GetElementColor(StyleServices.GetElementDetails(tgClassicCellSelected), ecFillColor, AColor) then
     AColor := StyleServices.GetSystemColor(clHighlight);
    

    【讨论】:

    • 我已经尝试将它设置为每种类型的元素,并按照您的建议选择了tgFixedCellNormal。回退也很好。谢谢(再次)
    猜你喜欢
    • 2013-11-07
    • 1970-01-01
    • 2022-01-07
    • 1970-01-01
    • 1970-01-01
    • 2012-08-25
    • 1970-01-01
    • 1970-01-01
    • 2012-04-20
    相关资源
    最近更新 更多