Fórum Como criar um Procedura para o Evento OnDrawColumnCell #471672
01/03/2014
0
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:
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:
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!
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
Curtir tópico
+ 0
Responder
Posts
06/03/2014
Alan Souza
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;
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)