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 0: begin Column.Title.Caption := ''; S1 := 'Row 1'; S2 := 'Row 2'; end; 1: begin Column.Title.Caption := ''; S1 := 'Row 1'; S2 := 'Row 2'; end; end; //Escrevendo o Título Canvas.TextOut(Rect.Left+2, 2, S1); Canvas.TextOut(Rect.Left+2, 16, 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 |