DevMedia - asp.net, Java, Delphi, SQL e web Design, tudo em um só lugar!
Bem vindo a DevMedia!
LOGIN:     SENHA:
 
 

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

wyamazack@lithic.com.br





    8 COMENTÁRIOS

[Fechar]

Este post é fechado - você precisa ter acesso ao post para incluir um comentário.



Feesc
Ótimo post, valeu pela ótima didática.
Abraço.


em 29/11/2010 09:03 - Responder

 

[Comentário do autor]   Wesley Yamazack
Olá amigo,
 
Obrigado pelo Feedback, isso que nos motivo a continuar escrevendo.
Qualquer dúvida só enviar um e-mail.
 
Um abraço
 
Wesley Y
 


em 29/11/2010 09:19 - Responder
 

Benedito S. Assis.
Olá, Amigo.

Suas dicas são otimas, executo todas elas, quando acompanhado de fontes melhor ainda, os aprendiz as vezes se enrola, com os fontes fica facil tira duvidas.
Continue sempre assim.

Abraços.


em 19/1/2012 06:24 - Responder

 

[Comentário do autor]   Wesley Yamazack
Olá Benedito, obrigado pela dica!
Aproveitando gostaria de ver se você tem alguma ideia para outros artigos, caso você tenha me manda um e-mail, wyamazack@lithic.com.br.

Agradeço o comentário.

Obrigado meu amigo.

Um abraço.


em 19/1/2012 08:13 - Responder
 

Elton Pereira Rosa
Repito as palavras dos colegas... excelentes são seu artigos !!!


em 20/1/2012 08:46 - Responder

 

[Comentário do autor]   Wesley Yamazack
Obrigado Elton, por isso que fico motivado a escrever cada vez mais. Obrigado pelo comentário.

Envie umas dicas de artigos para que eu possa estar desenvolvendo, ok ?

E-mail : wyamazack@lithic.com.br

Att,

Wesley Yamazack


em 20/1/2012 09:43 - Responder
 

Weslley Castilho

Acredito que faltou algo nas linhas abaixo:

if xDBGrid.Columns[I].Field.Tag 0 then

if xColumn.Field.Tag 0 then

No resto sugiro um versão desta função somente para ajustar as colunas de acordo com o conteudo e nome, não dividir para que tudo fique visivel no from.

Muito obrigado.


em 23/3/2012 16:50 - Responder

 

[Comentário do autor]   Wesley Yamazack
Olá Weslley, obrigado pelo comentário.

O problema foi resolvido, o Editor HTML da DevMedia, havia ocultado algumas informações nas linhas mencionadas, grato pela observação.

Quanto a sua ideia, vou elaborar alguma coisa e posto logo em seguida, peço um pouco de paciência na solicitação, devido ao tempo hábil para fazer isso.

Qualquer outra dica ou dúvida pode mandar um e-mail ou então postar em qualquer um dos meus artigos que te ajudo sem problemas!

Mais uma vez obrigado pelo comentário!

Um abraço.


em 23/3/2012 17:04 - Responder
 



[Este post ainda não foi associado a uma sequência]
Publicidade
Autor
Wesley Yamazack

Graduado em Analise de Sistemas, no ramo de desenvolvimento há mais de 6 anos, onde atuou em empresas de diversos seguimentos como financeiro, comercial, estacionamento, etc. Atualmente analista desenvolvedor terceirizado da Marinha do Brasil, além de desenvolver projetos através da minha empresa Li...


Space do autor
Estatísticas
Favorito:
Comentários:
Feedback:
Utilidade:
1   0
[Fechar]

Você precisa estar logado para dar um feedback.

Clique aqui para efetuar o login
[Fechar]


Este post está fechado. Saiba mais sobre a assinatura MVP!
web-03
DevMedia  |  Anuncie  |  Fale conosco
Hospedagem web por Porta 80 Web Hosting
2012 - Todos os Direitos Reservados a web-03