アラーム時計
時刻を取得するためのDateTime型、サウンドファイル*.wavの再生のためのSoundPlayer型を用いてアラーム時計Alarm.exeを作ってみた。プログラム名Alarm.exeをクリックしてダウンロード・実行すると下図のフォームが現れる。
設定時刻に設定された時刻になると、設定したwavファイルが繰り返し再生される。wavファイルの設定は、「*.wav」ボタンのクリックで行うことができる。このボタンをクリックすると、以下のコードが実行される。
====================================
private: System::Void
buttonSet_Click(System::Object^
sender, System::EventArgs^
e) {
openFileDialog1->Filter = "*.wav|*.wav";
if
(openFileDialog1->ShowDialog() == Windows::Forms::DialogResult::Cancel) return;
sp = gcnew
System::Media::SoundPlayer( openFileDialog1->FileName );
this->buttonStart->Enabled
= true;
this->buttonCheck->Enabled
= true;
this->buttonExit->Enabled
= true;
}
====================================
メソッドopenFileDialog1->ShowDialogの実行により、入力ファイル名設定のダイアログフォームが表示される。
wavファイルは、例えばこのウェブサイト作成者のPCの場合はC:\Windows\Mediaフォルダに既に多数用意されているので、適当なもの選べばよい。
このメソッドの実行により、下図のように「チェック」ボタン、「アラーム設定」ボタン、「停止」ボタンがイネーブルになる(下図)。
「チェック」ボタンをクリックすると、次のコードが実行され、設定したwavファイルの音を確認することができる。
=========================================
private: System::Void
buttonCheck_Click(System::Object^
sender, System::EventArgs^
e) {
this->buttonStop->Enabled
= true;
this->buttonStop->Focus();
ck = true;
while(ck){
sp->PlaySync();
Application::DoEvents();
}
}
=========================================
識別子spは、SoundPlayer型のオブジェクトへのハンドルであり、次のように宣言されている。
System::Media::SoundPlayer^ sp;
「チェック」ボタンを押して鳴り続ける音は、イネーブルになっている「停止」ボタンをクリックして止めることができる。「停止」ボタンのクリックで以下のコードが実行される。
============================================
private: System::Void
buttonStop_Click(System::Object^
sender, System::EventArgs^
e) {
ck = false;
ck1 = false;
ck2 = false;
this->buttonSet->Enabled
= true;
this->buttonCheck->Enabled
= true;
this->buttonStart->Enabled
= true;
timer2->Enabled = false;
timer1->Enabled = true;
}
============================================
Wavファイルの設定が終われば、wavファイルの音を鳴らす時刻を「設定時刻」の下のテキストボックスに設定する。
その下の「メモ:」で始まるRichTextBox内には、任意の書き込みができる。
時刻の設定後、「アラーム設定」ボタンのクリックで次のコードが実行されて、設定時刻になるとwavファイルが繰り返し再生される状態になる。
========================================================
private: System::Void
buttonStart_Click(System::Object^
sender, System::EventArgs^
e) {
h1 = int::Parse(textBoxHour->Text);
if ((h1
< 0) || (h1 > 23)){
MessageBox::Show("時は0時から23時までの数値で設定。");
return;
}
m1 = int::Parse(textBoxMin->Text);
if ((m1
< 0) || (m1 > 59)){
MessageBox::Show("分は0分から59分までの数値で設定。");
}
this->buttonSet->Enabled
= false;
this->buttonCheck->Enabled
= false;
this->buttonStart->Enabled
= false;
this->buttonStop->Enabled
= true;
this->buttonExit->Enabled
= true;
ck1 = true;
}
========================================================
これは、上の最後の行で設定されているck1が、時刻を1秒単位でチェックするTimerコンポーネントtimer1のメソッドにおいて以下のように用いられていることによる。
==================================================
private: System::Void
timer1_Tick(System::Object^ sender,
System::EventArgs^ e) {
DateTime t = DateTime::Now;
labelTime->Text = t.Hour.ToString("D2") + ":"
+ t.Minute.ToString("D") + ":" + t.Second.ToString("D2");
if (ck1)
{
if ((h1
== t.Hour) && (m1 == t.Minute)){
timer1->Enabled = false;
timer2->Interval = 1000;
timer2->Enabled = true;
this->buttonExit->Focus();
this->buttonStop->Focus();
ck2 = true;
while(ck2){
sp->PlaySync();
Application::DoEvents();
}
}
}
}
==================================================
プログラムのソースコードファイルなどは圧縮ファイルAlarm.zipとしてまとめた。圧縮ファイル名Alarm.zipをクリックしてダウンロードすることができる。ダウンロードした圧縮ファイル名をマウスの右ボタンでクリックして表示されるメニュから「解凍」あるいは「展開」などを選ぶと解凍・展開される。解凍されたプログラムファイルはVisual C++2008で開くことができる。
なお、Visual C++プログラミングの入門・解説書として<岡本安晴「大学生のための心理学VC++プログラミング入門」勁草書房>を用意した。