dポイントプレゼントキャンペーン実施中!

VB初心者です(6.0を使っています)

タイマーの使い方がよく分かっていません。

ボタンを押してからの経過時間をラベルに表示させたいと思っているのですが、

-----------------------------------------------
Private Sub Command1_Click()

  Timer1.Interval = 1000

  処理1
  処理2
   ・
   ・
   ・

  Timer1.Interval = 0

End Sub

Private Sub Timer1_Timer()

  Label1.Caption = [経過時間]

End Sub
-----------------------------------------------

という感じに書いていると、[処理1]~をしている間はラベルが表示されなくて、
最後の[処理]が終わった直後の[経過時間]のみが表示されます。
こういう形ではタイマーは使用できないのでしょうか?

他のWebサイトなども調べてみたのですが、解決できませんでした。
どなたか教えていただけませんでしょうか?

A 回答 (6件)

意味が解りました。


OSがWin2000、WinXP、WinNTで有れば、次の方法で可能です。
 タイマー表示部分を別プログラムとして作成し、ファイメ名を例えば、"Time_Hyoji.exe"とします
 そして、以下のようにします。
 この場合、Time_Hyoji.exeは常に一番手前に表示されるようにする必要が有ります。

Private Sub Command1_Click()

x = Shell("Time_Hyoji.exe", 1)

  処理1
  処理2

   ・
   ・
   ・

End Sub

 次にWin98系のOSの場合ですが、処理中に、頻繁にDoEventsを実行する必要があります。
 これは、OSの特性です。
    • good
    • 0
この回答へのお礼

何度もお返事頂いて本当にありがとうございます。

別プログラムになるのですね・・・
実はDoEventsも、割り込み?をさせるんだな・・・というぐらいで、あまり意味が分かっていなくて。
やっぱり今の私には少し難しい部分なのかなと思いました(^^;

こんな風にOSの特性によってプログラムを変えなきゃいけないとかも全然意識していませんでしたし、そういう知識からしてないですし・・・
(もっと勉強しないといけないな~と思います)

教えて頂いた方法をぜひ試してみたいと思います!
本当にありがとうございました!

お礼日時:2003/07/12 10:28

NO4の追加です。


こういう事をやりたいのでしょうか?

Private Sub Command1_Click()

HYOJI_start

DoEvents
  処理1
DoEvents
  処理2
DoEvents

   ・
   ・
   ・

HYOJI_end

End Sub


Private Sub HYOJI_start()
'表示開始
Timer1.Interval = 1000
Label1.Caption = Time

End Sub

Private Sub HYOJI_end()
'表示終了
Timer1.Interval = 0

End Sub

Private Sub Timer1_Timer()

Timer1.Interval = 0
Label1.Caption = Time
Timer1.Interval = 1000

End Sub
    • good
    • 0
この回答へのお礼

お返事ありがとうございました。
(#4の方も含めて一緒にお礼させて頂きます)

#3の方のお返事にも書かせて頂いたのですが、
私の説明不足で、経過時間の表示というか、
処理が開始されてから何秒経過したか、ということを
1秒ずつ時計のように表示させたいと思っていました。

今、手元にVBの環境がないので、教えていただいたコードは
まだ試していないのですが、もしかしたらDoEventsの瞬間の経過時間が表示されるコードじゃないかな・・・と思いました。

他のサイトなども調べていると、ボタンを押したら経過時間の表示が開始されて、もう1度押すと止まる、というようなソースは結構解説?されているのですが、
ボタンを押したら始まる処理の経過時間を刻々と刻みたいんです・・・
やっぱり無理なんでしょうか・・・

ありがとうございました!

お礼日時:2003/07/11 20:17

Private Sub Command1_Click()


'表示開始
Timer1.Interval = 1000
Label1.Caption = Time

End Sub

Private Sub Command2_Click()
'表示終了
Timer1.Interval = 0

End Sub

Private Sub Timer1_Timer()

Timer1.Interval = 0
Label1.Caption = Time
Timer1.Interval = 1000

End Sub

 これで、ご希望の処理が出来ます。
 なお、VBはタイマイベントにの処理中はタイマーOFFにする必要が有ります。
 また、何か処理したい事は、別のプロシジャーで行って下さい。
    • good
    • 0

Private Sub Command1_Click()


Me.Enabled = False
Timer.Interval = 1000
処理1
DoEvents
処理2
DoEvents



Timer.Interval = 0
Me.Enabled = True
End Sub
    • good
    • 0
この回答へのお礼

お礼が遅れて申し訳ありません!
少し説明不足でしたが、処理を開始したら1秒ずつ刻々と経過時間を刻む表示をさせたいと思っていました。
DoEventsを使うと、その瞬間の経過時間は表示されるのですが、やはり時計のように1秒、2秒・・・と継続しては表示されなくて・・・
あれからも自分でも色々調べてみたりしているのでが、
こういう処理自体が難しいというか、コード的におかしいのかな・・・と少し思い始めています・・・(--;

お返事ありがとうございました。

お礼日時:2003/07/11 20:12

参考になりそうなHPがありましたので、


参考にしてみてはいかがでしょうか?

すでに、ご覧になっていたら申し訳ありません・・・

参考URL:http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd …
    • good
    • 0
この回答へのお礼

拝見してみたのですが、ちょっと言葉が難しくて、さらっと読んだだけではよく分かりませんでした(^^;
またじっくり読んで勉強してみます。
教えて頂いてありがとうございました。

お礼日時:2003/07/10 14:23

タイマーイベントは、一つのイベントが終わってから


発生するものです。

だから 一つのイベント内で
>Timer1.Interval = 0
なんて してしまうと 発生する わけがありません。

Private Sub Timer1_Timer()

  Label1.Caption = [経過時間]

  Timer1.Interval = 0
End Sub

せめて 上記のように 記述すればいいかもしれません。

これで 発生しなかったら、他の条件とか設定しないと
ダメなんでしょう。
    • good
    • 0
この回答へのお礼

こんなに早くお返事いただけて、ありがとうございました。

--------------------------
タイマーイベントは、一つのイベントが終わってから
発生するものです。
だから 一つのイベント内で
>Timer1.Interval = 0
なんて してしまうと 発生する わけがありません。
--------------------------
なるほど・・・そうだったのですね・・・(^^;
そうすると、1つのイベント内の経過時間を表示するには
違う方法を考えないといけないですよね・・・

--------------------------
Private Sub Timer1_Timer()
  Label1.Caption = [経過時間]
  Timer1.Interval = 0
End Sub
--------------------------
例えばこう記述すると、またどこかで
Timer1.Interval=1000
としなければ、タイマーは動かない?のですよね・・・

でも仕組み?が分かったので何とか考えてみます!
ありがとうございました。

お礼日時:2003/07/10 14:22

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