Autor Téma: Vlastní komponenta se subkomponenty zlobí při otevření projektu / kopírování  (Přečteno 420 krát)

Offline age.new

  • Plnoletý
  • ***
  • Příspěvků: 217
  • Karma: 0
Vážená komunito,

opět narážím hlavou do zdi jménem Delphi. Mám vlastní komponentu, která má v privátní sekci další komponenty, které jsou jako "SubComponent". To znamená, že v okně se strukturou komponent vidím pouze moji komponentu a subkomponenty jsou přístupné jako property.

Když tuto komponentu přidávám do projektu přes paletu komponent, vše je v pořádku. Problém nastane, pokud tuto komponentu zkopíruji (ctrl+C - ctrl+V). Komponenta se sice zkopíruje, ale všechny subkomponenty se "navíc" zduplikují a stanou se z nich klasické komponenty (né sub). Samozřejmě potom projekt hlásí duplikaci jmen.

Další případ výskytu uvedeného problému je, když vložím svoji komponentu na formulář. Vše je v tuto chvíli ještě v pořádku. Jakmile ale projekt zavřu a opět otevřu, Delphi automaticky všechny subkomponenty opět zduplikuje a stanou se z nich klasické komponenty.

Vnímám to jako bug, ale například komponenta LabeledEdit (tj. Label a Edit) ničím takovým netrpí. Nenašel jsem ale nic, co by to mělo způsobovat.

Zde je kód, jak vytvářím subkomponentu:

Kód: Delphi [Vybrat]
  1. type
  2.   TMyFMXButton = class(TLayout)
  3.   private
  4.     FDownGraphic: TRectangle;
  5.   ...
  6.   public
  7.     constructor Create(AOwner: TComponent); override;
  8.     destructor Destroy; override;
  9.   published
  10.     property DownGraphic: TRectangle read FDownGraphic;
  11.   end;
  12.  
  13. ...
  14.  
  15. constructor TMyFMXButton.Create(AOwner: TComponent);
  16. begin
  17.   inherited Create(AOwner);
  18.  
  19.   FDownGraphic := TRectangle.Create(Self);
  20.   FDownGraphic.Parent := Self;
  21.   FDownGraphic.Name := Self.Name + '_Down_Graphic';
  22.   FDownGraphic.SetSubComponent(true);
  23. end;
  24.  
  25. destructor TMyFMXButton.Destroy;
  26. begin
  27.   if Assigned(FDownGraphic) then FDownGraphic.Free;
  28. end;
  29.  

Je zde něco špatně?

Děkuji.

Offline Radek Červinka

  • Administrátoři
  • Padawan
  • *****
  • Příspěvků: 2697
  • Karma: 104
    • Verze Delphi: D2007, DXE + 2 poslední
    • O Delphi v češtině
Excellent
Rated 1 time
Kód: Delphi [Vybrat]
  1. FDownGraphic.Stored := False;

RTFM - FMX.Types.TFmxObject.Stored

Specifies whether this object is stored in the .XFM file.

Set the Stored property to True to store the object in the .XFM file. Otherwise, set Stored to False.
Embarcadero MVP - Czech republic

Offline age.new

  • Plnoletý
  • ***
  • Příspěvků: 217
  • Karma: 0
Ano, funguje! Už to komponenty neduplikuje.