Timerを使用しての強制待機を教えてください。

例えば、VBでのプログラム上でTimerを用いて 強制的に10秒待機させるには どうすればいいですか?

ただし、イベントを介しての時間待機ではなくて 単純にプログラムを待機させる方法を教えてください。
 

皆様宜しくお願いします。

A 回答 (1件)

こんにちは、honiyonです。



 VBには、DELAYか、SLEEP っていうプロシージャがありませんか?
 DELAY(10000) とか SLEEP(10000)とかすると10sec処理を中断出来たと思いますが...

 Timerを使うのであれば、以下のようにします。

 1.変数 flgを用意する。
 2.flg = 0 とする。
 3.flg = 0 の間、DO と UNTILでグルグルループさせる。(勿論whileてもOK)
  *DOとLOOPの間には DoEvents命令を必ず入れてください。
 4.Timerを使って、10secたったら flg = 1 にする。
 5. 3の条件が崩れ、処理が再開される。

 参考になれば幸いです(..
    • good
    • 0
この回答へのお礼

的確な回答、どうもありがとうございました。
おかげさまで 出来ましたデス。
ありがとうございました。

お礼日時:2001/12/03 23:53

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

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

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

Q[Visual Basic 6.0]timerを使ったプログラムで質問です。

Visual Basic 6.0 で
Private Sub Timer1_Timer()
Randomize
a = Int(Rnd * 7000)
b = Int(Rnd * 7000)
d = 200 + Int(Rnd * (500 - 200 + 1))
e = 1 + Int(Rnd * 15)
FillColor = QBColor(e);FillStyle = 0
Picture1.Circle (a, b), d, QBColor(e), -0.00001, -3.14152
Picture1.Circle (a, b + 80), d * 1.6, QBColor(e), , , 0.3
Picture1.Circle (a + d, b + d * 0.7), d / 4, QBColor(e)
Picture1.Circle (a - d, b + d * 0.7), d / 4, QBColor(e)
の図形をtimerを使って永遠にでたり消えたりを五秒間隔で消えたり出てきたりするプログラムを作りたいのですがうまくいきません。あと図形の塗りつぶしをFillColor = QBColor(e);FillStyle = 0と指定しているのですが塗りつぶしになりません。わかる方お願いします。m(_ _)m

Visual Basic 6.0 で
Private Sub Timer1_Timer()
Randomize
a = Int(Rnd * 7000)
b = Int(Rnd * 7000)
d = 200 + Int(Rnd * (500 - 200 + 1))
e = 1 + Int(Rnd * 15)
FillColor = QBColor(e);FillStyle = 0
Picture1.Circle (a, b), d, QBColor(e), -0.00001, -3.14152
Picture1.Circle (a, b + 80), d * 1.6, QBColor(e), , , 0.3
Picture1.Circle (a + d, b + d * 0.7), d / 4, QBColor(e)
Picture1.Circle (a - d, b + d * 0.7), d / 4, QBColor(e)
の図形をtimerを使って永遠にでたり消えたりを...続きを読む

Aベストアンサー

単に
FillColor = QBColor(e):FillStyle = 0
と記述すると フォームに対しての設定になります

ピクチャーボックスに対して指示なら
Picture1.FillColor = QBColor(e):Picture1.FillStyle = 0
とオブジェクトを明示しましょう
# マルチステートメントの区切りは『;』ではなく『:』です

出たり消えたりさせたいのであれば
前回描画した範囲を覚えておき UFOを描画する前に LINEメソッドで消去してから UFOを描画しましょう

private TYPE RECT
x as integer
y as integer
w as integer
h as integer
End if

タイマーイベントの先頭に
static rc as RECT
と記述します

UFO描画前の行に
if rc.w<>0 and rc.h<>0 then
Picture1.Line(rc.x, rc.y)-step(rc.w,rc.h), picture1.backcolor,BF
' ピクチャーボックスの内容をすべて消してもいいのであれば
' Picture1.cls
' でもいいですよ
end if

タイマーイベントの End Subの手前に
rc.x = a - d * 2
rc.y = b - d * 2
rc.w = d * 4
rc.h = d * 4
を追加します
# 次回描画前に消去する範囲を記憶

といった具合でしょう

単に
FillColor = QBColor(e):FillStyle = 0
と記述すると フォームに対しての設定になります

ピクチャーボックスに対して指示なら
Picture1.FillColor = QBColor(e):Picture1.FillStyle = 0
とオブジェクトを明示しましょう
# マルチステートメントの区切りは『;』ではなく『:』です

出たり消えたりさせたいのであれば
前回描画した範囲を覚えておき UFOを描画する前に LINEメソッドで消去してから UFOを描画しましょう

private TYPE RECT
x as integer
y as integer
w as integer
h as inte...続きを読む

QVB 6.0でtimerをとselect caseを使ったプログラムで質問です。

また質問です。
VBであらかじめ書いてあった三つの円を信号機のように青は2.5秒、黄色は0.5秒、赤は3秒で青→黄→赤→青 …と三十秒間動かしたいのですが、caseの後ろには何をいれればいいかわからず
Private Sub Timer1_Timer()
Timer.Tag = Timer1.Tag + 0.5
progressbar1.Value = progressbar1.Value + 0.5
Select Case Timer1.Tag
Case
Shape5.FillColor = vbGreen
Shape5.FillStyle = 0
Case
Shape6.FillColor = vbYellow
Shape6.FillStyle = 0
Case
Shape7.FillColor = vbRed
Shape7.FillStyle = 0
end select
End Sub
としたのですがまったく動きません。タイマーを設定したのに時間の表示もでません。あと、progressbarというのもでてこないんです。
どうかお詳しい方お願いします。 m(_ _)m

また質問です。
VBであらかじめ書いてあった三つの円を信号機のように青は2.5秒、黄色は0.5秒、赤は3秒で青→黄→赤→青 …と三十秒間動かしたいのですが、caseの後ろには何をいれればいいかわからず
Private Sub Timer1_Timer()
Timer.Tag = Timer1.Tag + 0.5
progressbar1.Value = progressbar1.Value + 0.5
Select Case Timer1.Tag
Case
Shape5.FillColor = vbGreen
Shape5.FillStyle = 0
Case
Shape6.FillColor = vbYellow
Shape6.Fi...続きを読む

Aベストアンサー

下記を確認してください。

・Timer1のintervalは指定してますか?
・progressbar1のMaxは指定してますか?
・Timer1.Tagは文字列ですので「Timer1.Tag = Timer1.Tag + 0.5」のような指定はできません。「Timer1.Tag = CStr(Val(Timer1.Tag) + 0.5)」のように数値と文字列を使い分けてください。
・Caseに対する値がないため、Caseでの判断ができません。Tagに入っている値を入れる必要があるかと思います。
・色を塗る指定はありますが、消す指定がないので、このプログラムでは信号機のように消えることがありません。

以下は質問文の書き方を利用して私が作成するなら。。。ということで書いておきます。別な書き方もありますが、ひとまず下記だけでも動くかと思います。
【設定値】
「Timer1.Interval=500」
「progressbar1.Max = 60」
「Shape5.FillColor = &H0000FF00&」
「Shape6.FillColor = &H0000FFFF&」
「Shape7.FillColor = &H000000FF&」

【ソース】
Private Sub Timer1_Timer()
Timer1.Tag = CStr(Val(Timer1.Tag) + 1)
ProgressBar1.Value = ProgressBar1.Value + 1

Select Case Timer1.Tag
Case "1"
Shape5.FillStyle = 0
Case "5"
Shape5.FillStyle = 1
Shape6.FillStyle = 0
Case "6"
Shape6.FillStyle = 1
Shape7.FillStyle = 0
Case "12"
Shape7.FillStyle = 1
Shape5.FillStyle = 0
Timer1.Tag = "0"
End Select

If ProgressBar1.Value >= 60 Then
Shape5.FillStyle = 1
Timer1.Enabled = False
End If
End Sub

下記を確認してください。

・Timer1のintervalは指定してますか?
・progressbar1のMaxは指定してますか?
・Timer1.Tagは文字列ですので「Timer1.Tag = Timer1.Tag + 0.5」のような指定はできません。「Timer1.Tag = CStr(Val(Timer1.Tag) + 0.5)」のように数値と文字列を使い分けてください。
・Caseに対する値がないため、Caseでの判断ができません。Tagに入っている値を入れる必要があるかと思います。
・色を塗る指定はありますが、消す指定がないので、このプログラムでは信号機のように消えることが...続きを読む

QSystem.Timers.Timer について

下記のようなコードで動いていますが、
TestFunc に独自の引数を渡したいと考えています。
どうすれば実現できるでしょうか?
引数以外(メンバ変数等)では対応できていますので、
引数の方法だけ教えてほしいです。

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

timer = New System.Timers.Timer()
AddHandler timer.Elapsed, New ElapsedEventHandler(AddressOf TestFunc)

timer.Interval = 1000
timer.Start()

End Sub

Public Sub TestFunc(ByVal sender As Object, ByVal e As ElapsedEventArgs)
Console.WriteLine(DateTime.Now)
End Sub

下記のようなコードで動いていますが、
TestFunc に独自の引数を渡したいと考えています。
どうすれば実現できるでしょうか?
引数以外(メンバ変数等)では対応できていますので、
引数の方法だけ教えてほしいです。

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

timer = New System.Timers.Timer()
AddHandler timer.Elapsed, New ElapsedEventHandler(AddressOf TestFunc)

timer.Interval = 1000
timer.Sta...続きを読む

Aベストアンサー

デリゲートは型が決まっているので,引数の数や型を変更することは出来ません。

QVB 6.0でtimerをとselect caseを使ったプログラムの続きで質問です。

http://oshiete1.goo.ne.jp/qa3135998.html
↑前の質問

質問ばかりですいません

今度は信号機の表示にあわせてイメージを動かしたいのですが、
Private Sub Timer2_Timer()
Timer2.Tag = CStr(Val(Timer2.Tag) + 1)
x = -500
y = 300
Select Case Timer2.Tag
Case "6" To "11" ←の間は初期位置にイメージを戻したい
Image1.Left = 7560
Image1.Top = 3000
Case Else
Image1.Left = Image1.Left + x
Image1.Top = Image1.Top + y
Timer2.Tag = "0"
End Select
と入力してもまったく初期位置に戻らなく、移動を続けてしまいます
。何度もしつこくてすいませんが、誰か詳しい方お願いします

Aベストアンサー

Timer2.Tagがどのような値になるか考えて見ましょう

デザイン時に Tagに何も設定されてないのであれば
最初の実行文で "0"が代入されます
となると Case "6" to "11" の条件に合いませんので
Case Else節が実行されます
このElse節の最後で "0"を代入してしまっているので
次回にも "1"なので"6"と"11"の条件に合わないためElse節しか実行されません

よって修正するには
Case "6" to "11"節の最後で
Timer2.Tag="0"
を実行

Else節の Timer2.Tag="0" は削除またはコメントアウトしましょう

Qプログラムの待機

vb入門者ですが、よろしくお願いします。
2005を使用しているのですが、

プログラムをある条件がそろうまで、待機させる
ことはできるのでしょうか?

よろしくお願いします。

Aベストアンサー

#1です。

ある意味VisualBasicのプログラムは、常に待機状態であり、
ボタンを押すなどの操作が無い限り、動かないように作るのが基本的な作りだと思います。

いつ条件がそろうのか分からないために常に監視していなければならないのでしたら、
そもそも待機することが不可能なのですが・・・

具体的には、何をしたいのでしょうか?
それが分かれば別のアプローチがあるかも知れません。


このカテゴリの人気Q&Aランキング

おすすめ情報