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

Codinome
Senha
Salvar informações

 Esqueci minha senha
 Novo Cadastro

  Usuários
208 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

  [Dicas]  Mudar a cor do ítem selecionado do DBGrid
Publicado por ActiveDelphi : Quarta, Fevereiro 08, 2006 - 11:33 GMT-3 (10122 leituras)
Comentários 4 Comentários   Enviar esta notícia a um amigo Enviar para um amigo   Versão para Impressão Versão para impressão
Gustavo Frassini Uma dica simples que muita gente procura, todos sabem que por padrão a linha (registro) selecionada do DBGrid fica na cor padrão do windows. Agora vamos ver como modificar...

    Uma dica simples que muita gente procura, todos sabem que por padrão a linha (registro) selecionada do DBGrid fica na cor padrão do windows. Agora vamos ver como modificar.

    Faça uma conexão com um banco de dados qualquer, com o seu componente de acesso preferido e ligue-o a um DBGrid para que possamos listar os dados nele. No exemplo, estou utilizando os componentes da palheta IBX.

    Primeiro vamos criar um objeto TAuxDBGrid descendente da classe: TDBGrid;
    Ex.: TAuxDBGrid = class(TDBGrid);

    Agora vamos ao que interessa:

    Evento onDrawColumnCell do DBGrid.
{ DataLink é uma propriedade protegida da Classe TCustomDBGrid, desta forma podemos acessar assim: TAuxDBGrid(DBGrid1).DataLink.ActiveRecord passando ao objeto TAuxDBGrid o objeto DBGrid como parâmetro. Da mesma forma pegamos sua propriedade row, ou seja, a linha que está o foco no momento; }

  if (TAuxDBGrid(DBGrid1).DataLink.ActiveRecord + 1 = TAuxDBGrid(DBGrid1).Row) or (gdSelected in State) then
  begin
    DBGrid1.Canvas.Brush.Color := clSkyBlue;
    DBGrid1.Canvas.Font.Style := DBGrid1.Canvas.Font.Style + [fsBold];
    DBGrid1.Canvas.Font.Color := clRed;
  end;
  DBGrid1.Canvas.FillRect(Rect);
  DBGrid1.Canvas.TextOut(Rect.Left+2,Rect.Top,Column.Field.AsString);


    Como ficou a Unit:

  unit Unit1;

  interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, DB, IBCustomDataSet, IBTable, IBDatabase, Grids, DBGrids;

type
  TAuxDBGrid = class(TDBGrid);

TForm1 = class(TForm)
  DBGrid1: TDBGrid;
  IBTransaction1: TIBTransaction;
  IBDatabase1: TIBDatabase;
  DataSource1: TDataSource;
  IBTable1: TIBTable;
  IBTable1CODIGO: TIntegerField;
  IBTable1RAZAO: TIBStringField;
  procedure DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
private
  { Private declarations }
public
  { Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  if (TAuxDBGrid(DBGrid1).DataLink.ActiveRecord + 1 =
TAuxDBGrid(DBGrid1).Row) or (gdSelected in State) then
  begin
    DBGrid1.Canvas.Brush.Color := clSkyBlue;
    DBGrid1.Canvas.Font.Style := DBGrid1.Canvas.Font.Style + [fsBold];
    DBGrid1.Canvas.Font.Color := clRed;
  end;
  DBGrid1.Canvas.FillRect(Rect);
  DBGrid1.Canvas.TextOut(Rect.Left+2,Rect.Top,Column.Field.AsString);
end;

end.


Abraços.
T+

Clique aqui para fazer o download do exemplo:



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


por: Borland_Linuxer : Fev 09, 2006 - 12:32
(Informações sobre o membro | Enviar uma mensagem) http://
Gustavo como sempre mando muito bem, essa de pinta o dbgrid foi muito boa abraços amigos.....

Uma coisa como faço para mudar somente a linha selecionada ?


por: brasil.rodrigo : Mar 06, 2006 - 05:33
(Informações sobre o membro | Enviar uma mensagem) http://
Utilizando o comando,
DBGrid1.Canvas.TextOut(Rect.Left+2,Rect.Top,Column.Field.AsString)
ele retornara todo os dados em modo texto, os float, numerics e etc, perdem a sua formatação.
Utilizando-se o codigo
DBGrid1.DefaultDrawDataCell(Rect, Column.Field, State);
Ele retorna os dados em sem mexer no formato. Mas o restante da dica é otimo, parabéns.


por: paulinhofeix : Mai 13, 2006 - 11:00
(Informações sobre o membro | Enviar uma mensagem)
Bom Dia
Gostei da Materia só que tem uma pequena questão que para mim não da certo.
a parte de numeros Ex: 50,30 teria que sair todos assim mais tem registro que sai tipo 50,351250021, sai muitos desimais.
o que eu faço para os numeros sairem todos desta forma 50,30
e-mail: paulinhofeix@gmail.com


por: tiago.accon : Jun 08, 2006 - 04:03
(Informações sobre o membro | Enviar uma mensagem) http://www.tiagorocha.brihost.com.br
Realmente é um artigo muito interessante, mas no final cometeu um deslize pois todos os registros que não são literais perdem suas caracteristicas, e que tb foi muito bem resolvido pelo nosso colega no comentáio acima, juntando os dois temos um artigo e tanto. Parabens !!

Tiago.
  Edição 112

Revista ActiveDelphi

  50 Programas Fontes


  Produtos

Conheça Nossos Produtos

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