选定的stringgrid行的正常colo(u)r是多少?

时间:2012-10-25 01:15:20

标签: delphi winapi tstringgrid

我正在覆盖OnDrawCell字符串网格。在某些情况下,我想使用系统执行绘图时所用行的常规TColor(无OnDrawCell)。

那是哪个colo(你)? clXXX?

1 个答案:

答案 0 :(得分:11)

在Delphi 2010之前,您可以使用clHighlight颜色。

在Delphi 2010中,TStringGrid,TDrawGrid和TDBGrid组件现在具有DrawingStyle属性,并且根据此值(gdsClassic,gdsGradient,gdsThemed),您必须以这种方式计算颜色。

1.for gdsClassic 使用clHighlight;

2.for gdsGradient 使用GradientFillCanvas方法

GradientFillCanvas(Canvas, GetShadowColor(clHighlight, 45), GetShadowColor(clHighlight, 10), LRect, gdVertical);

3.对于 gdsThemed 调用DrawElement

TCustomStyleServices方法
StyleServices.DrawElement(Canvas.Handle, StyleServices.GetElementDetails(tgCellSelected), LRect, ARect);

在Delphi XE2(和XE3)中引入了vcl样式,你必须使用与上面相同但检查当前样式是否为“自定义样式”(vcl样式)

1.for gdsGradient 使用GradientFillCanvas方法以这种方式计算渐变的颜色

StyleServices.GetElementColor(StyleServices.GetElementDetails(tgGradientCellRowSelectedRight), ecGradientColor1, StartColor); //StartColor is a TColor variable
StyleServices.GetElementColor(StyleServices.GetElementDetails(tgGradientCellRowSelectedRight), ecGradientColor2, EndColor);//EndColor is a TColor variable

2.for gdsClassic

StyleServices.GetElementColor(StyleServices.GetElementDetails(tgClassicCellRowSelectedRight), ecFillColor, LColor); //LColor is a TColor variable

如果您想检查VCL如何绘制选定(突出显示的)单元格/行的示例,请尝试执行TCustomGrid.DrawCellHighlight方法。