TStringGrid:是否有可能找到“状态”。细胞?

时间:2016-08-12 10:20:17

标签: delphi graphics vcl delphi-xe7 tstringgrid

我想为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是非常复杂的。

1 个答案:

答案 0 :(得分:2)

根据评论,您从OnDrawCell处理程序调用此函数。该OnDrawCell处理程序传递TGridDrawState参数,该参数指定是否选择了单元格。事件处理程序具有以下形式:

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

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

  • 您可以使用行和列。这标识了单元格,您可以检查单元格是否在当前选择中。
  • 如果您还想忽略行和列,则可以检查提供的TRect。将其映射回行和列,然后再次针对当前选择进行检查。
坦率地说,在我看来,你想做的事情是愚蠢的。你有充分的理由获得了抽奖状态。它拥有您需要的信息。使用它。