Ir ao topo

Tecnobyte

Logomarca da Tecnobyte
Contato por WhatsApp

WhatsApp

(69) 3421-6756

Contato por Telefone

(69) 3421-6756

(69) 3421-6757

Enviar mensagem

Enviar

mensagem

Contato por Facebook

Facebook

Vídeos

Vídeos

Atendimento de segunda a sexta, das 08h00 às 19h00 (horário de Brasília).

Banner

Delphi - Outros

Como pintar um bitmap em uma célula do DBGrid?

Embora pareça complicada, esta tarefa é muito simples. 
O Delphi nos permite controlar totalmente o desenho de cada 
célula do DBGrid através do evento OnDrawColumnCell. O que 
precisamos fazer neste evento é:

1. Verificar o estado da célula (fixa, selecionada, etc).
2. Verificar se é a coluna do campo da imagem.
3. Criar um objeto bitmap.
4. Copiar o conteúdo do campo da imagem para o bitmap.
5. Desenhar o bitmap na célula do DBGrid.
6. Destruir o bitmap.

Agora que já conhecemos os passos, vamos ao exemplo:

1. Coloque um TTable e ligue ao Alias DBDEMOS e à tabela 
   animals.dbf.
2. Coloque um TDataSource e ligue-o ao Table1.
3. Coloque um DBGrid e ligue-o ao DataSource1.
3. Mude Table1.Active para true.
4. No evento OnDrawColumnCell escreva o código abaixo:

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; 
  const Rect: TRect; DataCol: Integer; Column: TColumn; 
  State: TGridDrawState);
var
  Bmp: TBitmap;
begin
  if (not (gdFixed in State)) and
     (UpperCase(Column.FieldName) = 'BMP') then
  begin
    Bmp := TBitmap.Create;
    try
      Bmp.Assign(Table1.FieldByName('Bmp'));
      DBGrid1.Canvas.StretchDraw(Rect, Bmp);
    finally
      Bmp.Free;
    end;
  end;
end;

Conforme eu disse no início, é muito simples!

Observações

Neste exemplo usei o mínimo possível de código. Para obtermos um visual melhor poderíamos, por exemplo, deixar uma margem em torno da imagem. Não é difícil, mas vou deixar como desafio aos interessados.

O conteúdo desta página pode ajudar alguém? Compartilhe!