0

2つのVCLコンポーネントをマージして、両方のプロパティにアクセスできるようにするにはどうすればよいですか?

たとえば、aTImageとaTPanelを1つにマージしたいのですが、TPanelがベースコンポーネントである必要があるため、TImageはの子になりTPanelます。

これを行うことは可能ですか?

Delphi 2010で[コンポーネント]>[新しいVCLコンポーネント]を使用してこれを実行しようとしましたが、ビジュアルコンポーネントが必要な場合に非ビジュアルコンポーネントが作成されます。

これを変更するにはどうすればよいですか?

4

3 に答える 3

5

私が正しく理解していれば、2つのコンポーネントをマージして、両方のプロパティを公開したいと思いますか?

これがあなたが探しているものである場合、私はここで見つけることができるTImageとTScrollBoxを一緒に結合するための同様の質問をしました:

コンポーネントの作成-コンポーネントを結合しますか?

SetSubComponentはこれを達成するための鍵でした。詳細を理解するには、上記のリンクからのコメントと回答を読む価値があるかもしれません。

于 2012-05-20T13:24:57.063 に答える
3

Delphi言語は、実装の多重継承をサポートせず、インターフェイスの多重継承のみをサポートします。したがって、2つのクラスを希望どおりに単純にマージすることはできません。

あなたが提案していることはとにかく少し奇妙に聞こえます。両方ともTPanelTImage独自の視覚的表面を持っています。私が想像できる唯一のもっともらしいことは、あなたがTImageの子を作ることができるということですTPanel。から新しいコンポーネントを取得しTPanelます。そのコンポーネントは、を作成して所有しTImageます。TImageサブコントロールの親をパネルにします。TImageコントロールに表示するコントロールのプロパティとイベントは、手動で実行する必要があります。これは継承ではなく構成です。

于 2012-05-20T12:54:22.433 に答える
1

を使用してTFrame、設計時に他のビジュアルコンポーネントからなるコンポーネントを作成できます。これはおそらくあなたが望むものではありません。プロパティは「マージ」されません。この新しく作成されたコンポーネントが希望どおりに動作するように、独自のプロパティとメソッドを設計する必要があります。必要な機能(マウスの位置に応じて視覚的な機能を変更する)は、フレームに1回だけ組み込む必要があります。TPanelTImage

于 2012-05-21T05:49:14.863 に答える