OKWaveが大リニューアル!ただいまβ版公開中

ActiveX EXEとタイマーとVB


OKWaveコミュニティー
新規ユーザー登録(無料)今すぐ登録しよう!!
はじめての方へ OKWaveではこんなことができます!
ピックアップ
特集一覧
ブラック会社の喜怒哀楽
ブラック会社の喜怒哀楽
現代を生き抜く知恵と努力!あなたの未来を明るく照らします!
OKWaveスタッフブログ
OKWaveスタッフブログ
OKWaveスタッフから便利でお得な情報をQ&Aと共にご紹介します!
好きだからこそ切ない!恋愛特集
好きだからこそ切ない!恋愛特集
「会いたいときに会えない」そんな切ない思いを恋愛で体験したことはありませんか?
その他の特集はこちらからご覧下さい
おすすめリンク

質問

質問者:hemakozo 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のテキストボックスに文字を表示させることはできますか?
もしできるとしたら、どのような方法がありますか??

まだネットや本で調べ途中なので、もし何か参考ページがありましたら教えていただきたいです。


よろしくお願いします。
質問投稿日時:05/04/08 01:28
質問番号:1318236
この質問に対する回答は締め切られました。
最新から表示回答順に表示良回答のみ表示

回答

 

回答者:umejas 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へ表示できるのではないでしょうか。
種類:アドバイス
どんな人:一般人
自信:参考意見
回答日時:05/04/12 15:38
回答番号:No.4
この回答へのお礼この回答にお礼をつける(質問者のみ)

回答

 

回答者:piyo2000 #2です。
ごめんなさい。
>Private sub setTextBox(oText As Object)

>Public sub setTextBox(oText As Object)

じゃないといけないですね。すみません。
種類:アドバイス
どんな人:経験者
自信:自信あり
回答日時:05/04/10 17:25
回答番号:No.3
この回答へのお礼この回答にお礼をつける(質問者のみ)

回答

良回答10pt

回答者:piyo2000 #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を使うという手もあります。
種類:アドバイス
どんな人:経験者
自信:自信あり
回答日時:05/04/10 17:21
回答番号:No.2
この回答へのお礼この回答にお礼をつける(質問者のみ)

回答

良回答20pt

回答者:umejas ActiveX EXEを起動する際に、VB側のTextBoxのObjectを渡しておいて、タイマルーチン内でそのTextBox Objectを使って文字を表示させればいいのではないでしょうか。

明後日のことを言ってたらごめんなさい。
種類:アドバイス
どんな人:一般人
自信:参考意見
回答日時:05/04/08 16:22
回答番号:No.1
この回答への補足ご回答ありがとうございます!!
多分umejas様のおっしゃる通り、VB側のテキストボックスを
渡せばよいのだと思うのですが、具体的なプログラムがどうも分からなくて。。。
すみませんが、教えていただけませんでしょうか?
この回答へのお礼この回答にお礼をつける(質問者のみ)
最新から表示回答順に表示良回答のみ表示