DBGrid - Títulos com mais de uma linha

Top  Previous  Next

Um dos grandes problemas do Componente DbGrid é que ele não possui uma propriedade 

para poder colocar o título das colunas em várias linhas. Mas isto não é tão 

verdade assim. Umas de suas classes ancestrais possui várias propriedades 

protegidas que possibilitam alterar algumas características do DbGrid. 

Esta classe é a TCustomGrid. Vamos ao código. Crie um Tipo após as declarações 

da classe TForm: 

 

type

   TAccessDBGrid = class(TCustomGrid); 

 

No evento onDrawColumnCell escreva o código abaixo: 

 

procedureTForm1.DBGrid1DrawColumnCell(Sender: TObject;

const Rect: TRect; DataCol: Integer; Column: TColumn;

State: TGridDrawState);

var

   S1, S2: String;

begin

   with TAccessDBGrid(DBGrid1) do

   begin

      //Limpando o Título da Coluna

      RowHeights[0] := 32;

      Canvas.Brush.Style := bsClear;

      //Títulos da Coluna

      case Column.Index of

      0begin

         Column.Title.Caption := '';

         S1 := 'Row 1';

         S2 := 'Row 2';

      end;

      1begin

         Column.Title.Caption := '';

         S1 := 'Row 1';

         S2 := 'Row 2';

      end;

   end;

   //Escrevendo o Título

   Canvas.TextOut(Rect.Left+22, S1);

   Canvas.TextOut(Rect.Left+216, S2);

end;

 

 

Explicando o Código

 

Ao declarar um tipo de uma classe ancestral e associando a classe filho, as propriedades que antes eram protegidas podem ser alteradas nesta classe filho. É o que acontece na Linha:

 

  RowHeights[0] := 32;

 

A propriedade RowHeights é um vetor onde cada índice representa a linha do Grid. A linha inicial (Título), a altura é alterada para 32.

Após o titulo original da coluna ser alterada, os valores das linhas são armazenados nas variáveis S1 e S2. Depois quem faz o trabalho é a propriedade Canvas que posiciona os valores das variáveis em duas linhas no Título da coluna. Veja o resultado na figura abaixo:

 

FONTE: ClubeDelphi.  www.clubedelphi.com.br