1
TRectangle
を含むTLayout
で構成されたコンポーネントを作成したいとします。ALT-F12を2回押しても重複するサブコンポーネントが作成されないようにするにはどうすればよいですか?
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.
を私は答えは自明であると確信しているが、それをいただければ幸いですそれにもかかわらず。 = RECTのための偽:ストアド
公開しないでください。親の保護されたセクションまたはプライベートセクションにある場合は、そのクラスの外部で使用できないようにして、ツリーに表示しません。 –
親のプライベートセクションにあります。奇妙なことは、コンポーネントをフォームに配置すると表示されませんが、フォームにそのようなコンポーネントを含むプロジェクトをロードすると構造ツリーに表示されることです。 – Domus
私はひどく間違ったことをしているに違いない。フォームのソースを表示するためにAlt-F12を押し、それを残すためにAlt-F12を押すたびに、TRectangleの新しいインスタンスが作成されます。 – Domus