Redimensionar Colunas: DBGrid - Delphi

Veja nesta Quick Tips, irei mostra como podemos redimensionar uma DBGrid de acordo com o tamanho das colunas e do espaço ocupada por esta DBGrid no formulário.

Olá galera, nesta Quick Tips, irei mostra como podemos redimensionar uma DBGrid de acordo com o tamanho das colunas e do espaço ocupada por esta DBGrid no formulário. Pensando sempre e reaproveitamento de código vamos criar uma unit e salvar ela como uFuncoes.pas . e nela declararmos uses em Grids, DBGrids , além de criarmos também uma procedure chamada AutoSizeDBGrid. unit uFuncoes; interface uses Grids, DBGrids; procedure AutoSizeDBGrid(const xDBGrid: TDBGrid); implementation procedure AutoSizeDBGrid(const xDBGrid: TDBGrid); var I, TotalWidht, VarWidth, QtdTotalColuna : Integer; xColumn : TColumn; begin // Largura total de todas as colunas antes de redimensionar TotalWidht := 0; // Como dividir todo o espaço extra na grade VarWidth := 0; // Quantas colunas devem ser auto-redimensionamento QtdTotalColuna := 0; for I := 0 to -1 + xDBGrid.Columns.Count do begin TotalWidht := TotalWidht + xDBGrid.Columns[I].Width; if xDBGrid.Columns[I].Field.Tag <> 0 then Inc(QtdTotalColuna); end; // Adiciona 1px para a linha de separador de coluna if dgColLines in xDBGrid.Options then TotalWidht := TotalWidht + xDBGrid.Columns.Count; // Adiciona a largura da coluna indicadora if dgIndicator in xDBGrid.Options then TotalWidht := TotalWidht + IndicatorWidth; // width vale "Left" VarWidth := xDBGrid.ClientWidth - TotalWidht; // Da mesma forma distribuir VarWidth para todas as colunas auto-resizable if QtdTotalColuna > 0 then VarWidth := varWidth div QtdTotalColuna; for I := 0 to -1 + xDBGrid.Columns.Count do begin xColumn := xDBGrid.Columns[I]; if xColumn.Field.Tag <> 0 then begin xColumn.Width := xColumn.Width + VarWidth; if xColumn.Width < xColumn.Field.Tag then xColumn.Width := xColumn.Field.Tag; end; end; end; end.

Feita a nossa unit vamos criar agora um Formulário juntamente com um DBGrid, ligado a um DataSet, esta parte vou deixar com vocês, particularmente criei um ClientDataSet com XML mesmo, apenas para ilustrar. Agora vamos ao que interessa neste form nos eventos onCreate e onResize, vamos implementar os código abaixo.

Listagem 2: Serve para termos como base uma tag inicial para cada Field

procedure TFrmPrincipal.FormCreate(Sender: TObject); var I: Integer; begin For I := 0 to CDSPadrao.FieldCount - 1 do CDSPadrao.Fields[i].Tag := 30; AutoSizeDBGrid(DBGrid1); end;

Listagem 3: Todo momento que nosso formulário for redimensionado o evento irá calcular o tamanho de cada coluna

procedure TFrmPrincipal.FormResize(Sender: TObject); begin AutoSizeDBGrid(DBGrid1); end;

Fico por aqui ate à próxima Quick Tips. Baixe o exemplo completo neste post.

Um abraço

Wesley Y

Ebook exclusivo
Dê um upgrade no início da sua jornada. Crie sua conta grátis e baixe o e-book

Artigos relacionados