C'est un Firemonkey composant, cependant j'ai pu voir que la plupart de la composante de base est la même pour VCL et FMX, de sorte s'il vous plaît si vous savez comment faire de la VCL de partager vos connaissances, il peut éventuellement être la solution pour mon cas.
Je suis à l'aide d'un TPopup comme l'ancêtre. Il est pratique pour moi, car il reste sur la forme/châssis et je peux l'associer avec LiveBindings en utilisant le même contexte, la structure de la société mère, ce qui est très pratique pour moi.
J'ai besoin de se comporter exactement, il est le TPopup, comme un conteneur. Mais j'ai besoin c'est mieux et d'avoir mon spécifiques des boutons (j'ai créé quelques propriétés et les automatismes pour mon logiciel à l'intérieur)
Le problème est que j'ai créer certains contrôles internes, comme TLayouts, Tpanels et Tbuttons de faire ressemble à ceci: (vide)
Que le noir de la zone de l'intérieur, c'est là où je veux déposer des contrôles, comme TEdit et les autres.
J'ai mis tous les internes contrôles créés pour Stocker = faux, de sorte qu'il n'est pas stocké sur le système de streaming. Faire que lorsque je déposer un TEdit par exemple, ce que je reçois est-ce (Tedit avec aligné=top j'en ai besoin):
Mais je m'attendais à ce:
Si je change le Magasin = vrai que je peut obtenir l'effet, mais tout l'intérieur contrôles sont exposées sur le panneau Structure et à chaque fois que je enregistrez le formulaire et de le rouvrir tout est dupliqué. L'intérieur des composants exposés n'est pas un problème pour moi, mais la répétition est, si j'ai fermer et ouvrir le composant 10 fois que je vais obtenir la totalité de l'intérieur de la structure reproduit 10 fois.
Je vais essayer de montrer un peu de code qui est lié à la conception du composant:
Déclaration de la classe:
[ComponentPlatformsAttribute(pidWin32 or pidWin64 or pidOSX32 or pidiOSSimulator or pidiOSDevice or pidAndroid)]
TNaharFMXPopup = class(TPopup, INaharControlAdapter, INaharControl)
private
protected
FpnlMain : TPanel;
FlytToolBar : TLayout;
FbtnClose : TButton;
FbtnSave : TButton;
FbtnEdit : TButton;
FpnlClientArea : TPanel;
FlblTitle : TLabel;
procedure Loaded; override;
procedure Notification(AComponent: TComponent; Operation: TOperation); override;
constructor Create:
constructor TNaharFMXPopup.Create(AOwner: TComponent);
begin
inherited;
FpnlMain := TPanel.Create(Self);
FlblTitle := TLabel.Create(Self);
FlytToolBar := TLayout.Create(Self);
FbtnEdit := TButton.Create(Self);
FpnlClientArea := TPanel.Create(Self);
FbtnClose := TButton.Create(FlytToolBar);
FbtnSave := TButton.Create(FlytToolBar);
Height := 382;
Placement := TPlacement.Center;
StyleLookup := 'combopopupstyle';
Width := 300;
ApplyControlsProp;
end;
Définition des propriétés des contrôles internes:
procedure TNaharFMXPopup.ApplyControlsProp;
begin
with FpnlMain do
begin
Parent := Self;
Align := TAlignLayout.Client;
StyleLookup := 'grouppanel';
TabOrder := 0;
Margins.Bottom := 10;
Margins.Left := 10;
Margins.Right := 10;
Margins.Top := 10;
Stored := false;
end;
with FlblTitle do
begin
Parent := FpnlMain;
Text := 'Título';
Align := TAlignLayout.Top;
Height := 36;
StyleLookup := 'flyouttitlelabel';
Stored := false;
end;
with FpnlClientArea do
begin
Parent := FpnlMain;
Align := TAlignLayout.Client;
StyleLookup := 'gridpanel';
TabOrder := 0;
Margins.Bottom := 5;
Margins.Left := 5;
Margins.Right := 5;
Margins.Top := 5;
Stored := false;
end;
with FlytToolBar do
begin
Parent := FpnlMain;
Align := TAlignLayout.Bottom;
Height := 50;
Stored := false;
end;
with FbtnClose do
begin
Parent := FlytToolBar;
Text := 'Fecha';
Align := TAlignLayout.Left;
Height := 50;
StyleLookup := 'tilebutton';
TabOrder := 0;
Width := 70;
ModalResult := mrClose;
Stored := false;
end;
with FbtnEdit do
begin
Parent := FlytToolBar;
Text := '';//'Edita';
Align := TAlignLayout.Left;
Height := 50;
StyleLookup := 'tilebutton';
TabOrder := 1;
Width := 70;
ModalResult := mrContinue;
Stored := false;
Enabled := false;
end;
with FbtnSave do
begin
Parent := FlytToolBar;
Text := 'Salva';
Align := TAlignLayout.Left;
Height := 50;
StyleLookup := 'tilebutton';
TabOrder := 2;
Width := 70;
ModalResult := mrOk;
Stored := false;
end;
end;
Chargé:
procedure TNaharFMXPopup.Loaded;
begin
inherited;
ApplyControlsProp;
SetEvents;
end;
J'ai essayé la suite de la notification, en essayant de faire le control inséré un parent pour mon intenal "clientarea"
procedure TNaharFMXPopup.Notification(AComponent: TComponent; Operation: TOperation);
begin
inherited;
if (Operation = opInsert) and (csDesigning in ComponentState) then
begin
if AComponent.Owner = self then
if AComponent is TFmxObject then
begin
(AComponent as TFmxObject).Parent := FpnlClientArea;
end;
end;
end;
Mais cela n'a rien changer.
J'ai posé la même question avant, mais je n'étais pas au courant de beaucoup de choses sur la création d'un tel composant et la réponse que j'ai donné peu d'aide, j'ai été absent le Parent de chaque composant interne.
Maintenant, je suis en train de vraiment montrer où est mon besoin: j'ai besoin de déposer des contrôles sur mon TPopup boîte de dialogue qui sera le parent de l'ClientArea à l'intérieur.