Olá galera, nesta Quick Tips, irei mostrar como adicionar uma imagem em um DBGrid. Imagine um Field no seu ClientDataSet Ativo, como se fosse Cliente ativo ou não, para não ficar informando S ou N, colocamos uma imagem para ilustrar.

Adicione os seguintes itens para que o form fique como o apresentado na Figura 1:

  • ImageList com 2 imagens a sua escolha, simulando algo como ativo e desativo
  • ClientDataSet
  • DataSorce
  • DBgrid

Figura 1. Form

Sejamos práticos e objetivos com um ClientDataSet (e um campo Ativo por exemplo) e um DBGrid. Vamos ao evento DrawColumnCell, do DBGrid, como mostra a Listagem 1.

Listagem 1. DBGrid

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect
 DataCol: Integer; Column: TColumn; State: TGridDrawState);
 begin
   if Column.Field = CDSPadraoAtivo then
   begin
     TDBGrid(Sender).Canvas.FillRect(Rect);
     ImageList1.Draw(TDBGrid(Sender).Canvas, Rect.Left +1,Rect.Top + 1, 0);
     if CDSPadraoAtivo.Text = 'S' then // Cadastro está ativo
       ImageList1.Draw(TDBGrid(Sender).Canvas, Rect.Left +1,Rect.Top + 1, 1)
   end;
 end;

Agora vamos implementar a alteração das imagens apenas clicando sobre a coluna do DBgrid. No evento CellClick, suponha que sua coluna Ativo seja a terceira coluna, lembrando que a primeira coluna é sempre 0 (Zero). Observe a Listagem 2.

Listagem 2. Alteração das imagens

procedure TForm1.DBGrid1CellClick(Column: TColumn);
 begin
 {Validamos se estamos na Coluna 3 e se o valor do campo Ativo é N , se for mudamos para S}
 if Column.Index = 2 Then
 if Column.Grid.DataSource.DataSet.Fields[Column.Index].AsString =      'N' Then
 begin
 Column.Grid.DataSource.DataSet.Edit;
 Column.Grid.DataSource.DataSet.Fields[Column.Index].Value := 'S'
 end
 else
 begin
 Column.Grid.DataSource.DataSet.Edit;
 Column.Grid.DataSource.DataSet.Fields[Column.Index].Value := 'N'
 end;
 end;

Veja o exemplo funcionando na Figura 2.

Figura 2. Exemplo funcionando

Fico por aqui ate à próxima Quick Tips.

Um abraço

Wesley Y