Einzelnen Beitrag anzeigen

sks4u

Registriert seit: 16. Sep 2013
3 Beiträge
 
#1

Firemonkey ignoriert SetSubComponent()

  Alt 14. Mai 2014, 18:17
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

Geändert von sks4u (15. Mai 2014 um 09:07 Uhr)
  Mit Zitat antworten Zitat