Ownerdraw VCL 网格没有为 VCL 样式选择预期的选定颜色

Ownerdraw VCL grids not picking expected selected colour for VCL Style

我们的产品使用所有者绘制的网格 (TStringGrid) - 我们在其中绘制所有网格。我正试图使这方面成为应用程序使用的 VCL 样式。这大部分都有效,但是当我尝试为网格选择颜色时,它要么看起来是黑色的(当使用的样式已经很暗时效果不佳),要么是看似随机的渐变。这是我用来获取所选颜色的代码(可能是我使用了错误的元素或 ElementColor 来获取预期的颜色)。

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

如有任何帮助,我们将不胜感激。谢谢

并不是所有的 TElementColor (ecBorderColor, ecFillColor, ecTextColor, ..) 都是为所有可能的 TThemedElementDetails 定义的,因此您必须始终检查 [=13= 返回的布尔结果] 功能。

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

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

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