自作ActiveX使用時のエラーについて


flat  2005-05-07 22:28:56  No: 14668

こんにちは、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;

この中の①の部分で例の例外が生成されているようです。

なにか問題があったらご指摘お願いします。


flat  2005-05-07 22:41:05  No: 14669

追記:使用しているDelphiのバージョンはEnterprise 6です。


篠田雅夫  2005-07-02 20:36:36  No: 14670

コンポーネントのハンドルは、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;


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加