Clone メソッド
FireMonkey の基底オブジェクト TFmxObject は Clone メソッドを持っています。
Clone メソッドを呼ぶとオブジェクトを複製できます。
この時、子コンポーネントも全て複製されます。
例えば、↓こんな Panel があるときに Clone を呼ぶと…
↓こんな風に子コンポーネントのプロパティ値も含めて複製されます。
コードはたったこれだけです。
procedure TfrmClone.Button1Click(Sender: TObject);
begin
var P := Panel1.Clone(Self);
P.Parent := Layout1;
end;
解説
Clone メソッドは内部でコンポーネントストリームにデータを書き出して、読み出す、ということをやっています。
つまり、Delphi で .fmx や .dfm を書き出す過程を範囲を絞ってやっている、ということです。
具体的には
- WriteComponent を使ってメモリストリームにコンポーネントの情報を書き出す
- TFmxReader を使ってメモリストリームに書き込まれた情報を読み出しコンポーネントを生成する
- オーナーが指定されていればオーナーの管理コンポーネントに追加する
ということをしています。
まとめ
「ああ、この動的に生成したコントロールセットを複製したい!」というとき利用できます。
静的な場合は TFrame を使った方が良いです。
あとは非ビジュアルコンポーネントの複製や、自分で TFmxObject から派生したクラスでも使えますね。