dbgrid_zebrado

05/11/2009

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
Jose Boas

Jose Boas

Curtidas 0

Respostas

Jose Boas

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;
GOSTEI 0
Rodrigo Mourão

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 !!

GOSTEI 0
Jose Boas

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

Rodrigo Mourão

05/11/2009

Perfeito, vou fazer uns teste aqui e de posto um exemplo.

Abs !!!
GOSTEI 0
Rodrigo Mourão

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.

GOSTEI 0
Rodrigo Mourão

Rodrigo Mourão

05/11/2009

Olá amigo,

O código ajudou ? 

Estamos aguardando para encerrar o chamado !!!

Abs!!

GOSTEI 0
Jose Boas

Jose Boas

05/11/2009

Deu certo . Eu testei e tudo ok
GOSTEI 0
POSTAR