我想创建一个由TLayout
组成的组件,其中包含TRectangle
。
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.
我确信答案是微不足道的,但我会很感激。
答案 0 :(得分:1)
使用Stored:= false表示rect:
constructor TProblem.Create(AOwner: TComponent);
begin
inherited;
rect := TRectangle.Create(nil);
rect.Parent := Self;
rect.Stored := False
end;
在FireMonkey中似乎错误地处理了SetSubcomponent。