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);
我们的产品使用所有者绘制的网格 (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);