DevMedia
Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Para efetuar o download você precisa estar logado. Clique aqui para efetuar o login
download     post favorito     comentários

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.

[fechar]

Você não gostou da qualidade deste conteúdo?

(opcional) Você poderia comentar o que não lhe agradou?

Confirmo meu voto negativo
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

wyamazack@lithic.com.br



Atuou como desenvolvedor/consultor há mais de 9 anos. Liderou, como projetista/analista, diversos importantes projetos de TI na Marinha do Brasil. Atualmente é coordenador editorial da web-03, incluindo os sites DevMedia, JavaFree [...]

O que você achou deste post?
Conhece a assinatura MVP?
Publicidade
Serviços

Mais posts