フォーム全体ですべてのグリッドを同じように表示するにはどうすればよいですか? プロジェクトのすべてのグリッドに適用する必要がある代替行の色を実装したいと考えています。すべてのグリッドに同じ DrawColumnCell イベント コードを追加しなくても可能ですか? 各グリッドに同じコードを追加することは避けたいと考えています。私のプロジェクトには 30 個のグリッドがあり、13 行のコードを掛けると、プロジェクトに多くのコード行が追加されて「使いにくい」ものになります。プロジェクトに 390 行ではなく、13 行のコードしか追加しないソリューションを探しています。
私の書式設定コードは次のようになります(たとえば):
procedure TDBGrid.DBGrid1DrawColumnCell(Sender: TObject;const Rect: TRect;DataCol: Integer;Column: TColumn;State: TGridDrawState) ;
var
grid : TDBGrid;
row : integer;
begin
grid := sender as TDBGrid;
row := grid.DataSource.DataSet.RecNo;
if Odd(row) then
grid.Canvas.Brush.Color := clSilver
else
grid.Canvas.Brush.Color := clDkGray;
grid.DefaultDrawColumnCell(Rect, DataCol, Column, State) ;
end;
おそらく、どうにかしてDBGridを拡張する必要がありますが、Googleでこれに対する解決策を探す方法も方法も正確にはわかりません
次のように、各フォーム内の DBGRid をハックしようとしました。
type
TDBGrid = class(DBGrids.TDBGrid)
protected
procedure DrawColumnCell(const Rect: TRect; DataCol: Integer;Column: TColumn; State: TGridDrawState); override;
end;
...
procedure TDBGrid.DrawColumnCell(const Rect: TRect; DataCol: Integer;Column: TColumn; State: TGridDrawState) ;
var
grid : TDBGrid;
row : integer;
begin
row := 2;//grid.DataSource.DataSet.RecNo;
if Odd(row) then
Canvas.Brush.Color := clSilver
else
Canvas.Brush.Color := clDkGray;
DefaultDrawColumnCell(Rect, DataCol, Column, State) ;
end;
これはできますが、送信者にアクセスできないため、データセットにアクセスして、どのレコードに色を付け、どのレコードに色を付けないか (奇数と偶数) を知ることができます。とにかく、これはすべてのフォームで行う必要があるため、貧弱なアプローチであるため、実際には解決策ではありません
何か案は?
ありがとうございました