Bom dia pessoal,
Esse post mostra como ajustar automaticamente a largura das colunas de um Dbgrid (nativo) em Delphi 2006.
Declare a procedure abaixo numa unit e chame-a passando como parâmetros a grid e o índice da coluna que será ajustada.
Declaração da Procedure:
procedure DimensionarGrid(dbg: TDbGrid; AIndiceColunaAutoAjustavel : Integer);
type
TArray = Array of integer;
procedure AjustarColunas(ALargura, ATamanhoTotal : Integer; ALstTamahos : TArray);
var
I :integer;
begin
if ATamanhoTotal = 0 then
begin
ATamanhoTotal := dbg.Columns.Count;
for I := 0 to dbg.Columns.Count - 1 do
dbg.Columns[I].Width := (dbg.Width - dbg.Canvas.TextWidth('AAAA')) div ATamanhoTotal
end
else
for I := 0 to dbg.Columns.Count - 1 do
dbg.Columns[I].Width := dbg.Columns[I].Width + (ALargura * ALstTamahos[I] div ATamanhoTotal);
end;
var
I, vLarguraTotal, vTamanhoTotal, vLargura : Integer;
vLstLarguras, vLstTamanhos : TArray;
begin
SetLength(vLstLarguras, dbg.Columns.Count);
SetLength(vLstTamanhos, dbg.Columns.Count);
vLarguraTotal := 0;
vTamanhoTotal := 0;
for I := 0 to dbg.Columns.Count - 1 do
begin
dbg.Columns[I].Width := dbg.Canvas.TexTWidth( Dbg.Columns[I].Title.Caption + 'A' );
vLstLarguras[I] := dbg.Columns[I].Width;
vLarguraTotal := vLarguraTotal + vLstLarguras[I];
if I = AIndiceColunaAutoAjustavel then
vLstTamanhos[I] := dbg.Columns[I].Field.Size;
vTamanhoTotal := vTamanhoTotal + vLstTamanhos[I];
end;
if dgColLines in dbg.Options then
vLarguraTotal := vLarguraTotal + Dbg.Columns.Count;
{Adiciona a largura da coluna indicada do cursor}
if dgIndicator in Dbg.Options then
vLarguraTotal := vLarguraTotal + IndicatorWidth;
vLargura := dbg.ClienTWidth - vLarguraTotal;
AjustarColunas(vLargura, vTamanhoTotal, vLstTamanhos);
end;
Abaixo está um exemplo de como chamar a procedure:
procedure TfrmTeste.FormResize(Sender: TObject);
begin
DimensionarGrid(grdDados, 2);
end;
Obs.: É interessante chamar essa procedure no FormResize, pois assim sempre que o tamanho do formulário for reajustado a grid será ajustada. Porém, ela pode ser reajustada sempre que dados forem alterados na grid também, ou conforme sua necessidade.
Espero que ajude!
Abraços!
Link de auxílio:
http://marcosalles.wordpress.com/2011/03/08/ajustar-automaticamente-o-tamanho-das-colunas-do-dbgrid-delphi/
Nenhum comentário:
Postar um comentário