こんにちは、flatです。
今回はDelphiで自作コンポーネントAをActiveX化したものをVBで使用するとき発生するエラーについて質問させていただきます。
VBにActiveXを取り込む所までは上手くいくのですが、取り込んだコンポーネントをVBのフォーム上に配置しようとすると「親ウインドウが見つかりません」というエラーが発生して配置が出来ません。
配置する瞬間に(TFrameを継承した)自作コンポーネントAのCreateが呼ばれるですが(下のコード参照)
type
TFrame_Hoge = Class(TFrame)
public
constructor Create(AOwner:TComponent);override;
end;
implementation
constructor TFrame_Hoge.Create(AOwner: TComponent);
begin
inherited Create(AOwner); // ①
(省略)
end;
この中の①の部分で例の例外が生成されているようです。
なにか問題があったらご指摘お願いします。
追記:使用しているDelphiのバージョンはEnterprise 6です。
コンポーネントのハンドルは、Parent構築後もっとも最初にそのParent.Paintが呼び出される前に初期化する子コンポーネントのプロパティ、例えばFont.Sizeを初期化しようとしたときに問題の例外が生成されるようです。
そこで、コンポーネントのもっとも親に該当するコンポーネントのPaintを書き換えると成功すると思います(少なくとも私は成功しました)。
procedure TPrent.Paint;
begin
inherited;
case Tag of
0: begin
Child.Color := clCream;
Child.Font.Size := 12;
Tag := 1;
end;
end;
end;
ツイート | ![]() |