2012-03-08 16 views
3

DbGrid機能を拡張して、奇数行と偶数行に色を追加したいと考えています。だから私はこれを書いた一部の行の色でDBGridを拡張する

procedure TGridx.DrawCell(ACol, ARow: Longint; ARect: TRect; AState: TGridDrawState); 
var 
    row : Integer; 
begin 
    inherited; 
    row := Self.DataSource.DataSet.RecNo; 
    if (row mod 2 = 0) then 
    Self.Canvas.Brush.Color := FColor1 //some color 
    else 
    Self.Canvas.Brush.Color := FColor2; //some color 

end; 

私は間違って何をしていますか?

+3

[こちら](http://delphi.about.com/od/usedbvcl/a/grid_row_alt_cl.htm)をお試しください。イベントが終了する前に 'inherited'を使用するか、' DefaultDrawColumnCell'を呼び出すことができます。 – kobik

+0

私は両方を試してみましたDefaultDrawColumnCellは、その関数のパラメータを持たないメソッドをオーバーライドしているため、できません – opc0de

答えて

5

希望のイベントはDBGridDrawColumnCellと呼ばれ、DefaultDrawingプロパティをオンまたはオフにするかどうかを決定する必要があり、DBGridDrawColumnCellを処理する方法がそれに応じて変更されます。あなたの場合は、色を設定するだけで、DefaultDrawingはtrueのままにして、他のキャンバスを実行しないでください.TextまたはGDIの描画。

は私がhereを尋ねた最近の質問は、後にDelphiのバージョンで(2010年、キセノン、XE2)あなたも、時には両方のTDBGridとTListViewの、OwnerDrawするイベントでキャンバスのプロパティを変更するためのCanvas.Refreshを呼び出す必要がありますが、それはには適用されないことを示しましたあなたも自由である3Dパーティのソリューションを試してみてください

Self.Canvas.FillRect(ARect); 
+0

ありがとう非常に私はそれを考え出しました。マニーは感謝します。 – opc0de

0

Opc0de、 "DrawCell"メソッドではなく "DrawCellBackground"メソッドをオーバーライドする必要がありますか?

+0

DrawCellBackgroundが基底クラスに見つかりません – opc0de

+0

どのDelphiのバージョンを使用していますか? – Nedko

+0

私はデルファイバージョン7を使用しています – opc0de

0

は、同様にブラシの色が定義された後、セルを描画してみJedi project

1

、および提供のもののように、すでに多くのDBGridを拡張:デルファイ7.

+0

それはラインの検索にもありますか?あなたがキーを押すとその手紙に行きますか? – opc0de

関連する問題