Como ajustar automaticamente o tamanho das colunas do DBGrid? – Show Delphi

DICAS

Visite a biblioteca de dicas da comunidade.

Saiba mais

ARTIGOS

Abordagens detalhadas sobre assuntos diversos.

Saiba mais

INICIANTES

Aprenda a programar de um modo simples e fácil.

Saiba mais

DOWNLOADS

Acesse os materiais exclusivos aos membros.

Saiba mais
voltar

PARA QUEM GOSTA DE DELPHI

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;

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;

Fonte Base: https://marcosalles.wordpress.com/2011/03/08/ajustar-automaticamente-o-tamanho-das-colunas-do-dbgrid-delphi/

Facebook Comments

Posts Relacionados

  • Giovani Da Cruz
  • 414 views
  • 0 comentários
  • 19 de abril de 2017

 

Publicidade

 

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Ir ao topo


© 2017 Infus Soluções em Tecnologia - Todos os Direitos Reservados