6
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

DelphiAdvent Calendar 2024

Day 1

[Delphi FMX][小ネタ] オブジェクトのクローン

Last updated at Posted at 2024-11-30

Clone メソッド

FireMonkey の基底オブジェクト TFmxObjectClone メソッドを持っています。

Clone メソッドを呼ぶとオブジェクトを複製できます。
この時、子コンポーネントも全て複製されます。

例えば、↓こんな Panel があるときに Clone を呼ぶと…

image.png

↓こんな風に子コンポーネントのプロパティ値も含めて複製されます。

image.png

コードはたったこれだけです。

procedure TfrmClone.Button1Click(Sender: TObject);
begin
  var P := Panel1.Clone(Self);
  P.Parent := Layout1;
end;

解説

Clone メソッドは内部でコンポーネントストリームにデータを書き出して、読み出す、ということをやっています。
つまり、Delphi で .fmx や .dfm を書き出す過程を範囲を絞ってやっている、ということです。

具体的には

  1. WriteComponent を使ってメモリストリームにコンポーネントの情報を書き出す
  2. TFmxReader を使ってメモリストリームに書き込まれた情報を読み出しコンポーネントを生成する
  3. オーナーが指定されていればオーナーの管理コンポーネントに追加する

ということをしています。

まとめ

「ああ、この動的に生成したコントロールセットを複製したい!」というとき利用できます。
静的な場合は TFrame を使った方が良いです。

あとは非ビジュアルコンポーネントの複製や、自分で TFmxObject から派生したクラスでも使えますね。

6
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?