Bonjour,
Environnement : Windows 10, Delphi 11.3 Community FMX
Je me relance dans la création de composants ne trouvant pas quelque chose correspondant à mon besoin.
La finalité étant une application Android, mais je me heurte à un pb qui est n'est pas lié à FMX je pense mais à moi !!
Mon composant TListeDefilante est dérivé de TGridPanelLayout. J'en ai fait tourner un sur une form mais en ayant besoin de plusieurs je veux créer un composant à intégrer avec les autres.
J'ai créé une unité FMX.ListeDefilanteR.pas sur les conseils de Sergio dans un de ses tutos.
Pour tester mon composant, j'ai créé un projet avec un TLabel et un TRectangle juste pour ne pas avoir une form vide et je crée mon objet "aListeDefilante" de type TListeDefilante au runtime.
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
90
91
92 unit FMX.ListeDefilanteR; interface uses System.SysUtils, System.Classes, FMX.Types, FMX.Controls, FMX.Layouts, FMX.StdCtrls, FMX.Objects; type TListeDefilante = class(TGridPanelLayout) private { 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('MesObjFMX', [TListeDefilante]); end; { TListeDefilante } constructor TListeDefilante.Create(AOwner: TComponent); var aLabel : Tlabel; aRectangle : TRectangle; aControlItem : TGridPanelLayout.TControlItem; begin inherited; Parent:=TFmxObject(AOwner); BeginUpdate; ExpandStyle:=TGridPanelLayout.TExpandStyle.AddColumns; ColumnCollection.Clear; with ColumnCollection.Add do begin SizeStyle:=TGridPanelLayout.TSizeStyle.Percent; Value:=30.000000000000000000; end; with ColumnCollection.Add do begin SizeStyle:=TGridPanelLayout.TSizeStyle.Percent; Value:=40.000000000000000000; end; with ColumnCollection.Add do begin SizeStyle:=TGridPanelLayout.TSizeStyle.Percent; Value:=30.000000000000000000; end; with RowCollection.Add do begin SizeStyle:=TGridPanelLayout.TSizeStyle.Percent; Value:=100.000000000000000000; end; ControlCollection.ClearAndResetID; aRectangle := TRectangle.Create(Self); aRectangle.Name:='Rect_Gauche'; aRectangle.Parent:=Self; aControlItem:=ControlCollection.Add; aControlItem.Control:=aRectangle; aControlItem.Setlocation(0,0); aRectangle.Align:=TAlignLayout.Client; aRectangle.Opacity:=0.500000000000000000; aLabel:=TLabel.Create(aRectangle); aLabel.Name:='Lb_Gauche'; aLabel.Text:='G'; aLabel.TextSettings.VertAlign := TTextAlign.Center; aLabel.TextSettings.HorzAlign := TTextAlign.Center; aLabel.HitTest:=False; aLabel.Parent:=aRectangle; aLabel.Align:=TAlignLayout.Horizontal; // aControlItem:=ControlCollection.Add; // aControlItem.Control:=aLabel; // aControlItem.Setlocation(0,2); EndUpdate; end; destructor TListeDefilante.Destroy; begin inherited; end; end.
Voici le code le la form principale du projet :
J'ai mis un point d'arrêt sur la 1er ligne du constructor de mon objet et je ne passe jamais dans ce constructor !! ???
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 unit F_TestListeDefilante; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.ListeDefilanteR, FMX.Controls.Presentation, FMX.StdCtrls, FMX.Objects; type TForm1 = class(TForm) Label1: TLabel; Rectangle1: TRectangle; procedure FormCreate(Sender: TObject); private { Déclarations privées } public { Déclarations publiques } end; var Form1: TForm1; implementation {$R *.fmx} procedure TForm1.FormCreate(Sender: TObject); var aListeDefilante : TListeDefilante ; begin aListeDefilante := TListeDefilante(Self) ; aListeDefilante.Parent:=Self; aListeDefilante.Width:=300; aListeDefilante.Height:=100; // aListeDefilante.Position.X:=50; // aListeDefilante.Position.Y:=200; end; end.
Où est l'erreur ?
Merci d'avance.
Partager