Como criar um Procedura para o Evento OnDrawColumnCell

Delphi

01/03/2014

Olá Pessoal,

A minha duvida em questão é que eu tenho vários Grids que utilizam o mesmo código no Evento OnDrawColumnCell onde a unica coisa que muda é o TDataSource que é utilizado nele.

Eu sei que para criar uma procedure para utilizar como parametro um TDataSource é só fazer:
procedure Grid(DTS : TDataSource);


Mais a questão é que o código que eu quero colocar em um procedure tem o parametro State : TGridDrawState que pertence ao Evento OnDrawColumnCell. Portanto quando eu passo o código para um procedure que eu criei ele não consegue achar o State : TGridDrawState.

O código que estou tentando colocar em um procedure é este:
    if not odd(dtsConsultarKit.DataSet.RecNo) then
    begin
      dbConsultarKit.Canvas.Brush.Color := clRed;
    end
    else
    begin
      dbConsultarKit.Canvas.Brush.Color := clWhite;
    end;
    if gdSelected in State then
  begin
    with (Sender as TDBGrid).Canvas do
    begin
      Brush.Color := clYellow;
      FillRect(Rect);
      //Font.Style := [fsbold]
    end;
  end;
  TDbGrid(Sender).DefaultDrawDataCell(Rect, TDbGrid(Sender).columns[datacol].field, State);


Como podem ver ele utiliza o State que pertence ao Evento OnDrawColumnCell, e se eu criar um procedure procedure Grid(DTS : TDataSource) ele vai ficar exigindo o State e eu gostaria de saber se isso é possivel passar para a procedure que eu criei para colocar o código la dentro, para não ficar 6 código repetidos e sim so precisar passar um parametro por uma procedure.

Desde já agradecido!
Edson Vilhalba

Edson Vilhalba

Curtidas 0

Respostas

Alan Souza

Alan Souza

01/03/2014

dá pra pegar o DataSource direto pelo typecast que você já faz pro resto.
with TDbGrid(Sender) do
begin
  if not odd(DataSource.DataSet.RecNo) then
  begin
    Canvas.Brush.Color := clRed;
  end
  else
  begin
     Canvas.Brush.Color := clWhite;
  end;
  if gdSelected in State then
begin
  Canvas.Brush.Color := clYellow;
  Canvas.FillRect(Rect);
  //Canvas.Font.Style := [fsbold]
end;
DefaultDrawDataCell(Rect, Columns[datacol].Field, State);
end;
GOSTEI 0
POSTAR