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
Feesc
Ótimo post, valeu pela ótima didática.
Abraço.
Abraço.
[há +1 ano] -
Responder
[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
[há +1 ano] -
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.
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.
[há +1 mês] -
Responder
[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.
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.
[há +1 mês] -
Responder

Elton Pereira Rosa
Repito as palavras dos colegas... excelentes são seu artigos !!!
[há +1 mês] -
Responder
[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
Envie umas dicas de artigos para que eu possa estar desenvolvendo, ok ?
E-mail : wyamazack@lithic.com.br
Att,
Wesley Yamazack
[há +1 mês] -
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.
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.
[há +1 mês] -
Responder
[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.
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.
[há +1 mês] -
Responder
[Este post ainda não foi associado a uma sequência]
Você está em:
canal Delphi
Publicidade
Wesley Yamazack
Space do autor
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

download


1
0
