DBGrid colorido conforme Status

2,162 views
Skip to first unread message

Luis Leite Pereira

unread,
Oct 28, 2011, 7:53:58 PM10/28/11
to DUG-RS - Delphi Users Group Rio Grande do Sul
Boa Noite... Alguem tem ideia como fazer para Colorir apenas a linha
de um DBGrid conforme o estado de um determinado registro... Exemplo

Temos um cadastro e nele o Status é Ativo ou Inativo... Digo quando o
estado do status é Inativo
a linha do DBGrid ou a cor da Fonte fique de outra cor, que não a
mesma do status ativo.

Ainda quando ativo... vamos dizer que não permanente tipo temporario,
ou que a pessoa esteja Transitando, impossibilitando o seu uso, no
momento.

Obrigado.

Newton Michel De Oliveira

unread,
Oct 29, 2011, 5:37:52 AM10/29/11
to dug...@googlegroups.com, DUG-RS - Delphi Users Group Rio Grande do Sul
Dah uma procurada no fórum do Dug, lá tem inclusive exemplos sobre o assunto

Enviado via iPhone

> --
> Você recebeu esta mensagem porque está inscrito no "DUG-RS -
> Delphi Users Group Rio Grande do Sul" em Grupos do Google.
> Acesse o nosso BLOG em http://www.dug-rs.org e contribua com a comunidade Delphi do Rio Grande do Sul
> Para postar neste grupo, envie um e-mail para dug...@googlegroups.com
> Para cancelar a sua inscrição neste grupo, envie um e-mail para
> dug-rs-un...@googlegroups.com
> Para ver mais opções, visite este grupo em
> http://groups.google.com.br/group/dug-rs?hl=pt-BR
> Twitter: @dugrs

Secaio

unread,
Oct 29, 2011, 6:21:14 AM10/29/11
to dug...@googlegroups.com
no evento DrawColumnCell do gird, mais ou menos assim:
 
      if QryProdutoSTATUS.AsString <> 'ATIVO' then
       begin
       DBGrid.canvas.brush.color:= $00FF80FF; //roza define uma cor de fundo para os inativos
       DBGrid.canvas.fillrect(rect); // pinta a célula
       DBGrid.defaultdrawdatacell(rect,column.field,state); // pinta o texto padrão
      end
     else
      begin
       DBGrid.canvas.brush.color:= $009191FF; //vermeio define uma cor de fundo para os ativos
       DBGrid.canvas.fillrect(rect); // pinta a célula
       DBGrid.defaultdrawdatacell(rect,column.field,state); // pinta o texto padrão
      end;

2011/10/29 Newton Michel De Oliveira <newton...@gmail.com>



--
Secaio

Luis Leite Pereira

unread,
Oct 31, 2011, 5:29:13 AM10/31/11
to DUG-RS - Delphi Users Group Rio Grande do Sul
Bom Dia, passei para agradecer a ajuda... Era isto realmente que
estava procurando... Abraços...

Luis Leite Pereira

Pedro B. Alves

unread,
Nov 1, 2011, 3:44:44 PM11/1/11
to dug...@googlegroups.com
Alguém sabe fazer o mesmo utilizando o cxGrid, da devexpress?

Em 31 de outubro de 2011 07:29, Luis Leite Pereira
<nando...@hotmail.com> escreveu:


> Bom Dia, passei para agradecer a ajuda... Era isto realmente que
> estava procurando... Abraços...
>
> Luis Leite Pereira
>

Osmano Queiroz

unread,
Nov 1, 2011, 6:18:10 PM11/1/11
to dug...@googlegroups.com

Pedro B. Alves

unread,
May 10, 2012, 1:09:48 PM5/10/12
to dug...@googlegroups.com
Neste caso ele altera a cor somente da coluna, eu queria fazer isso só que na linha.

Alguém sabe?

Armando Bagattini

unread,
May 10, 2012, 1:18:45 PM5/10/12
to dug...@googlegroups.com
procedure TFormPrincipal.GridDrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
begin
  if(Condição)then
  begin
    Grid.Canvas.Brush.Color:=$001D25BC;
    Grid.Canvas.Font.Color:=clWhite;
    Grid.Canvas.FillRect(Rect);
    Grid.DefaultDrawColumnCell(Rect,Grid.Columns[DataCol].Index,Column,State);
  end;
end;

