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