Accès à une propriété protégée
J'ai un ensemble de composants qui dérivent tous de TWinControl (Par exemple TEdit, TComboBox,...). Tous ces composants ont une propriété publiée Font.
Mon problème est le suivant : J'ai un ensemble de classes, dérivant d'une classe de base commune abstraite, qui définissent une méthode virtuelle créant un de ces composants et me renvoyant un pointeur sur l'objet créé sous la forme d'un TWinControl *. A partir de ce pointeur, je n'ai pas accès à la propriété Font qui est protégée dans TControl. Je ne souhaite pas identifier la nature exacte du composant créé pour caster le pointeur obtenu et accéder à la propriété Font.
J'ai envisagé une solution (qui fait bidouille :( à mon gout) :
Je déclare une classe
Code:
1 2 3 4 5
| class TMyControl : TWinControl
{
__published :
__property Font;
} ; |
Et le code suivant semble alors fonctionner
Code:
1 2 3 4 5 6 7 8 9 10
| void Test( TMyControl *p, TColor color, int size)
{
p->Font->Color = color;
p->Font->Size = size;
}
....
TMyControl * p = (TMyControl *)Edit1;
Test(p, clRed , 16);
p = (TMyControl *)ComboBox1;
Test(p, clBlue , 14); |
Dans cet exemple, ça marche (apparamment), mais Je ne suis pas convaincu que cette solution soit correcte et sûre à 100%.
Quel est votre avis ?
Y a t-il une solution élégante à ce problème?