2016-08-12 60 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。將其映射回行和列,然後再次檢查當前選擇。

坦率地說,你所要做的是愚蠢的,在我看來。您有充足的理由提供了繪畫狀態。它有你需要的信息。用它。

相關問題