Dicas TDbGrid
Quinta-feira, 22 dUTC Maio dUTC 2008
Segue abaixo algumas dicas de como incrementar o seu TDbGrid para que sua aplicação tenha uma aparência um pouco mais profissional:
- Colorir condicionalmente as linhas.
Ex.: seu grid mostraria as linha pares de uma cor diferenciada para facilitar a leitura, ou destacaria o conteúdo de um campo de acordo com o valor:
//Atribua a seguite Procedure
//ao evento OnDrawColumnCell
procedure TForm1.DBGrid1DrawColumnCell(
Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn;
State: TGridDrawState);
var cor_fundo, cor_fonte: TColor;
begin
with Sender as TDbGrid do
begin
//formatação condicional
if DataSource.DataSet.FieldByName('SIZE').AsInteger > 20 then
Canvas.Font.Style := Canvas.Font.Style
+ [fsBold];
//para todas as linhas pares
if (DataSource.DataSet.RecNo
mod 2 = 0) then
begin
if gdSelected in State then
begin
cor_fundo := $0097FFFF;
cor_fonte := clInfoText;
end
else
begin
cor_fundo := clInfoBk;
cor_fonte := Font.Color;
end;
//altere as propriedades do
//canvas do grid para obter
//o efeito desejado
Canvas.Brush.Color := cor_fundo;
Canvas.Font.Color := cor_fonte;
end;
//desenha texto da célula
DefaultDrawColumnCell( Rect,
DataCol,
Column,
State);
end;
end;
- Inserir Imagens nas células
Ex.: Exibir uma imagem dependendo do tipo valor de um campo.
adicionar no código anterior:
var [...]
aux_rect: TRect;
largura: Integer;
bmp: TBitMap;
begin
[...]
aux_rect := Rect;
bmp := TBitmap.Create;
try
//pega a imagem do imagelist
ImageList1.GetBitmap(0,bmp);
//pega a largura da imagem
largura := (Rect.Bottom -
Rect.Top);
aux_rect.Right := Rect.Left +
largura;
//desenha a imagem
Canvas.StretchDraw(aux_rect,bmp);
finally
bmp.Free;
end;
//zera a área de desenho
//e prepara para escrita
//desconsiderenado a área
//da imagem
aux_rect := Rect;
aux_rect.Left := aux_rect.Left +
largura;
//substituir o contorno
//anterior pelo novo
DefaultDrawColumnCell( aux_rect,//Rect,
DataCol,
Column,
State);
[...]
end;