2016-08-12 89 views
1

我想为TStringGrid实现一个FillCell过程。我想用某种颜色填充某个单元格,但仅当单元格(行)没有被选中时填充。TStringGrid:是否有可能找出单元格的“状态”?

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

你什么时候调用'FillCell'?针对哪个事件? 'OnDrawCell'提供绘制状态。 –

+0

OnDraw。我知道你会建议:通过国家作为参数。但是我想知道是否有可能在没有通过参数的情况下找到状态。 – Ampere

+1

你为什么要这么做?你已经有了正确的解决方案。传递参数。 –

回答

2

根据评论,您从OnDrawCell处理程序调用此函数。 OnDrawCell处理程序将传递一个TGridDrawState参数,该参数指定是否选择该单元格。事件处理程序是这样的形式:

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

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

  • 您有可用的行和列。这标识了单元格,您可以检查单元格是否在当前选择中。
  • 如果您还想忽略行和列,那么您可以检查提供的TRect。将其映射回行和列,然后再次检查当前选择。

坦率地说,你所要做的是愚蠢的,在我看来。您有充足的理由提供了绘画状态。它有你需要的信息。用它。

相关问题