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;

Deixe uma resposta