いつもお世話になってます。

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

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


よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (4件)

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



明後日のことを言ってたらごめんなさい。

この回答への補足

ご回答ありがとうございます!!
多分umejas様のおっしゃる通り、VB側のテキストボックスを
渡せばよいのだと思うのですが、具体的なプログラムがどうも分からなくて。。。
すみませんが、教えていただけませんでしょうか?

補足日時:2005/04/08 23:53
    • good
    • 0

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へ表示できるのではないでしょうか。
    • good
    • 0

#2です。


ごめんなさい。
>Private sub setTextBox(oText As Object)

>Public sub setTextBox(oText As Object)

じゃないといけないですね。すみません。
    • good
    • 0

#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を使うという手もあります。
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

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

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

Qwindows8でのActiveXのインストール方

オンラインゲームに必要なActiveXのインストールをwindows8のデスクトップのIE10より試みました。
ActiveXの情報バーをクリックし、実行しましたが変化がありませんでした。
そこで、
ActiveXを有効にする、スクリプトを有効にする、Cookieを有効にする、ポップアプブロックの解除
、セキュリテーィのレベルを中にする、Googleツールバーの削除、
これらの設定を行いましたが、情報バーが出てこない為ActiveXのインストールが出来ません。
パソコンに詳しくないので、ActiveXのインストール方法が分かりません。
他にも検索して試してみましたが、うまくいきません。

どなたか詳しい方法を教えて頂けると助かります。
よろしくお願い致します。

Aベストアンサー

>ActiveXの情報バーをクリックし、実行しました

この段階でインストールは完了しているため

>情報バーが出てこない為ActiveXのインストールが出来ません

すでにインストール済みのActiveXインストールのための情報バーが出てこないことは正常動作です


そのオンラインゲームはwindows8/IE10への対応は確認されましたか?

確認済みであれば
IEの起動方法はスタート画面から起動しているようであれば、ディスクトップ画面からの起動で試してみてください

それでも表示されない場合は互換表示で試してみてください
http://support.microsoft.com/kb/2772016/ja


それでもダメならActiveXを一旦アンインストールして再度、ディスクトップ起動/互換表示状態でインストールしなおし

Q別スレッドからのフォームのテキストボックス参照(VB)

はじめまして、ひろです。
VisualBasicの初心者です。
メインスレッドから"BackgroundWorker"で、
別スレッドを作成し、別スレッドから
スタートアップフォームにあるテキストボックスを参照すると、
TextBox1.text="1" (メインスレッドからの参照の場合)
TextBox1.text=""(別スレッドからの参照の場合)
となり、別スレッドからですと"1"が参照ができません。
"1"を参照したい場合、もしくは書き換えたい場合
どのようにすればいいか、
わかる方がいましたら、教えてください。
よろしくお願いします。

環境:VisualBasic.NET 2008

Aベストアンサー

Delegateを使ってワーカーとメインの橋渡しをしましょう

フォームクラスに
Delegate Sub myGetText( ByRef sb as System.Text.StringBuilder)
Delegate Sub mySetText( ByVal ss as String)
を定義しておきます

バックグランドワーカーからTextBox1へのアクセスするために以下の2つを定義します

Public Sub GetText( byRef sb as System.Text.StringBuilder)
  if TextBox1.InvokeRequired then
    ' バックグランドワーカーから呼ばれた場合
    dim d as new myGetText(AddressOf GetText)
    invoke( d, new Object(){ sb } )
  else
    ' メインスレッドから呼ばれた場合
    sb.Append( TextBox1.Text )
  end if
End Sub

Public sub SetText( byVal ss as string )
  if TextBox1.InvokeRequired then
    ' バックグランドワーカーから呼ばれた場合
    dim d as new mySetText(AddressOf SetText)
    invoke( d, new Object(){ ss } )
  else
    ' メインスレッドから呼ばれた場合
    TextBox1.Text = ss
  end if
End If
といった具合です

呼び出し側のワーカースレッドでは
Dim sb as New System.Text.StringBuilder()
dim n as integer = 0
while n < 1000
  GetText( sb )
  n = sb.ToString
  n += 1
  SetText( n.ToString )
WEnd

Delegateを使ってワーカーとメインの橋渡しをしましょう

フォームクラスに
Delegate Sub myGetText( ByRef sb as System.Text.StringBuilder)
Delegate Sub mySetText( ByVal ss as String)
を定義しておきます

