Как сделать так, чтобы все мои сетки выглядели одинаково во всех формах? Я хочу реализовать альтернативный цвет строки, который должен применяться ко всем сеткам моего проекта. Возможно ли это без добавления одного и того же кода события DrawColumnCell для каждой сетки? Я хочу избежать добавления одного и того же кода для каждой из моих сеток. У меня в проекте около 30 сеток, и умноженное на 13 строк кода, это просто добавляет много строк кода в мой проект, что делает его «недружественным». Я ищу решение, которое добавит в проект только 13 строк кода, а не 390 строк.
Мой код форматирования выглядит так (например):
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, но я не знаю, как именно и как искать решение для этого в гугле.
Я пытался взломать 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;
Я могу это сделать, но я не могу получить доступ к отправителю, поэтому я могу получить доступ к набору данных и узнать, какую запись окрашивать, а какую нет (четную и нечетную). И в любом случае это плохой подход, так как мне придется делать это в каждой форме, так что на самом деле это не решение.
Любые идеи?
Спасибо