2016-07-03 7 views
1

TRectangle을 포함하는 TLayout으로 구성된 구성 요소를 생성하려고합니다.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

사용은 다음 RECT에 대한 거짓 =

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

SetSubcomponent는 FireMonkey에서 잘못 처리 될 것으로 보인다.