質問投稿でgooポイントが当たるキャンペーン実施中!!>>

こんばんは。
今、VB6でActiveXコントロールを作成しようと思っています。
現在、標準EXEにて、プログラムが作ってあります。
動作としては、
1.スタートボタン(CmdStart)で開始
2.処理(外部の測定器によるデータ収集)
3.終了ボタン(CmdEnd)にてプログラム終了
です。

これをもとに、ActiveXコントロールを作成したいです。手元にある文献にしたがってほぼコピー&ペーストで作成しました。また、これの動作を調べるため、標準EXEのフォームを作成し、そのフォームにActiveXコントロールを貼り付けました。

ここで質問です。
Form_LoadはUserControl_Initializeに書き換えました。(これは文献に載っていました)

最後のプログラム終了がうまくいきません。
標準EXEでは
Private Sub CmdEnd_Click()
Unload Me
End Sub
と書いてプログラムを終了させていました。
ここを書き換えずにActiveXコントロールを実行させたらエラーが出ました。"Unload Me"を"End"に書き換えてみたら、サポートされていないと出ました。

CmdEndをクリックしてプログラムを終了させるにはどう書けばいいでしょうか?

よろしくお願いします。

A 回答 (1件)

ActiveXコントロール内で、プログラムを終了させよう、というプログラムデザインがそもそもの元凶だと思われます。


質問で書かれていた、1,2,3の処理中、2の機能を持ったActiveXコントロールを作成する。
1の処理開始、3のプログラム終了はActiveXコントロールを貼り付けられるプログラム本体で処理する方が良いと思います。

仮に2の処理終了と同時に、プログラムを終了させたいと言うことであれば、ActiveXコントロールに処理終了イベントを実装します。

'処理が終了したことを通知するイベント
Event ShoriShuryo
のような感じです。

処理が終わった際に、

'処理終了イベントを発生させてプログラム本体に通知する
RaiseEvent ShoriShuryo

としてやれば、本体プログラム中でShoriShuryoイベントが発生しますので、プログラム終了のためにUnload Meを実行します。

決してお勧めなわけではありませんが、以下のようにすると内部の終了ボタンがクリックされた事を、本体プログラム側に通知することができます。
'『終了』コマンドボタンがクリックされたことを通知するイベント
Event EndClick

Private Sub CmdEnd_Click()
  RaiseEvent EndClick
End Sub
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
たしかに、ゆくゆくはExcelにはりつけて利用しようと思っていたので、そちらで処理させようと思います。

参考になりました。

お礼日時:2006/10/09 23:11

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QActiveX DLL と ActiveXコントロールの違い

VB6で開発をしています。
複数のEXEファイルを使用するシステムです。
各EXEファイルの共通のモジュールをライブラリ化しようと思っています。

これは [ActiveX DLL] 又は、[ActiveXコントロール] のどちらでも実現できると思うんですが、どちらで作成した方が良いのでしょうか?

それぞれのメリット、デミリットを教えて下さい。

Aベストアンサー

混乱させますw

私も最近まで知らなかったのですが、任意のタイミングでOCXもインスタンスの生成が可能みたいです。
WinSockを張らずにPGを書き上げ、WinSockコントロールを使用する方法がわたしの利用しているメーリングリストに出ておりました。
その結末は、「あまり公開はされてはいないけど、ほとんどのコントロールはEXEにしてからOCXとして取り込むことができる」ということです。


ActiveXDLLも参照設定をしなければ、DLLバージョンが違っても大丈夫です。
ただし宣言が
As HogeHoge←(DLLの定義)を
As Object
として、CreateObject("DLL定義")のように行うと、引数が一緒ならEXEはリコンパイルしないでもいいです。実例として、エクセルを参照設定して[as Excel]と宣言していたら、その参照設定に対応したExcelしか操作できませんが、[As Object]と[CreateObject("Excel.Application")]とすると、EXCEL95~XPまで扱えます。
不便なのは、タイプライブラリが未設定になるので、Excelの各プロパティ/メソッドを知らないといけないし、Excel固有の定数が宣言もされてないので、自分で定数値を調べなければいけません。でもバージョンの違いを気にしないでいけるのは、非常に便利です。


速さのことを言ったら、当然DLLが早いです。
OCXはプロパティにRight/Leftなどを持っています。変えて言うと実体を持っていると言うことです。非表示にしていても実体をもっています。DLLはインスタンスは生成されますが、OCXだって生成されるので、表示しないで使用するなら、OCXの意味があまりありません。


んで、私(個人)の考えとしては、、、
※オリジナルボタンなどの、画面上必要ならOCX
  理由:画面に必要だから
※画面に表示を行う必要がなくても、配布する気ならOCX
  理由:配布先のユーザが扱いやすい
※そうじゃなければDLL
  理由:OCXにする理由が見つからないから


余談です。
私はいつもCommonコントロールは使用しません。
  理由:簡単なAPIでも実現できるのに、機能が少ないCommonコントロールを追加して、EXEの容量を大きくしたくないから

混乱させますw

私も最近まで知らなかったのですが、任意のタイミングでOCXもインスタンスの生成が可能みたいです。
WinSockを張らずにPGを書き上げ、WinSockコントロールを使用する方法がわたしの利用しているメーリングリストに出ておりました。
その結末は、「あまり公開はされてはいないけど、ほとんどのコントロールはEXEにしてからOCXとして取り込むことができる」ということです。


ActiveXDLLも参照設定をしなければ、DLLバージョンが違っても大丈夫です。
ただし宣言が
As HogeHoge←(DLLの定...続きを読む

QVB6.0でのOCX・DLLの作り方

VB6.0でのOCX・DLLの作り方を
詳しくご存知の方
もしくは
HP等ご存知の方
教えてくださいませんか?
よろしくお願いいたします。

Aベストアンサー

↓ こちらのサイト等はいかがかな !? ↓(^o^)丿

参考URL:http://hp.vector.co.jp/authors/VA014162/hitch/ActiveX/activex.htm


人気Q&Aランキング