dbgrid_zebrado
Estou com um problrma em criar um dbgrod zebrado. BOm eu sei como fazer o problrma é o seguinte.
Eu tenho uma listagem de riscos so que alguns riscos tem cores diferentes, se eu aplico esta cor apenas na coluna por exemplo [2] eu perco a zebragem do grid entendeu, da mesmoa forma quando eu utilizo um figura como um chekbox, se eu utilizo a figura no grid eu pergo a zebragem também.
Commando que uso
if not odd(DM.cds_listaempresa.RecNo) then
if not(gdSelected in State) then
begin
if DM.cds_parametros.fieldbyname('cor').AsInteger = 0 then
begin
DBGrid1.Canvas.Brush.Color := $00E6FFEB ;
DBGrid1.Canvas.FillRect(Rect);
DBGrid1.DefaultDrawDataCell(rect,Column.Field,State);
end
else
begin
DBGrid1.Canvas.Brush.Color := clSkyBlue ;
DBGrid1.Canvas.FillRect(Rect);
DBGrid1.DefaultDrawDataCell(rect,Column.Field,State);
end;
end; este comando eu uso mas quando pinto um célula específica ou coloca uma figura eu perco estas configurações
if not(gdSelected in State) then
begin
if DM.cds_parametros.fieldbyname('cor').AsInteger = 0 then
begin
DBGrid1.Canvas.Brush.Color := $00E6FFEB ;
DBGrid1.Canvas.FillRect(Rect);
DBGrid1.DefaultDrawDataCell(rect,Column.Field,State);
end
else
begin
DBGrid1.Canvas.Brush.Color := clSkyBlue ;
DBGrid1.Canvas.FillRect(Rect);
DBGrid1.DefaultDrawDataCell(rect,Column.Field,State);
end;
end; este comando eu uso mas quando pinto um célula específica ou coloca uma figura eu perco estas configurações
Jose Boas
Curtidas 0
Respostas
Jose Boas
05/11/2009
Este comando que mandei é somente para deixar o dbgrid zebrado para mudar de cor so as celulas que eu utilizo eu faço assim.
Fonte inteiro
procedure TFrmEmpresaSetor.DBGrid3DrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
begin
inherited;
// pintar somente a celula if DMConsulta.cds_conaux2.FieldByName('codcor').AsInteger = 1 then
begin
DBGrid3.Columns[3].Color := clYellow ;
DBGrid3.Columns[3].Font.Color := clYellow;
end
else
begin
DBGrid3.Columns[3].Color := clBlue;
DBGrid3.Columns[3].Font.Color := clBlue;
end;
// dbgrid zebrado if not odd(DM.cds_listasetatu.RecNo) then
if not(gdSelected in State) then
begin
if DM.cds_parametros.fieldbyname('cor').AsInteger = 0 then
begin
DBGrid2.Canvas.Brush.Color := $00E6FFEB ;
DBGrid2.Canvas.FillRect(Rect);
DBGrid2.DefaultDrawDataCell(rect,Column.Field,State);
end
else
begin
DBGrid2.Canvas.Brush.Color := clSkyBlue ;
DBGrid2.Canvas.FillRect(Rect);
DBGrid2.DefaultDrawDataCell(rect,Column.Field,State);
end;
end; end;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
begin
inherited;
// pintar somente a celula if DMConsulta.cds_conaux2.FieldByName('codcor').AsInteger = 1 then
begin
DBGrid3.Columns[3].Color := clYellow ;
DBGrid3.Columns[3].Font.Color := clYellow;
end
else
begin
DBGrid3.Columns[3].Color := clBlue;
DBGrid3.Columns[3].Font.Color := clBlue;
end;
// dbgrid zebrado if not odd(DM.cds_listasetatu.RecNo) then
if not(gdSelected in State) then
begin
if DM.cds_parametros.fieldbyname('cor').AsInteger = 0 then
begin
DBGrid2.Canvas.Brush.Color := $00E6FFEB ;
DBGrid2.Canvas.FillRect(Rect);
DBGrid2.DefaultDrawDataCell(rect,Column.Field,State);
end
else
begin
DBGrid2.Canvas.Brush.Color := clSkyBlue ;
DBGrid2.Canvas.FillRect(Rect);
DBGrid2.DefaultDrawDataCell(rect,Column.Field,State);
end;
end; end;
GOSTEI 0
Rodrigo Mourão
05/11/2009
Olá Amigo, so para eu entender. Voce tem um DBGrid zebrado porem existe um campo risco, que dependendo do risco tera um cor. MAs minha dúvida e a seguinte, voce quer trocar so a cor da coluna do risco, seria isso ? Exemplo:
Linha azul CampoRiscoVermelho
Linha verde CampoRiscoVermelho
Linha azul CampoRiscoVerde
Linha verde CampoRiscoAmarelo
Linha azul CampoRiscoVermelho
Linha verde CampoRiscoVerde
Fico no aguardo !!!
Abs !!
Linha azul CampoRiscoVermelho
Linha verde CampoRiscoVermelho
Linha azul CampoRiscoVerde
Linha verde CampoRiscoAmarelo
Linha azul CampoRiscoVermelho
Linha verde CampoRiscoVerde
Fico no aguardo !!!
Abs !!
GOSTEI 0
Jose Boas
05/11/2009
Isso . Os campo risco possui cores diferentes , eu tenho que mudar esta cor de acordo com o riscos mas so na coluna relacionada e não posso perder o grid zebrado. O grid tem que permanecer zebrado, porém a coluna risco tem que estar de cor diferente.
2 vermelho
3 azul
GOSTEI 0
Rodrigo Mourão
05/11/2009
Perfeito, vou fazer uns teste aqui e de posto um exemplo.
Abs !!!
Abs !!!
GOSTEI 0
Rodrigo Mourão
05/11/2009
Olá Amigo, va no evento OnDrawCollumCell e experimente o código abaixo:
//zebrado
If odd(Table1.RecNo) then
begin
DBGrid1.Canvas.Font.Color:= clWhite;
DBGrid1.Canvas.Brush.Color:= clGreen;
end
else
begin
DBGrid1.Canvas.Font.Color:= clBlack;
DBGrid1.Canvas.Brush.Color:= clWhite;
end;
//Mudar cor da linha selecionada
//Habilitar o RowSelected em options para melhor efeito
if gdSelected in state then
begin
DBGrid1.Canvas.Font.Color:= clWhite;
DBGrid1.Canvas.Brush.Color:= clBlue;
end;
//Mudar a cor Da Coluna do campo PaymentMethod dependendo do valor
if Column.Field.FieldName = 'PaymentMethod' then
begin
DBGrid1.Canvas.Font.Color:= clBlack;
if Column.Field.AsString = 'Credit' then DBGrid1.Canvas.Brush.Color:= clYellow;
if Column.Field.AsString = 'check' then DBGrid1.Canvas.Brush.Color:= clBlack;
if Column.Field.AsString = 'Visa' then DBGrid1.Canvas.Brush.Color:= clBtnFace;
if Column.Field.AsString = 'Cod' then DBGrid1.Canvas.Brush.Color:= clRed;
if Column.Field.AsString = 'MC' then DBGrid1.Canvas.Brush.Color:= clCream;
if Column.Field.AsString = 'AmEx' then DBGrid1.Canvas.Brush.Color:= clDkGray;
end;
DBGrid1.Canvas.FillRect(Rect);
DBGrid1.Canvas.TextOut(Rect.Left+2,Rect.Top,Column.Field.AsString);
end;
Troque Table1 pelo nome da sua tabela.
Troque DBGrid1 pelo nome do seu DBGrid.
Troque PaymentMethod pelo nome do campo que vc quer verificar para trocar a cor.
Troque os valores
'Credit'
'check'
'Visa'
'Cod'
'MC'
'AmEx'
pelos seus valores.
No mais estou a disposição.
//zebrado
If odd(Table1.RecNo) then
begin
DBGrid1.Canvas.Font.Color:= clWhite;
DBGrid1.Canvas.Brush.Color:= clGreen;
end
else
begin
DBGrid1.Canvas.Font.Color:= clBlack;
DBGrid1.Canvas.Brush.Color:= clWhite;
end;
//Mudar cor da linha selecionada
//Habilitar o RowSelected em options para melhor efeito
if gdSelected in state then
begin
DBGrid1.Canvas.Font.Color:= clWhite;
DBGrid1.Canvas.Brush.Color:= clBlue;
end;
//Mudar a cor Da Coluna do campo PaymentMethod dependendo do valor
if Column.Field.FieldName = 'PaymentMethod' then
begin
DBGrid1.Canvas.Font.Color:= clBlack;
if Column.Field.AsString = 'Credit' then DBGrid1.Canvas.Brush.Color:= clYellow;
if Column.Field.AsString = 'check' then DBGrid1.Canvas.Brush.Color:= clBlack;
if Column.Field.AsString = 'Visa' then DBGrid1.Canvas.Brush.Color:= clBtnFace;
if Column.Field.AsString = 'Cod' then DBGrid1.Canvas.Brush.Color:= clRed;
if Column.Field.AsString = 'MC' then DBGrid1.Canvas.Brush.Color:= clCream;
if Column.Field.AsString = 'AmEx' then DBGrid1.Canvas.Brush.Color:= clDkGray;
end;
DBGrid1.Canvas.FillRect(Rect);
DBGrid1.Canvas.TextOut(Rect.Left+2,Rect.Top,Column.Field.AsString);
end;
Troque Table1 pelo nome da sua tabela.
Troque DBGrid1 pelo nome do seu DBGrid.
Troque PaymentMethod pelo nome do campo que vc quer verificar para trocar a cor.
Troque os valores
'Credit'
'check'
'Visa'
'Cod'
'MC'
'AmEx'
pelos seus valores.
No mais estou a disposição.
GOSTEI 0
Rodrigo Mourão
05/11/2009
Olá amigo,
O código ajudou ?
Estamos aguardando para encerrar o chamado !!!
Abs!!
O código ajudou ?
Estamos aguardando para encerrar o chamado !!!
Abs!!
GOSTEI 0
Jose Boas
05/11/2009
Deu certo . Eu testei e tudo ok
GOSTEI 0