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
。将其映射回行和列,并根据当前选择再次检查它。
坦率地说,在我看来,您的尝试很愚蠢。为您提供绘图状态是有充分理由的。它有你需要的信息。使用它。
我想为 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
。将其映射回行和列,并根据当前选择再次检查它。
坦率地说,在我看来,您的尝试很愚蠢。为您提供绘图状态是有充分理由的。它有你需要的信息。使用它。