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.