de l'usage des RTTI sur les composants a structure complexe
Bonjour,
Je cherche a tester l'usage des RTTI sur une Form .
Pour cela , j'ai créer une form contenant divers composants et je cherche a modifier si la propriété existe les couleurs .
ceci de cette manière
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
// rtti dans la clause uses
procedure TForm13.ColorButton1Click(Sender: TObject);
var
ctx: TRttiContext;
t: TRttiType;
p: TRttiProperty;
i : Longint;
begin
ctx := TRttiContext.Create;
try
for I := 0 to ComponentCount - 1 do
begin
t:=ctx.GetType(Components[i].ClassInfo);
p:=t.GetProperty('Color');
if assigned(p) then p.SetValue(Components[i],clGreen);
end;
finally
ctx.Free
end;
end; |
pour une propriété 'simple' pas de soucis
je me suis ensuite laissé aller à mettre des composants plus complexe : des tmsSmoothButtons,tmsSmoothMessageDialog,tmsSmoothExpanderPanel
là les choses se compliquent
pour le tmsSmoothButton pas de soucis , la propriété Color existe , le changement se fait
pour les 2 autres les couleurs sont gérées dans une structure TGDIPFill ( propriété Fill ) et là je ne vois pas comment faire
j'ai rajouté ceci
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
p:=t.GetProperty('Fill');
if assigned(p)
then begin
if t.Name='TAdvSmoothMessageDialog' then
begin
TAdvSmoothMessageDialog(Components[i]).Fill.Color :=clgreen;
TAdvSmoothMessageDialog(Components[i]).Fill.ColorTo:=clolive;
end;
if t.Name='TAdvSmoothExpanderPanel' then
begin
TAdvSmoothExpanderPanel(Components[i]).Fill.Color :=clgreen;
TAdvSmoothExpanderPanel(Components[i]).Fill.ColorTo:=clolive;
end; |
Qui est plus qu'inélégant .
Comment faire pour toucher à la propriété Fill et faire d'une pierre 2 coup dans mon cas ?