Como ajustar automaticamente o tamanho das colunas do DBGrid?
Problema: Como ocupar todo o espaço disponível no DBGrid?
Muitas vezes, quando maximizamos uma tela, fica um espaço em branco se utilidade,
outras vezes não queremos que o Grid fique com rolagem.
Logo, é necessário uma forma de dimensionar automaticamente as colunas.
Felizmente há uma solução de fácil implementação!
Vamos ao código:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
| procedure DimensionarGrid(dbg: TDBGrid);
type
TArray = Array of Integer;
procedure AjustarColumns(Swidth, TSize: Integer; Asize: TArray);
var
idx: Integer;
begin
if TSize = 0 then
begin
TSize := dbg.Columns.count;
for idx := 0 to dbg.Columns.count - 1 do
dbg.Columns[idx].Width := (dbg.Width - dbg.Canvas.TextWidth('AAAAAA')
) div TSize
end
else
for idx := 0 to dbg.Columns.count - 1 do
dbg.Columns[idx].Width := dbg.Columns[idx].Width +
(Swidth * Asize[idx] div TSize);
end;
var
idx, Twidth, TSize, Swidth: Integer;
AWidth: TArray;
Asize: TArray;
NomeColuna: String;
begin
SetLength(AWidth, dbg.Columns.count);
SetLength(Asize, dbg.Columns.count);
Twidth := 0;
TSize := 0;
for idx := 0 to dbg.Columns.count - 1 do
begin
NomeColuna := dbg.Columns[idx].Title.Caption;
dbg.Columns[idx].Width := dbg.Canvas.TextWidth
(dbg.Columns[idx].Title.Caption + 'A');
AWidth[idx] := dbg.Columns[idx].Width;
Twidth := Twidth + AWidth[idx];
if Assigned(dbg.Columns[idx].Field) then
Asize[idx] := dbg.Columns[idx].Field.Size
else
Asize[idx] := 1;
TSize := TSize + Asize[idx];
end;
if TDBGridOption.dgColLines in dbg.Options then
Twidth := Twidth + dbg.Columns.count;
// adiciona a largura da coluna indicada do cursor
if TDBGridOption.dgIndicator in dbg.Options then
Twidth := Twidth + IndicatorWidth;
Swidth := dbg.ClientWidth - Twidth;
AjustarColumns(Swidth, TSize, Asize);
end; |
procedure DimensionarGrid(dbg: TDBGrid);
type
TArray = Array of Integer;
procedure AjustarColumns(Swidth, TSize: Integer; Asize: TArray);
var
idx: Integer;
begin
if TSize = 0 then
begin
TSize := dbg.Columns.count;
for idx := 0 to dbg.Columns.count - 1 do
dbg.Columns[idx].Width := (dbg.Width - dbg.Canvas.TextWidth('AAAAAA')
) div TSize
end
else
for idx := 0 to dbg.Columns.count - 1 do
dbg.Columns[idx].Width := dbg.Columns[idx].Width +
(Swidth * Asize[idx] div TSize);
end;
var
idx, Twidth, TSize, Swidth: Integer;
AWidth: TArray;
Asize: TArray;
NomeColuna: String;
begin
SetLength(AWidth, dbg.Columns.count);
SetLength(Asize, dbg.Columns.count);
Twidth := 0;
TSize := 0;
for idx := 0 to dbg.Columns.count - 1 do
begin
NomeColuna := dbg.Columns[idx].Title.Caption;
dbg.Columns[idx].Width := dbg.Canvas.TextWidth
(dbg.Columns[idx].Title.Caption + 'A');
AWidth[idx] := dbg.Columns[idx].Width;
Twidth := Twidth + AWidth[idx];
if Assigned(dbg.Columns[idx].Field) then
Asize[idx] := dbg.Columns[idx].Field.Size
else
Asize[idx] := 1;
TSize := TSize + Asize[idx];
end;
if TDBGridOption.dgColLines in dbg.Options then
Twidth := Twidth + dbg.Columns.count;
// adiciona a largura da coluna indicada do cursor
if TDBGridOption.dgIndicator in dbg.Options then
Twidth := Twidth + IndicatorWidth;
Swidth := dbg.ClientWidth - Twidth;
AjustarColumns(Swidth, TSize, Asize);
end;
Veja como é fácil a utilização do procedimento:
No evento OnResize do seu form, deixe conforme o exemplo abaixo
1
2
3
4
5
6
| procedure TForm1.FormResize(Sender: TObject);
begin
// É só informar o seu DBgrid
DimensionarGrid( GridProdutos );
end; |
procedure TForm1.FormResize(Sender: TObject);
begin
// É só informar o seu DBgrid
DimensionarGrid( GridProdutos );
end;
Fonte Base: https://marcosalles.wordpress.com/2011/03/08/ajustar-automaticamente-o-tamanho-das-colunas-do-dbgrid-delphi/
Vamos facilitar?
Giovani preparou um vídeo demonstrando a utilização da dica! Aproveite a já inscreva-se no nosso canal para ter acesso a mais conteúdos interessantes como este.
Dúvidas? Deixe o seu comentário!
Até o próximo post pessoal!
-
Giovani Da Cruz
-
14.950 views
- 0 comentários
- 19 de abril de 2017
Está gostando do conteúdo? Considere pagar um cafezinho para nossa equipe!
Posts Relacionados - Continue Aprendendo