Armando Bagattini Filho
Desenvolvedor/Programador Delphi.
Regras de negócio, análise e desenvolvimento de sistemas.
Serviços de freelancer


Em 10 de maio de 2012 14:09, Pedro B. Alves <pedroa...@gmail.com> escreveu:
Neste caso ele altera a cor somente da coluna, eu queria fazer isso só que na linha.

Alguém sabe?

--
Você recebeu esta mensagem porque está inscrito no "DUG-RS -
Delphi Users Group Rio Grande do Sul" em Grupos do Google.
Acesse o nosso BLOG em http://www.dug-rs.org e contribua com a comunidade Delphi do Rio Grande do Sul
Para postar neste grupo, envie um e-mail para dug...@googlegroups.com
Para cancelar a sua inscrição neste grupo, envie um e-mail para
dug-rs-un...@googlegroups.com
Para ver mais opções, visite este grupo em
http://groups.google.com.br/group/dug-rs?hl=pt-BR
 
Twitter: @dugrs

Pedro B. Alves

unread,
May 10, 2012, 1:43:07 PM5/10/12
to dug...@googlegroups.com
Desculpe minha ignorancia, mas não achei o evento onDrawColumnCell no cxGrid;

Gustavo Luis Hinterholz

unread,
May 10, 2012, 1:45:42 PM5/10/12
to dug...@googlegroups.com
Pedro, acho que estao falando de DBGRID e não cxGrid, se precisar colori a linha de uma cx, me fala , que eu te passo.

Armando Bagattini

unread,
May 10, 2012, 1:46:38 PM5/10/12
to dug...@googlegroups.com
Tem que ver se existe este evento no componente cxGrid que tu usas.
Particularmente uso JvDBGrid ou o próprio DBGrid.


Armando Bagattini Filho
Desenvolvedor/Programador Delphi.
Regras de negócio, análise e desenvolvimento de sistemas.
Serviços de freelancer


Pedro B. Alves

unread,
May 10, 2012, 2:08:48 PM5/10/12
to dug...@googlegroups.com
Não tem...

Gustavo Luis Hinterholz

unread,
May 10, 2012, 2:26:10 PM5/10/12
to dug...@googlegroups.com
Pedro, para a CxGrid ficar colorida,
Clica na tableview e vai no evento onCustomDrawCell e coloca:
 
 
 var IndiceCampo: Integer;
  Valor      : Variant;
begin
   if (AViewInfo <> nil) and ((Sender as TcxGridDBTableView).DataController.Dataset.Active ) then begin
      IndiceCampo := (Sender as
      TcxGridDBTableView).GetColumnByFieldName('situacao').Index;
      Valor       := AViewInfo.GridRecord.Values[IndiceCampo];
//      ACanvas.Font.Style  := [];
      if (Valor = 'Devolvido') then begin
         ACanvas.Font.Color  := clBlack;
         ACanvas.Brush.Color := clRed;
      end
      //else
        // ACanvas.Brush.Color  := clWindow;
      //IF AViewInfo.GridRecord.Selected then begin
        // ACanvas.Brush.Color := clSkyBlue;
//         ACanvas.Font.Color  := clBlue;
  //    end;
   end;
end;

Felipe Dal Pizzol

unread,
May 10, 2012, 2:45:04 PM5/10/12
to dug...@googlegroups.com
No CxGrid, tu tem que setar o estilo no "tableView". Faz um estilo
para Linhas pares e um para linhas impares. Seta no object inspector
odstyle (acho que to enganado no nome, mas é proximo disso).

Se eu achar conseguir gerar um exemplo, repasso em seguida.

Dal Pizzol
Cordialmente,
Felipe Dornelles Dal'Pizzol

Marcelo Carvalho

unread,
May 10, 2012, 2:48:10 PM5/10/12
to dug...@googlegroups.com
E se ao invés de colorir a linha eu precisar colocar uma imagem? tipo uma bolinha ou bandeira de cores diferentes?


-- 
Atenciosamente,
 
Marcelo Carvalho

Felipe Dal Pizzol

unread,
May 10, 2012, 2:47:52 PM5/10/12
to dug...@googlegroups.com
Achei:


cxGrid1DBTableView1.Styles.ContentEven

cxGrid1DBTableView1.Styles.Odd


assim tu podes "zebrar" teu cxgrid, se é o que
tu estás pedindo...



