我想为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是非常复杂的。
答案 0 :(得分:2)
根据评论,您从OnDrawCell
处理程序调用此函数。该OnDrawCell
处理程序传递TGridDrawState
参数,该参数指定是否选择了单元格。事件处理程序具有以下形式:
TDrawCellEvent = procedure (Sender: TObject; ACol, ARow: Longint;
Rect: TRect; State: TGridDrawState) of object;
您在询问是否可以忽略TGridDrawState
并稍后以某种方式恢复信息。原则上可以:
TRect
。将其映射回行和列,然后再次针对当前选择进行检查。