我正试图弄清楚如何根据数据集中包含的另一列中的值来更改 Delphi TGrid(FMX)的背景颜色。显然有“DrawColumnBackground”事件用于此目的,但我不知道如何访问网格/数据集中的另一个值来确定渲染的颜色。我已经附上了一张图片,显示“RowMod”列,应用于确定背景颜色,而不是替代BG颜色正在使用。
procedure GridDrawColumnBackground(Sender: TObject; const Canvas: TCanvas; const Column: TColumn;
const Bounds: TRectF; const Row: Integer; const Value: TValue; const State: TGridDrawStates);
var
OldKind: TBrushKind;
OldColor: TAlphaColor;
begin
if [Get-RowMod-Value] = 1 then // <-- How to get this cell value?
begin
OldKind := Canvas.Fill.Kind;
OldColor := Canvas.Fill.Color;
Canvas.Fill.Color := TAlphaColorRec.Yellow;
Canvas.Fill.Kind := TBrushKind.Solid;
Canvas.FillRect(Bounds, 0, 0, AllCorners, 1);
Canvas.Fill.Color := OldColor;
Canvas.Fill.Kind := OldKind;
end;
end;
2条答案
按热度按时间bybem2ql1#
这个案例将突出一些意想不到的事情:TGrid不存储数据值,而是显示数据!
在假期,我不会解释如何做,但给予你一个链接网格和Livebindings(法语),我解释如何覆盖这一点
0s7z1bwu2#
我最终切换到了一个带有DrawColumnCell事件的TStringGrid,如下所示。没有任何简单的方法来做,否则,所以将不得不处理的细胞绘图手动这将提供更大的灵活性,在一些实质性的编码为代价。
生成的网格如下图所示。为了实现选中行的高亮显示,需要在TAlphaColor中设置Alpha透明度,我将其设置为32(十六进制代码的前2位为#20或$20)。