• ベストアンサー

ActiveXコントロールでフォームを参照するには?

VB6SP5を使用してActiveXコントロールを勉強中です。 ActiveXコントロールを作成(OCX化)して、そのコントロールを別のプロジェクトのフォームで使用しようと思っています。 このコントロールの機能は、使用するフォーム上の「ラベル」や「テキストBOX」の情報(Caption、サイズ、位置、色 etc...)を取得して、いろいろと処理を行いたいのですが、取得方法がわかりません。 一応、次のようにコントロールのメソッドの引数でフォームを受け取ろうとしたのですが、下記のコンパイルエラーが出てダメでした。  Public Sub ABC( ByRef frmMain As Form )    :  End Sub --- コンパイルエラー!! -------------------------------------------  "プライベート オブジェクトモジュールを、  パブリック オブジェクトモジュール内で、  パブリック プロシージャの引数または戻り値、  パブリック データメンバ、またはパブリックのユーザー定義型のフィールドとして、  使用することはできません。" ------------------------------------------------------------------ ところが、"As Form" を "As Object" にすると、上手くいきました。  Public Sub ABC( ByRef frmMain As Object )    :  End Sub この違いは何なんでしょうか? この使い方は正しいのでしょうか? もし、別の方法があれば、教えて下さい。

質問者が選んだベストアンサー

  • ベストアンサー
  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.3

あにぃーの反論、さすがにレアな情報ひっぱってきますねー かなりヘビーっす。 まーそれはそれとして、、、 http://www.microsoft.com/japan/developer/library/vbenlr98/vamsgCantPassPrivateObject.htm の内容は以前に確認しております。 その中で >作成したプライベート クラスをクライアントへ渡す必要がある場合は、その Instancing プロパティを Private 以外の値に設定してください。 とあります。 要は回避方法があるということです。 しかもObject型で受けることにより、セットされるタイミングでその使用される領域とクラス名で、VB側がフォームやコントロール類であることを理解します。 受けることができないのであれば、セットすることすらできません。 ましてやオリジナルのコントロールであるならば、なおの事問題はありません。 私自身、張るだけで各コントロールのサイズを変更するActiveXを公開した事があります。 特別な操作を出さない限り、URLの様なエラーは出ないと思います。 (だって今までそれで出たことないから。。。) それでObject変数にセットしてできることは、全てSendMessage系の事なので結果は同じです。 もしAs Objectで宣言した変数にセットして症状が出た場合は、 >ウインドウハンドル、FindWindow(Ex), SendMessage 辺りでやるしかないでは これだけではなく、グローバルメモリ領域に本体の方が書き込んで、それを利用する必要があります。 だから出なければ結果オーライ。 と言う発言をしました。←言い訳っぽい?

reshop
質問者

お礼

ありがとうございます。 とりあえず、As Objectで作成してみます。

その他の回答 (2)

  • todo36
  • ベストアンサー率58% (728/1234)
回答No.2

>As Objectは、オブジェクトとして扱えるもの全てに対応しているので、それでよいと思います。 いや、駄目だと思います。 プロパティおよびメソッドで使用できるデータ型 http://www.microsoft.com/developer/library/vbcon98/vbcondatatypesusedinpropertiesmethods.htm エラー98 http://www.microsoft.com/japan/developer/library/vbenlr98/vamsgCantPassPrivateObject.htm ”このエラーが検出されない場合もあるので注意してください。”だと。 ウインドウハンドル、FindWindow(Ex), SendMessage 辺りでやるしかないでは。

reshop
質問者

お礼

あらがとうございます。

  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.1

以前に似たような件で、お話いたしました。(それが完全に正しいかは、依然不明) As Objectは、オブジェクトとして扱えるもの全てに対応しているので、それでよいと思います。 ただし、Witheventsが使用できないですが、、、

参考URL:
http://oshiete1.goo.ne.jp/kotaeru.php3?q=414582
reshop
質問者

お礼

お返事ありがとうございました。