2 pièce(s) jointe(s)
Créer un composant FMX composite
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 :
Pièce jointe 650517
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 :
Pièce jointe 650519
Je ne vois pas mes 3 rectangles ni mes Labels.
Voilà le code :
Code:
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. |
Le resize ne fait rien...
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