- ベストアンサー
タイマーの使い方
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サイトなども調べてみたのですが、解決できませんでした。 どなたか教えていただけませんでしょうか?
- みんなの回答 (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の特性です。
その他の回答 (5)
- ginyou
- ベストアンサー率32% (138/431)
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
お礼
お返事ありがとうございました。 (#4の方も含めて一緒にお礼させて頂きます) #3の方のお返事にも書かせて頂いたのですが、 私の説明不足で、経過時間の表示というか、 処理が開始されてから何秒経過したか、ということを 1秒ずつ時計のように表示させたいと思っていました。 今、手元にVBの環境がないので、教えていただいたコードは まだ試していないのですが、もしかしたらDoEventsの瞬間の経過時間が表示されるコードじゃないかな・・・と思いました。 他のサイトなども調べていると、ボタンを押したら経過時間の表示が開始されて、もう1度押すと止まる、というようなソースは結構解説?されているのですが、 ボタンを押したら始まる処理の経過時間を刻々と刻みたいんです・・・ やっぱり無理なんでしょうか・・・ ありがとうございました!
- ginyou
- ベストアンサー率32% (138/431)
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にする必要が有ります。 また、何か処理したい事は、別のプロシジャーで行って下さい。
- todo36
- ベストアンサー率58% (728/1234)
Private Sub Command1_Click() Me.Enabled = False Timer.Interval = 1000 処理1 DoEvents 処理2 DoEvents ・ ・ ・ Timer.Interval = 0 Me.Enabled = True End Sub
お礼
お礼が遅れて申し訳ありません! 少し説明不足でしたが、処理を開始したら1秒ずつ刻々と経過時間を刻む表示をさせたいと思っていました。 DoEventsを使うと、その瞬間の経過時間は表示されるのですが、やはり時計のように1秒、2秒・・・と継続しては表示されなくて・・・ あれからも自分でも色々調べてみたりしているのでが、 こういう処理自体が難しいというか、コード的におかしいのかな・・・と少し思い始めています・・・(--; お返事ありがとうございました。
- ducati
- ベストアンサー率29% (308/1062)
参考になりそうなHPがありましたので、 参考にしてみてはいかがでしょうか? すでに、ご覧になっていたら申し訳ありません・・・
お礼
拝見してみたのですが、ちょっと言葉が難しくて、さらっと読んだだけではよく分かりませんでした(^^; またじっくり読んで勉強してみます。 教えて頂いてありがとうございました。
- taknt
- ベストアンサー率19% (1556/7783)
タイマーイベントは、一つのイベントが終わってから 発生するものです。 だから 一つのイベント内で >Timer1.Interval = 0 なんて してしまうと 発生する わけがありません。 Private Sub Timer1_Timer() Label1.Caption = [経過時間] Timer1.Interval = 0 End Sub せめて 上記のように 記述すればいいかもしれません。 これで 発生しなかったら、他の条件とか設定しないと ダメなんでしょう。
お礼
こんなに早くお返事いただけて、ありがとうございました。 -------------------------- タイマーイベントは、一つのイベントが終わってから 発生するものです。 だから 一つのイベント内で >Timer1.Interval = 0 なんて してしまうと 発生する わけがありません。 -------------------------- なるほど・・・そうだったのですね・・・(^^; そうすると、1つのイベント内の経過時間を表示するには 違う方法を考えないといけないですよね・・・ -------------------------- Private Sub Timer1_Timer() Label1.Caption = [経過時間] Timer1.Interval = 0 End Sub -------------------------- 例えばこう記述すると、またどこかで Timer1.Interval=1000 としなければ、タイマーは動かない?のですよね・・・ でも仕組み?が分かったので何とか考えてみます! ありがとうございました。
お礼
何度もお返事頂いて本当にありがとうございます。 別プログラムになるのですね・・・ 実はDoEventsも、割り込み?をさせるんだな・・・というぐらいで、あまり意味が分かっていなくて。 やっぱり今の私には少し難しい部分なのかなと思いました(^^; こんな風にOSの特性によってプログラムを変えなきゃいけないとかも全然意識していませんでしたし、そういう知識からしてないですし・・・ (もっと勉強しないといけないな~と思います) 教えて頂いた方法をぜひ試してみたいと思います! 本当にありがとうございました!