我想为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
。将其映射回行和列,并再次根据当前选择检查。