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.
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
Artigos relacionados
-
Artigo
-
Artigo
-
Artigo
-
Artigo
-
Artigo