- ベストアンサー
ActiveX EXEとタイマーとVB
いつもお世話になってます。 さっそく質問ですが、 ActiveX EXE側にタイマーとテキストボックスを持っています。 VB側のフォームにテキストボックスがあります。 VBからActiveX EXEを起動させ、決まった時間(例えば5秒おき)にVBのテキストボックスに ある文字を表示させる、ということがしたいです。 条件として、 VB側の動きは、 (1)最初のActiveXを起動 (2)ActiveXのSetとNothingだけしかしない しかしません。 なので、ActiveXからは「RaiseEvents」はしません。 ActiveX側で、タイマーイベント部分に、 ActiveXのフォームのテキストボックス.text = "文字" set △△ = ActiveXのフォームのテキストボックス (△△は、ActiveXのフォームのテキストボックスとしてセットされています。) のように、プログラムしてみたのですが、 VB側のテキストボックスに表示できませんでした。 尚、VB側は、ActiveX以外の処理があるので、途中からActiveXを起動させることになります。 この条件で、VBのテキストボックスに文字を表示させることはできますか? もしできるとしたら、どのような方法がありますか?? まだネットや本で調べ途中なので、もし何か参考ページがありましたら教えていただきたいです。 よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
ActiveX EXEを起動する際に、VB側のTextBoxのObjectを渡しておいて、タイマルーチン内でそのTextBox Objectを使って文字を表示させればいいのではないでしょうか。 明後日のことを言ってたらごめんなさい。
その他の回答 (3)
- umejas
- ベストアンサー率28% (9/32)
piyo2000様より、Object型で渡さないとエラーになるとのご指摘がございましたので、ご参考下さい。 (piyo2000様、ご指摘ありがとうございます。) 私が考えていたのは、ActiveX EXE側で Private vbTextObj As Object Public Property Let TextObject(ByVal newValue As Object) Set vbTextObj = newValue End Property などとしておいて、VB側でActiveX EXEを起動(New)後に (ActiveX EXE Object名).TextObject = Text1 としておけば、ActiveX EXE側のタイマルーチン内で (宣言先).vbTextObj.Text = ~ とすることで、ActiveX EXE側からVB側のTextBoxへ表示できるのではないでしょうか。
- piyo2000
- ベストアンサー率49% (144/293)
#2です。 ごめんなさい。 >Private sub setTextBox(oText As Object) は >Public sub setTextBox(oText As Object) じゃないといけないですね。すみません。
- piyo2000
- ベストアンサー率49% (144/293)
#1さんの方法を試してみましたが、TextBoxを渡すとコンパイルエラーになりますね(^^; # Objectで渡せばいいですけど。 >具体的なプログラムがどうも分からなくて ActiveX Exeのコントロールクラス(Newするときに指定するクラス)に Private m_oText As Object ... Private sub setTextBox(oText As Object) ' TextBoxではコンパイルエラー set m_oText = oText End sub のように、ActiveX Exe側に標準ExeのTextBoxオブジェクトを渡すメソッドを定義しておきます。 また、ActiveX Exeの(Timerがある)フォームに Public Event TimeUp() とイベントを定義して、Timerイベントでは Private Sub Timer1_Timer() RaiseEvent TimeUp End Sub とでもしておきます。 そしてコントロールクラスでWithEventsでフォームオブジェクトを定義し、Newした直後にsetTextBox()を呼びます。 private sub oForm_TimeUp() 'このプロシージャはWithEventsによるイベント if Not (m_oText is nothing) then m_oText.Text = Now '現在時刻 end if end sub のように書けばいいのでは。 この方法はTimerイベントをTimeUpイベントに置き換えているだけですので(コントロールクラスでTimerイベントを取得するため)、少々まどろっこしいかも。 コントロールで受け取ったm_oTextをそのままフォームのメソッドなりプロパティ変数なりに入れて表示処理自体はTimerイベントでやってもいいですね。 Object渡しが嫌ならhwndを渡してSetText()APIを使うという手もあります。
補足
ご回答ありがとうございます!! 多分umejas様のおっしゃる通り、VB側のテキストボックスを 渡せばよいのだと思うのですが、具体的なプログラムがどうも分からなくて。。。 すみませんが、教えていただけませんでしょうか?