Ir para conteúdo
Fórum Script Brasil
  • 0

Subtitulo em coluna no DBGrid


RSalvador

Pergunta

Ola

Abri um tópico com o mesmo conteudo que este no forum sobre C++. Sei da duplicidade de conteudo, mas estou aumentando a visualizacao do conteudo pois preciso de um retorno e acredito que a duvida seja tão pertinente para este forum quanto para o outro. Obrigado.

Ola

Estou montando algumas aplicacoes no DBGrid (na verdade, no CRDBGrid, um pouco mais funcional) no C++ Builder, e me foi solicitado que fizesse colunas com um "supertitulo". Exemplo: Uma coluna chamada Codigo, a segunda chamada Nome, a terceira chamada Rua e a quarta, Numero. Mas, sobre estas duas ultimas, um "supertitulo" Endereco.

Não sei se fui claro o suficiente, mas existe alguma maneira de fazer a aplicacao deste modo? Não achei nada a respeito nem no forum, nem em outros, nem em artigos.

Obrigado

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

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

abraço

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      651,9k
×
×
  • Criar Novo...