Clique para saber mais...
  Home     Download     Produtos / Cursos     Revista     Vídeo Aulas     Fórum     Contato   Clique aqui para logar | 16 de Julho de 2026
  Login

Codinome
Senha
Salvar informações

 Esqueci minha senha
 Novo Cadastro

  Usuários
102 Usuários Online

  Revista ActiveDelphi
 Assine Já!
 Edições
 Sobre a Revista

  Conteúdo
 Apostilas
 Artigos
 Componentes
 Dicas
 News
 Programas / Exemplos
 Vídeo Aulas

  Serviços
 Active News
 Fórum
 Produtos / Cursos

  Outros
 Colunistas
 Contato
 Top 10

  Publicidade

  [Artigos]  Cor da linha selecionada na DBGrid
Publicado por ActiveDelphi : Segunda, Junho 23, 2008 - 10:47 GMT-3 (2331 leituras)
Comentários 7 Comentários   Enviar esta notícia a um amigo Enviar para um amigo   Versão para Impressão Versão para impressão
Administrador Alterar a cor da linha (item, registro, ...) selecionada na DBGrid. Insisto que estou me referindo à linha que recebe o foco, isto é, o registro corrente (que é afetado pelo setfocus, scroll, clique do mouse, filtro, pesquisa e outros).

Em condições normais, ou seja, configuração padrão do Windows (WindowsXP, no meu caso), a cor de qualquer item selecionadoé definida pelo próprio Windows (clHighlight = azul escuro). Por isso, se quisermos alterar esta cor, temos que fazê-lo pelo Windows (no XP é moleza). Porém, se alterarmos esta cor, todos os programas que rodam sob o
Windows terão alteradas as cores dos itens selecionados, (inclusive os componentes do Delphi que tenham a propriedade "items"). O ideal, então, é alterar somente no Delphi (na DBGrid).

O motivo para isso é que a cor que o Windows define para o item selecionado é um azul muito escuro, que dependendo da cor da fonte que você escolheu para as linhas da DBGrid, podem ficar de difícil leitura quando uma linha recebe o foco. Alterando essa cor (para uma mais clara, mais transparente, como clAqua, no meu caso) é possível navegar perfeitamente pela DBGrid com a linha com foco destacada, mas de difícil (ou impossível) leitura. Somente por isso.

Você pode até deixar a propriedade Options.dgRowSelect = true (para que a seleção atinja a linha toda e não apenas a célula que tenha o foco, conforme podemos ver na figura abaixo:


Figura 1 - Exemplo de DBGrid

Observe que isso não altera outras condições impostas para a apresentação da DBGrid, como por exemplo, "zebrar" a DBGrid, usar Font.Color = clBlue para Crédito e clRed para Débito, ou como o exemplo acima, no qual os compromissos do ano corrente aparecem em Negrito e os compromissos do ano seguinte aparecem em fonte Normal e clNavy, ou, naturalmente, de acordo com os propósitos do seu código.

Como fazer?

No evento OnDrawColumnCell da DBGrid apenas acrescente um condição, após o seu código (se tiver):

  procedure TF_Niver.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
    DataCol: Integer; Column: TColumn; State: TGridDrawState);
  begin
    //...
    //seu código de formatação, para "zebrar" a DBGrid, por exemplo

    if (gdSelected in State) then
      DBGrid1.Canvas.Brush.Color := clAqua;

    dbgrid1.DefaultDrawDataCell(Rect, Column.Field, State);
  end;

Considerações

1- A condição (if) verifica se a linha da DBGrid está selecionada, isto é, com foco. Se estiver (condição =
true), a cor da linha será clAqua.

2- Se você quiser que a alteração de cor atinja a linha inteira, configure a propriedade options do DBGrid setando o ítem dgRowSelect para true. Se seu valor for false, apenas a célula com foco será destacada com a cor que você escolheu (clAqua, no meu caso).

Espero ter ajudado!

Por: Carlos Roberto Moura
Contato: carlosrobertomoura@bol.com.br



Comentários Comentários
   Ordem:  
Comentários pertencem aos seus respectivos autores. Não somos responsáveis pelo seus conteúdos.


por: leoferrareto (leoferrareto@hotmail.com) : Jun 24, 2008 - 11:33
(Informações sobre o membro | Enviar uma mensagem)
Não entendi quando vc disse isso

seu código de formatação, para "zebrar" a DBGrid, por exemplo

no caso eu só coloco isso de um exemplo pratico


por: ronnie (ronniewo2@hotmail.com) : Jul 11, 2008 - 08:41
(Informações sobre o membro | Enviar uma mensagem) http://
Usando este código funciona, mas quando o foco é passado para outro componente a linha selecionada fica em branco. Como resolver?

  Edição 112

Revista ActiveDelphi

  50 Programas Fontes


  Produtos

Conheça Nossos Produtos

Copyright© 2001-2016 – Active Delphi – Todos os direitos reservados