Títulos com mais de uma linha no DBGrid
Um dos grandes problemas do 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:
procedure TForm1.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:
Conclusões
O código acima mostrou como escrever um título em uma coluna do DbGrid com mais de uma linha, precisa de mais implementações: Escrever centralizado, verificação em todas as colunas e outros de acordo com a necessidade do desenvolvedor. Só um lembrete, este código só funciona se as colunas do DbGrid forem adicionadas na propriedade Columns.
por Thiago Avelar