バックグランドワーカーからTextBox1へのアクセスするために以下の2つを定義します

Public Sub GetText( byRef sb as System.Text.StringBuilder)
  if TextBox1.InvokeRequired then
    ' バックグランドワーカーから呼ばれた場合
    dim d as new myGetText(AddressOf Get...続きを読む

QどうしてもActiveXがインストールできません。

最近ルーセントハートをやろうと思ってDL、インストールしたのはいいのですが、ゲームを始めようとすると「ActiveXがインストールされてません」とでます。
いろいろ調べてインターネットオプションでの設定やいろんなサイトへ行ってインストール方法を調べたりしても出来ません。
いろいろ試したのですが情報バーが出ません。
http://www.photosmile.co.jp/pu/activex.html
↑ここでインストールしようとしてもいつまでたっても未完了状態です。
父親が言うにはActiveXはインストールしたと言ってます。
しかし、いくらやっても「ActiveXがインストールされてません」と出ます。
どうしたら良いでしょう分かる方どうか教えてください。
ちなみに使ってるのはwindowsXPです。

Aベストアンサー

ActiveXコントロールのダウンロードが失敗した場合
http://www.03trade.com/support/info/activex_download.html

家族と共用で権限のないアカウントでログオンしてないですよね?

QVB2008 コンボボックスとテキストボックスの連動について

VBを使って顧客の検索などに使用するプログラムを作りたいと思っています。

項目1-1,項目1-2,項目1-3,項目1-4,項目1-5
項目2-1,項目2-2,項目2-3,項目2-4,項目2-5
項目3-1,項目3-2,項目3-3,項目3-4,項目3-5
上記のデータ名 TextFile1.txt

Dim fn As String = "C:\TextFile1.txt"
Dim dline() As String
Dim d() As String
Dim ad As ArrayList = New ArrayList()
Dim read As System.IO.StreamReader = My.Computer.FileSystem.OpenTextFileReader(fn, System.Text.Encoding.Default)
dline = Split(read.ReadToEnd, vbCrLf)

For i As Integer = LBound(dline) To UBound(dline)
d = Split(dline(i), ",")
ad.Add(d(0))
Next
ComboBox1.DataSource = ad
ComboBox1.text="顧客名"

以上が現在の状況です。
comboに項目1-1,2-1,3-1とセットされていますが、マウスのスクロールボタンを動かすと、項目1-1が最初に表示されず2-1が表示されます。通常にクリックして選択すると問題は無いのですが、出来ればマウスのスクロールボタンも使いたいと思いますが解決方法はあるのでしょうか。
もう1件お伺いしたいのですが、上記テキストファイルからデータを読込、項目1-2,1-3,1-4,1-5、項目2-2・・・、項目3-2・・・と、項目毎にコンボボックスと連動させて各テキストボックス1、2、3、4に表示させたいのですが、上手くいきません。長文で解りにくい点があるかと思いますが、よろしくお願い致します。

VBを使って顧客の検索などに使用するプログラムを作りたいと思っています。

項目1-1,項目1-2,項目1-3,項目1-4,項目1-5
項目2-1,項目2-2,項目2-3,項目2-4,項目2-5
項目3-1,項目3-2,項目3-3,項目3-4,項目3-5
上記のデータ名 TextFile1.txt

Dim fn As String = "C:\TextFile1.txt"
Dim dline() As String
Dim d() As String
Dim ad As ArrayList = New ArrayList()
Dim read As System.IO.StreamReader = My.Computer.FileSystem.OpenTextFileReader(fn, System.Text.Encoding.Default)
dline = Spl...続きを読む

Aベストアンサー

コンボボックスの中身が以下のようになっているのであれば、あとはNo2さんの提示してくれたやり方でできるのではないでしょうか?

ComboBox1
[0]:ササキ
[1]:スズキ
[2]:サトウ
[3]:ハヤシ

ComboBox2
[0]:北海道
[1]:福岡県
[2]:愛知県
[3]:北海道

ComboBox3
[0]:札幌市
[1]:福岡市
[2]:名古屋市
[3]:旭川市

このようになっていないのであれば・・・

0.変数を定義(必要になったらそのつど定義でも問題ないです)
・1行読み込みsplitした結果を入れる配列→srcAry
・↑の結果の[0]の内容を入れるList→nameList
・↑の結果の[1]の内容を入れるList→adr1List
・↑の結果の[2]の内容を入れるList→adr2List
1.テキストファイルから1行読み込む
2.読み込んだ内容をカンマでsplitし、srcAryに格納
3.各リストに追加していく。nameList.add(srcAry(0))、adr1List.add(srcAry(1))、adr2List.add(srcAry(2))
4.1~3をテキストファイルの行数くりかえす。
5.ComboBox1にnameList、ComboBox2にadr1List、ComboBox2にadr2Listを設定する。

各コンボボックスが変更された場合の動作についてはNo2さんのソースを参考にしてください。

コンボボックスの中身が以下のようになっているのであれば、あとはNo2さんの提示してくれたやり方でできるのではないでしょうか?

ComboBox1
[0]:ササキ
[1]:スズキ
[2]:サトウ
[3]:ハヤシ

ComboBox2
[0]:北海道
[1]:福岡県
[2]:愛知県
[3]:北海道

ComboBox3
[0]:札幌市
[1]:福岡市
[2]:名古屋市
[3]:旭川市

このようになっていないのであれば・・・

0.変数を定義(必要になったらそのつど定義でも問題ないです)
・1行読み込みsplitした結果を入れる配列→srcAry
・↑の結果の[0]の内容...続きを読む

QActiveXがインストール出来ない

ActiveXがインストール出来ない

WinXPにIE8を使用しています。
ActiveXが必要なサイト移動したいのですが、インストール出来ていないので見ることが出来ません。

IE8のシステムの、(1)ActiveXコントロールとプラグインの実行を「有効」、(2)スクリプトを実行しても安全だとマークされているActiveXコントロールの~を「有効」、(3)署名済みActiveXコントロールのダウンロードを「ダイアログを表示する」に設定しています。
(あるサイトでActiveXをインストールする際の推奨設置となっていた為)

ところが、(2)を有効にすることで、コンピューターが危険にさらされている。。。と情報バーに表示される様になりました。
上記設定にしても、相変わらずActiveXが必要なサイトに移動しても、情報バーにはActiveXのインストールを許可するかどうかのメッセージは出ません。

IE8には似たようなトラブルが続発しているようですが、色々探しましたが未だ解決出来ません。
もうIE7に戻したいのですが、その辺も含めて解決策をご指示頂けませんでしょうか。

宜しくお願い致します。

ActiveXがインストール出来ない

WinXPにIE8を使用しています。
ActiveXが必要なサイト移動したいのですが、インストール出来ていないので見ることが出来ません。

IE8のシステムの、(1)ActiveXコントロールとプラグインの実行を「有効」、(2)スクリプトを実行しても安全だとマークされているActiveXコントロールの~を「有効」、(3)署名済みActiveXコントロールのダウンロードを「ダイアログを表示する」に設定しています。
(あるサイトでActiveXをインストールする際の推奨設置となっていた為)

ところが、(2...続きを読む

Aベストアンサー

ぶっちゃけて言えばIEの問題であってdkazさんのPCの問題じゃないんです。
IE8で「Web標準にまともに対応」するようになったんですが、それ以前に作られたサイトだと「IE流Web標準」に依存した形である為に「異常」になる場合があります。
「IE8にトラブルがある」のではなく「今までのIEがトラブルを作り出していた」だけの話なんです。

相手方が直してくれるのを待つしかないんですけど、IE7に戻すのはお奨めしません。
Internet Explorer 7は今年でサポート期限になるから。
http://support.microsoft.com/gp/lifesupsps/ja#Internet_Explorer

QVB6 テキストボックスの数値をコンボボックスに反映させるには?

TextBoxのChangeイベントを使って、
テキストボックスの数値をコンボボックスに反映させる
(具体的には数値をコンボボックスのindex数にし、それぞれのindexに
アニメ+str(i)としたいです。
しかし、後で書くソースは何故か、コンボボックスが
アニメ1
アニメ0
アニメ1
アニメ2
アニメ3

となってしまいます。
これを
アニメ0
アニメ1
アニメ2
アニメ3

としたいです。どうすればいいんでしょうか?

Private Sub Text8_Change()
Static p As Integer

If Text8.Text = "" Then Exit Sub

For i = 0 To p
If p = 0 Then GoTo b
If Form6.Combo1.NewIndex = -1 Then GoTo b
Form6.Combo1.RemoveItem (i)
Next i
b:
For i = 0 To Val(Text8.Text)
Form6.Combo1.AddItem "アニメ" + str(i)
Next i
p = Val(Text8.Text)
End Sub

TextBoxのChangeイベントを使って、
テキストボックスの数値をコンボボックスに反映させる
(具体的には数値をコンボボックスのindex数にし、それぞれのindexに
アニメ+str(i)としたいです。
しかし、後で書くソースは何故か、コンボボックスが
アニメ1
アニメ0
アニメ1
アニメ2
アニメ3

となってしまいます。
これを
アニメ0
アニメ1
アニメ2
アニメ3

としたいです。どうすればいいんでしょうか?

Private Sub Text8_Change()
Static p As Integer

If Text8.Text = "" Then Exit Su...続きを読む

Aベストアンサー

RemoveItem (i)
は、どこまで削除したいですか?
全件削除してよいなら、
Form6.Combo1.ListCountで件数拾えるので、
Forループを件数まわしますか。

Private Sub Text8_Change()
 Static p As Integer
 Dim nCount as Ineteger

 MsgBox "処理を開始する時点で、pの値は" & p & "だよ”

 'でも、なぜここでIF文? 処理がここで終わりますね
 If Text8.Text = "" Then Exit Sub

 MsgBox "処理を進めるよ”

 MsgBox "削除前の時点でコンボの件数は”& Form6.Combo1.ListCount & "だよ"

 If p <> 0 Then
  nCount=Form6.Combo1.ListCount
  For i = nCount To 0 step -1
   If Form6.Combo1.NewIndex <> -1 Then
    Form6.Combo1.RemoveItem (i)
   END IF
  Next i
 END IF

 MsgBox "削除後の時点でコンボの件数は”& Form6.Combo1.ListCount & "だよ"


 p = Val(Text8.Text)
 For i = 0 To p
  Form6.Combo1.AddItem "アニメ" + str(i)
 Next i

 MsgBox "追加後の時点でコンボの件数は”& Form6.Combo1.ListCount & "だよ"

End Sub

RemoveItem (i)
は、どこまで削除したいですか?
全件削除してよいなら、
Form6.Combo1.ListCountで件数拾えるので、
Forループを件数まわしますか。

Private Sub Text8_Change()
 Static p As Integer
 Dim nCount as Ineteger

 MsgBox "処理を開始する時点で、pの値は" & p & "だよ”

 'でも、なぜここでIF文? 処理がここで終わりますね
 If Text8.Text = "" Then Exit Sub

 MsgBox "処理を進めるよ”

 MsgBox "削除前の時点でコンボの件数は”& Form6.Combo1.ListCount & "だよ...続きを読む

QActiveXがインストールされていません

O2JAMというインターネットゲームをプレイしようとしたところ、
『ActiveXがインストールされていません』
と表示されました。


ActiveXをインストールしたいのですが、何処で入手出来るのでしょうか?
ご存知の方、お教え頂けると助かります。

Aベストアンサー

実のところ…98/Me環境下で同様にウェブ経由でのActiveX導入が出来ない、という事例が幾つか出ています。
http://okwave.jp/kotaeru.php3?q=2111513
http://okwave.jp/kotaeru.php3?q=2125309
http://www.mcafee.com/japan/pqa/aMcAfeeMvs.asp?ancQno=MV06041401&ancProd=McAfeeMvs

どうやら最新のセキュリティ更新MS06-013の影響によるものと推測されます。
(なおこれはXP/2003環境下におけるActiveXの動作変更とは別の問題になります)

例えばFlash playerのように、インストール用の実行ファイルによってインストール可能なものについては、それをダウンロードしてお使いのパソコン上で実行することでインストール可能になるみたいですが…ウェブページ上で『セキュリティ警告』の画面上で『はい』を選択してインストールする形しか取れないものについては、残念ながら現状では症状を克服する有効策が見つかっていません。

可能性としては…
http://okwave.jp/kotaeru.php3?q=2125309
で私が説明していることを実行してみると改善の可能性があるのでは?という気が少しばかりしています。(私自身は現在2000ユーザーですので実地に検証できませんが)

対策に行き詰まったら、MDAC2.7以上、それにWindowsScript5.6をインストール後WindowsUpdateを受けて、再度所定のサイトでActiveXのインストールが行えるかどうか試してみてください。
それが不発なら…システム全体をリカバリ後、MS06-013適用以前にウェブ経由でしか行えないActiveXの導入を全て済ませてしまう以外の改善策は、当方には考え付きません。

実のところ…98/Me環境下で同様にウェブ経由でのActiveX導入が出来ない、という事例が幾つか出ています。
http://okwave.jp/kotaeru.php3?q=2111513
http://okwave.jp/kotaeru.php3?q=2125309
http://www.mcafee.com/japan/pqa/aMcAfeeMvs.asp?ancQno=MV06041401&ancProd=McAfeeMvs

どうやら最新のセキュリティ更新MS06-013の影響によるものと推測されます。
(なおこれはXP/2003環境下におけるActiveXの動作変更とは別の問題になります)

例えばFlash playerのように、インストール用の実行ファイルによ...続きを読む

Qエクセル VBA ユーザーフォーム リストボックスで選択した値をテキストボックスに自動表示

エクセル初心者です。
ユーザーフォームで検索窓を作成しリストボックスへ表示
         ↓
リストから選択すると同じユーザーフォーム内のテキストボックスに値が自動で表示
         
というフォームを作りたいのですがご教授お願いします。

A列   B列  C列   D列   E列
番号 / 品名 / 品番 / 原価 / メーカー
1    A   20×20  100  A社
2    A   20×30  150  A社
3    B   50×50  100  B社


下図のようなフォーマットで考えています。

Aベストアンサー

回答が付かないようなので、とりあえず・・・です。
シートの内容(A2:E4)をリストに表示し、そこで選択された行の内容をラベル?(A列・・・E列と表示されているところ)に表示するVBAを書いてみました。参考になりますかね?
もしかしたら、検索結果のみをリストに表示したいのでしょうか?
正直なところ、やりたいことがよくわからないので、適切な回答になっていないと思います。必要出れば追加で質問することをお勧めします。

以下、サンプルです。コードはユーザフォームの下に張り付けて下さい。
リストボックス名「ListBox1」
ラベル名「LabelA,LabelB,LabelC,LabelE」

Private Sub ListBox1_Click()
LabelA.Caption = ListBox1.List(ListBox1.ListIndex, 0)
LabelB.Caption = ListBox1.List(ListBox1.ListIndex, 1)
LabelC.Caption = ListBox1.List(ListBox1.ListIndex, 2)
LabelE.Caption = ListBox1.List(ListBox1.ListIndex, 4)
End Sub

Private Sub UserForm_Initialize()
ListBox1.ColumnCount = 5
ListBox1.RowSource = "Sheet1!A2:E4"
ListBox1.ListIndex = 0
End Sub

回答が付かないようなので、とりあえず・・・です。
シートの内容(A2:E4)をリストに表示し、そこで選択された行の内容をラベル?(A列・・・E列と表示されているところ)に表示するVBAを書いてみました。参考になりますかね?
もしかしたら、検索結果のみをリストに表示したいのでしょうか?
正直なところ、やりたいことがよくわからないので、適切な回答になっていないと思います。必要出れば追加で質問することをお勧めします。

以下、サンプルです。コードはユーザフォームの下に張り付けて下さい。
リストボックス...続きを読む

QActiveXコントロールのインストールの仕方

ハンゲームのチャットをするため、ActiveXコントロールをインストールしようと思います。前まで(PCを初期化する前)は普通にチャットできてたんですが、強制的にActiveXをインストールするページに移動させられます。
インストールしようとしても情報バーがないのでインストールできません。
この問題を解決できる方、回答お願いします。

Aベストアンサー

>PCを初期化する前)は普通にチャットできてたんですが

これが気になりますが、WEB設定のリセットで解決しませんか?
http://support.microsoft.com/kb/880830/ja

QVB6(SP5)とVB.NET のテキストボックス等の配列について

VB6(SP5)で、プログラミングをしております。
現在、VB.NETを勉強中です。
1つ疑問が出てきました。Text1等のインデックス
プロパティが無い様なのですが、配列のテキストボッ
クスやラベルは無いのでしょうか?
宜しくお願い致します。

Aベストアンサー

コントロール配列は、.NET Frameworkではサポートされません。

ただし、ないわけではないです。コントロール配列を使ったVB6製アプリをコンバートすると特殊なコンポーネントで置き換えられますので。
ただし、これからのことを考えるといまさら使わないのが賢明です。


人気Q&Aランキング