TStringGrid:是否可以找出一个单元格的'State'?

TStringGrid: Is it possible to find out the 'State' of a cell?

我想为 TStringGrid 实现一个 FillCell 过程。我想用颜色填充某个单元格,但只有当单元格(行)未被选中时。

procedure TMyStrGrid.FillCell(Rect: TRect; aColor: TColor);
begin
 //if NOT (gdSelected in State) then    <---- how do I obtain the 'State' here?
   begin
    Canvas.Brush.Color:= aColor;
    Canvas.FillRect(Rect);
   end;
end;

这只是一个练习 :) 我正在尝试找出 VCL.Grids.pas 这相当复杂。

根据评论,您正在从 OnDrawCell 处理程序调用此函数。该 OnDrawCell 处理程序传递了一个 TGridDrawState 参数,该参数指定是否选择了单元格。事件处理程序是这种形式:

TDrawCellEvent = procedure (Sender: TObject; ACol, ARow: Longint;
  Rect: TRect; State: TGridDrawState) of object;

您问的是是否可以忽略 TGridDrawState 并在以后以某种方式恢复信息。原则上是可以的:

  • 您有可用的行和列。标识单元格,您可以检查单元格是否在当前选择中。
  • 如果您还想忽略行和列,那么您可以检查提供的 TRect。将其映射回行和列,并根据当前选择再次检查它。

坦率地说,在我看来,您的尝试很愚蠢。为您提供绘图状态是有充分理由的。它有你需要的信息。使用它。