1

私はとを持ってTPageControlTTabSheetます。その中でTTabSheet私はたくさんの関数とコンポーネントを持っています。実行時に、すべての機能とコンポーネントがまだ機能しているボタンを使用して、そのtabSheetを複製したいと思います。

今、私はなんとかタブシートを複製することができました。ただし、新しいタブシートは完全に空です。

これがそのボタンの私のコードです。

TTabSheet * NewTabSheet= new TTabSheet(pageControlMain);
NewTabSheet->PageControl = pageControlMain;
NewTabSheet->Caption = "TabSheet";
pageControlMain->ActivePage = NewTabSheet;

私は何が欠けていますか?

TTabSheets内のコンポーネントと機能は、単なるスクロールボックス、編集、ボタン、およびパネルです。

4

1 に答える 1

2

クラス自体にはTTabSheet子コントロールがないため、何も表示されません。個々のコントロールをインスタンス化し、それらのデータもコピーする必要があります。

これを行う1つの方法は、TStream.WriteComponent()andメソッドを使用してソースを一時的なDFMTStream.ReadComponent()に保存し、それを新しいものにロードすることです。例:TTabSheetTTabSheet

TMemoryStream *Strm = new TMemoryStream;
Strm->WriteComponent(SourceTabSheet);
Strm->Position = 0;
TTabSheet *NewTabSheet = new TTabSheet(pageControlMain);
NewTabSheet->PageControl = pageControlMain;
Strm->ReadComponent(NewTabSheet);
pageControlMain->ActivePage = NewTabSheet;
delete Strm;

もう1つのオプションは、コンポーネントをTFrame設計時に派生クラスに配置し、実行時にそのクラスのインスタンスを作成してそれぞれに配置しTTabSheet、コントロールを処理できるようにすることです。例:

TTabSheet *NewTabSheet = new TTabSheet(pageControlMain);
NewTabSheet->PageControl = pageControlMain;
TMyFrame *NewFrame = new TMyFrame(NewTabSheet);
NewFrame->Parent = NewTabSheet;
pageControlMain->ActivePage = NewTabSheet;
于 2012-04-18T04:16:07.303 に答える