Hallo,
ich versuche gerade mit Delphi XE6 in einem Firmonkey-Projekt eine von TPanel abgeleitete Komponente zu erstellen.
Also vereinfacht etwa so etwas:
Delphi-Quellcode:
unit TFlipPanelsIntern;
interface
uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
FMX.Types, FMX.Graphics, FMX.Controls, FMX.Forms, FMX.Dialogs, FMX.StdCtrls;
type
TFlipPanelIntern =
class(TPanel)
constructor Create(AOwner: TComponent);
override;
private
Button1: TButton;
public
published
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('
sks', [TFlipPanelIntern]);
end;
constructor TFlipPanelIntern.create(AOwner: Tcomponent);
begin
inherited create(AOwner);
Button1 := TButton.Create(self);
Button1.SetSubComponent(true);
Button1.Parent := self;
Button1.
Name := '
Button1';
Button1.Align := TAlignLayout.Right;
Button1.Width := 20;
end;
end.
Das funktioniert soweit auch bis ich die Komponente in ein Formular einfüge.
Die Subkomponente "Button1" wird mit in die .FMX gescchrieben
Delphi-Quellcode:
object FlipPanelIntern1: TFlipPanelIntern
Height = 120.000000000000000000
Position.X = 136.000000000000000000
Position.Y = 96.000000000000000000
Width = 120.000000000000000000
TabOrder = 5
object Button1: TButton
Align = Right
Height = 120.000000000000000000
Position.X = 100.000000000000000000
TabOrder = 0
Text = 'Button1'
Width = 20.000000000000000000
end
end
Wenn ich das Formular nun erneut öffne, dann habe ich den Button 2x drin.
Ich nehme mal an, dass beim Parsen der .FMX meine Komponente angelegt wird und zwar inclusive des Buttons aus dem Konstructor und dann der Button aus der *.FMX
Wenn ich das Formular dan wieder schliesse (und speichere) steht der Button 2x in der .FMX und beim Öffnen zeigt der FormularEditor den Button 3x ... und so weiter....
Eigentlich dachte ich SetSubComponent(true) soll genau das - das Schreiben in die RessourcenDatei verhindern.
Folgende Tips habe ich bereits via Google gefunden und vergeblich ausprobiert.
- die TButton-Komponente aus privat, public, published deklariern
- den Constructor von TButton mit AOwner self, Owne und nil aufrufen
Grüße,
Sascha