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


Feesc
em 29/11/2010 09:03 - Responder
Ótimo post, valeu pela ótima didática.
Abraço.
Abraço.
em 29/11/2010 09:03 - Responder

[Comentário do autor]
Wesley Yamazack
em 29/11/2010 09:19 - Responder
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.
em 19/1/2012 06:24 - Responder
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.
em 19/1/2012 06:24 - Responder

[Comentário do autor]
Wesley Yamazack
em 19/1/2012 08:13 - Responder
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.
em 19/1/2012 08:13 - Responder


Elton Pereira Rosa
em 20/1/2012 08:46 - Responder
Repito as palavras dos colegas... excelentes são seu artigos !!!
em 20/1/2012 08:46 - Responder

[Comentário do autor]
Wesley Yamazack
em 20/1/2012 09:43 - Responder
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
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
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
em 23/3/2012 17:04 - Responder
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.
em 23/3/2012 17:04 - 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
