Je débute en création de composant FMX.
Je vise un composant composite donc un agglomérat de composants existants. Voici celui que j"ai bâti sur une forme et que je voudrais transformer en composant pour pouvoir le réutiliser :
J'ai donc créé un composant FMX vide avec l'utilitaire et j'ai essayé d'y mettre mes autres composants, un Tscalelayout comme base qui contient un rectangle calé à gauche, un rectangle calé à droite et un rectangle au centre qui occupe le reste de la place. Chaque rectangle a un TLabel comme enfant dans lesquels j'écrirais par la suite.
Voilà ce que j'obtiens à l’exécution :
Je ne vois pas mes 3 rectangles ni mes Labels.
Voilà le code :
Le resize ne fait rien...
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
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89 unit FMX.Obj_ListeHorizontale; interface uses System.SysUtils, System.Classes, FMX.Types, FMX.Controls, FMX.Layouts, FMX.Objects,FMX.StdCtrls, FMX.Gestures; type TListeHorizontale = class(TScaledLayout) FRect_Gauche, FRect_Centre, FRect_Droite : TRectangle; FLb_Gauche, FLb_Centre, FLb_Droite : TLabel; FGesture : TGestureManager; FTextes : TStrings; private procedure Resize; override; { Déclarations privées } protected { Déclarations protégées } public { Déclarations publiques } constructor Create(AOwner : Tcomponent); override; destructor Destroy; override; published { Déclarations publiées } end; procedure Register; implementation procedure Register; begin RegisterComponents('Plus', [TListeHorizontale]); end; { TListeHorizontale } constructor TListeHorizontale.Create(AOwner: Tcomponent); begin inherited; Self.Width:=200; Self.Height:=60; FRect_Gauche:=TRectangle.Create(Self); FRect_Centre:=TRectangle.Create(Self); FRect_Droite:=TRectangle.Create(Self); FRect_Gauche.Parent:=Self; FRect_Centre.Parent:=Self; FRect_Droite.Parent:=Self; FRect_Gauche.Align:=TAlignLayout.FitLeft; FRect_Gauche.Width:=Self.Width*0.28; FRect_Droite.Align:=TAlignLayout.FitRight; FRect_Droite.Width:=Self.Width*0.28; FRect_Centre.Align:=TAlignLayout.Center; FLb_Gauche:= TLabel.Create(Self); FLb_Centre:= TLabel.Create(Self); FLb_Droite := TLabel.Create(Self); FLb_Gauche.Parent:=Self; FLb_Centre.Parent:=Self; FLb_Droite.Parent:=Self; FLb_Gauche.Align:=TAlignLayout.Center; FLb_Centre.Align:=TAlignLayout.Center; FLb_Droite.Align:=TAlignLayout.Center; FTextes := TStrings.Create; FLb_Gauche.Text:='*'; FLb_Centre.Text:='*'; FLb_Droite.Text:='*'; end; destructor TListeHorizontale.Destroy; begin // FTextes.Free; inherited; end; procedure TListeHorizontale.Resize; begin if Assigned(FRect_Gauche) then FRect_Gauche.Width:=Self.Width*0.28; if Assigned(FRect_Droite) then FRect_Droite.Width:=Self.Width*0.28; end; end.
J'ai un doute sur le composant "conteneur" TscaleLayout est il un bon choix, un Trectangle serait plus adapté ?
J'aurais ensuite plein d'autres questions.....
Merci d'avance
Partager