Pesquise no Blog

 

quinta-feira, 17 de janeiro de 2008

Acessando propriedades protegidas de um componente

Imagine que você precise definir uma altura específica de uma linha em um DBGrid, a primeira linha, por exemplo.
Você vai no código e coloca:

DBGrid1.RowHeights[ 0 ]:= 50;

Você compila e vê que deu erro informando que não existe tal propriedade. Daí você pensa: se no StringGrid tem por que não tem no DBGrid?
A resposta é: essa propriedade existe, mas é protegida.
Mostrarei aqui como acessá-la, mas lembre-se de que essa não é uma técnica muito recomendada, se a propriedade está protegida deve ter um bom motivo.

Mas vamos lá!
Na Unit do Form que contém o DBGrid vamos declarar uma nova classe antes da declaração da classe do Form, ficando o código assim:

type
TMeuDBGrid = class(TDBGrid);

type
TForm1 = class(TForm)
.
.
.

Feito isso, para acessar a propriedade protegida, no caso a altura da linha, vamos fazer um typecast do DBGrid:

TMeuDBGrid(DBGrid1).RowHeights[ 0 ]:= 50;


Você compila e.... funciona!!!
Isso vale para outras propriedades e componentes.
Mas como dito antes, não é uma técnica recomendada, por isso, use por sua conta e risco.

Um comentário:

Anônimo disse...

Só para enriquecer:

Vale a pena ressaltar que as propriedades protegidas são apenas para uso interno e seu acesso fora da unit não costuma ter mto sentido.

Este macete funciona pq os atributos e métodos protegidos de uma classe são acessíveis para seus filhos.

Note que isso não funciona para atributos privados.