网格:是否有可能找出细胞的'State'?



我想为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 . grid .pas这是相当复杂的。

根据注释,您正在从OnDrawCell处理程序调用此函数。该OnDrawCell处理程序被传递一个TGridDrawState参数,该参数指定单元格是否被选中。事件处理程序的格式为:

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

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

  • 行和列可用。它标识单元格,你可以检查单元格是否在当前选择中。
  • 如果您也想忽略行和列,那么您可以检查所提供的TRect。将其映射回行和列,并再次根据当前选择检查。
坦率地说,在我看来,你想做的事很愚蠢。为您提供绘制状态是有原因的。里面有你需要的信息。使用它。

最新更新