Pintar bitmap no DBGrid no Delphi
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!
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.