Em 10 de maio de 2012 15:45, Felipe Dal Pizzol <fdalp...@gmail.com> escreveu:

Felipe Dal Pizzol

unread,
May 10, 2012, 2:49:19 PM5/10/12
to dug...@googlegroups.com
Troca a propriedade do campo para image, ou checkbox, ou combobox, etc,
e configura de acordo (as propriedades de configuração aparecem após
a seleção do tipo desejado)

Pedro B. Alves

unread,
May 11, 2012, 7:27:14 AM5/11/12
to dug...@googlegroups.com
Em 10 de maio de 2012 15:26, Gustavo Luis Hinterholz <gustavolui...@gmail.com> escreveu:
Pedro, para a CxGrid ficar colorida,
Clica na tableview e vai no evento onCustomDrawCell e coloca:
 
 
 var IndiceCampo: Integer;
  Valor      : Variant;
begin
   if (AViewInfo <> nil) and ((Sender as TcxGridDBTableView).DataController.Dataset.Active ) then begin
      IndiceCampo := (Sender as
      TcxGridDBTableView).GetColumnByFieldName('situacao').Index;
      Valor       := AViewInfo.GridRecord.Values[IndiceCampo];
//      ACanvas.Font.Style  := [];
      if (Valor = 'Devolvido') then begin
         ACanvas.Font.Color  := clBlack;
         ACanvas.Brush.Color := clRed;
      end
      //else
        // ACanvas.Brush.Color  := clWindow;
      //IF AViewInfo.GridRecord.Selected then begin
        // ACanvas.Brush.Color := clSkyBlue;
//         ACanvas.Font.Color  := clBlue;
  //    end;
   end;
end;


Perfeito amigo, funcionou perfeitamente.

Gustavo Luis Hinterholz

unread,
May 11, 2012, 8:50:19 AM5/11/12
to dug...@googlegroups.com
Blz.

Diego Feijo

unread,
Mar 6, 2014, 1:51:39 PM3/6/14
to dug...@googlegroups.com
Secaio, como faço para atualizar o DBGRID neste caso.
Vou explicar melhor.

Tenho uma rotina semelhante a este no DrawColumnCell quando o form é iniciado o dbgrid é pintado de forma correta. Quando insiro um novo registro a célula do dbgrid não é pintada, precisa realizar um refresh no dbgrid.

Já tente abrir e fechar a query, dbgrid.repaint, dbgrid.refresh. Nada funciona.

Secaio

unread,
Mar 6, 2014, 2:02:09 PM3/6/14
to dug...@googlegroups.com
Manda a rotina que tu usa pra fazer isso qdo o form é iniciado, pra dar uma clareada nas coisas...


--
--
Você recebeu esta mensagem porque está inscrito no "DUG-RS -
Delphi Users Group Rio Grande do Sul" em Grupos do Google.
Acesse o nosso BLOG em http://www.dug-rs.org e contribua com a comunidade Delphi do Rio Grande do Sul
Para postar neste grupo, envie um e-mail para dug...@googlegroups.com
Para cancelar a sua inscrição neste grupo, envie um e-mail para
dug-rs-un...@googlegroups.com
Para ver mais opções, visite este grupo em
http://groups.google.com.br/group/dug-rs?hl=pt-BR
 
Twitter: @dugrs
http://www.facebook.com/groups/dugrs/
http://www.Vimeo.com/dugrs

---
You received this message because you are subscribed to the Google Groups "DUG-RS - Delphi Users Group Rio Grande do Sul" group.
To unsubscribe from this group and stop receiving emails from it, send an email to dug-rs+un...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.



--
Secaio

Diego Feijo

unread,
Mar 6, 2014, 2:25:55 PM3/6/14
to dug...@googlegroups.com
Procedure que "pinta" a coluna

procedure TFPSAFT001.GridMMTercDrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
begin
  if ( Column = GridMMTerc.Columns[0]) then
  begin
    if DMSAFT001.qOLancMMTerceirizadoESTORNADO.AsString = 'T' then
      GridMMTerc.Canvas.Brush.Color := $008080FF; // Vermelho
    GridMMTerc.DefaultDrawColumnCell( Rect, DataCol, Column, State);
  end;
end;


No form.show só abro a query.

Atenciosamente,
Diego Feijó
Reply all
Reply to author
Forward
0 new messages