便利時計 VB6 |
タイマーコントロールを使って、時計を作る。通常の時刻表示はもちろん、目覚まし機能、計測機能などいろいろと便利に使えるものを作っていく。
基本的には、タイマーコントロールと関数Date、関数Timeと関数Timerを使う。
デジタル時計
新規フォームを用意し、プロパティを次のように設定する。
Caption … 便利時計、 MaxButton … False、 MinButton … False
ラベル(lblDate)
(オブジェクト名) … lblDate、 Left … 120、 Top … 120
Caption … 0000/00/00(xx)、 AutoSize … True、 Font … フォント=MS
ゴシック
ラベル(lblTime)
(オブジェクト名) … lblTime、 Left … 120、 Top … 360
Caption … 00:00:00、 AutoSize … True
Font … フォント=MS ゴシック, スタイル=太字, サイズ=18
タイマー(Timer1)
(オブジェクト名) … Timer1、 Left … 3840、 Top … 120、 Interval
… 1000
実行時には表示されないので、Left,Topプロパティは適当でよい。
Intervalプロパティはタイマーが動作する(Timerイベントが呼び出される)時間間隔であり、ミリ秒単位で設定する。
・プログラムリスト
Option Explicit '宣言を強制する Private Sub Form_Load() lblDate.Caption = Format(Date, "yyyy/mm/dd(aaa)") '日付表示 lblTime.Caption = Format(Time, "hh:mm:ss") '時刻表示 End Sub Private Sub Timer1_Timer() lblDate.Caption = Format(Date, "yyyy/mm/dd(aaa)") '日付表示 lblTime.Caption = Format(Time, "hh:mm:ss") '時刻表示 End Sub
関数Formatは、値を指定した書式に変換するものである。書式の詳細についてはヘルプ(Format 関数、関連項目→日付/時刻表示書式指定文字 (Format 関数))を参照すること。
実行時に呼び出されるForm_Loadプロシージャで日付と時間をラベルに表示する。Timerプロシージャは1秒間隔で呼び出されるので、再度、日付と時間をラベルに表示する。日付は午前0時に書き換えればよく、1秒ごとに書き換える必要はないが、判定文を入れるより処理的には短くなるのでこのままとする。
Form_Loadプロシージャを無しにしても良いが、実行後、1秒間は0000/00/00(xx)と00:00:00が表示されたままとなるので、必要である。
目覚まし機能
設定した時刻にアラームが鳴るようにする。音楽のデータファイルを鳴らしたり、MIDIで音を鳴らすこともできるが、API関数が必要になるので、ここではBeep命令を使うことにする。Beep命令で鳴るBeep音はコンピュータやシステムによって異なる。私のコンピュータでは「ピッ」と短音が鳴るだけである。
処理は、入力した時間と分がコンピュータの時間と一致したとき、Beep音を鳴らすだけである。
WindowsのAPI(Application Programming Interface)関数は、Windows自身がもっている機能で、Windowsで動作するアプリケーションであれば共通して使うことができるものである。Windowsができることはすべてできるが、VisualBASICで使うには少し面倒である。
コントロールの追加
アラームを鳴らせる時間を入力するため、テキストボックスなどを次のように追加する。
テキスト(txtJikan)
(オブジェクト名) … txtJikan、 Height … 270 、Left … 2040、 Top
… 480、 Width … 375
Caption … アラーム、 AutoSize … True、 Text … (なし)
テキスト(txtFun)
(オブジェクト名) … txtFun、 Height … 270 、Left … 2760、 Top
… 480、 Width … 375
Caption … アラーム、 AutoSize … True、 Text … (なし)
ラベル(Label1)
(オブジェクト名) … Label1、 Left … 2040、 Top … 240
Caption … アラーム、 AutoSize … True
ラベル(Label2)
(オブジェクト名) … Label2、 Left … 2520、 Top … 600
Caption … 時、 AutoSize … True
ラベル(Label3)
(オブジェクト名) … Label3、 Left … 3240、 Top … 600
Caption … 分、 AutoSize … True
・プログラムリスト
Private Sub Timer1_Timer() Dim alarm As String lblDate.Caption = Format(Date, "yyyy/mm/dd(aaa)") '日付表示 lblTime.Caption = Format(Time, "hh:mm:ss") '時刻表示 'アラーム alarm = Right("0" & txtJikan.Text, 2) & Right("0" & txtFun.Text, 2) '時間+分 If Format(Time, "hhmm") = alarm Then Beep End If End Sub
アラーム処理の最初で入力した時間と分の文字列を連結して変数alarmに記憶させている。関数Rightを使って少しややこしそうであるが分解するとわかりやすい。
Right("0" & txtJikan.Text, 2) 例えば、時間(txtJikan)に7と入力したとき "0" & txtJikan.Text → "07"、 Right("07", 2) → "07" 例えば、時間(txtJikan)に12と入力したとき "0" & txtJikan.Text → "012"、 Right("012", 2) → "12"
このように、時間が1けたのときに0を付けても付けなくても、2けたの時間として処理できる。分の部分も同じである。例えば、7時30分と入力すると変数alarmには"0730"と記憶される。時間と分を4けたで表す。
時間を比較するIf文でも、コンピュータの時間を4けたで表すため関数Formatで書式を"hhmm"としている。hhの部分に時間が2けたで、mmの部分に分が2けたで変換される。
アラーム(Beep音)が1秒間隔(タイマーを1秒間隔に設定)で時間が一致している間アラームが鳴り続ける。
アラームを30秒だけ鳴らすには、秒も判定すればよい。If文を次のようにすると一致した時間の0〜29秒の間アラームが鳴る。
If Format(Time, "hhmm") = alarm And Val(Format(Time, "ss")) < 30 Then
アラームを途中で停止させるには、時間か分を変更・削除すればよい。停止用のボタンなどを用意することも考えられるが、その処理を考えなければならないので、ここではやめて課題ということにしておく。
Copyright © 2001 Hiroshi Masuda |