便利時計 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 

 

 

inserted by FC2 system