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
pour une propriété 'simple' pas de soucis
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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;
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
Qui est plus qu'inélégant .
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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;
Comment faire pour toucher à la propriété Fill et faire d'une pierre 2 coup dans mon cas ?
Partager