2016-07-03 62 views
1

我想創建一個由TLayout組成的組件,其中包含一個TRectangle如何避免在按Alt-F12兩次時創建重複的子組件?

TRectangle在組件的構造函數內部創建,並以TLayout作爲其父項。

問題:在按下ALT-F12進入窗體的源代碼編輯器並再次按下它以保留它時,將該組件添加到窗體中,爲父窗體創建額外的子組件(TRectangle)。 (該TRectangle甚至不應該出現在表單文本編輯器,我認爲這會導致該問題)

代碼組件:

unit Problem; 

interface 

uses 
    System.SysUtils, System.Classes, FMX.Types, FMX.Layouts, FMX.Objects; 

type 
    TProblem = class(TLayout) 
    private 
    rect: TRectangle; 
    public 
    constructor Create(AOwner: TComponent); override; 
    end; 

procedure Register; 

implementation 

procedure Register; 
begin 
    RegisterComponents('FMX Problem Component', [TProblem]); 
end; 

{ TProblem } 

constructor TProblem.Create(AOwner: TComponent); 
begin 
    inherited; 
    rect := TRectangle.Create(nil); 
    rect.Parent := Self; 
end; 

end. 

我相信答案是微不足道的,但希望它不過。

+1

請勿發佈。如果它在父級的受保護或私有部分中,則不應在該類之外提供,因此不會顯示在樹中。 –

+0

它在父母的私人部分。奇怪的是,當我將組件放在窗體上時,它不會出現,但是當我在窗體上加載具有這種組件的項目時,它在結構樹中出現。 – Domus

+0

我一定在做一些可怕的錯誤。每次我按下Alt-F12查看錶格來源和Alt-F12離開它時,它會創建TRectangle的新實例... – Domus

回答

1

使用存儲:= FALSE爲矩形:

constructor TProblem.Create(AOwner: TComponent); 
begin 
    inherited; 
    rect := TRectangle.Create(nil); 
    rect.Parent := Self; 
    rect.Stored := False 
end; 

SetSubcomponent似乎在FireMonkey不正確處理。