您的位置:首页 > 编程语言 > C语言/C++

用c++builder6.0开发小闹钟(用于提醒自己不要盯着屏幕太久)

2017-04-02 14:33 555 查看
一次在找资料时不断百度,查找各个论坛,不知不觉发现自己已经看了一个多小时了,感觉眼睛有点酸。就赶紧出去透透气,目眺远方,调节一下,舒缓眼疲劳。其实也并不是那么急的事,要是中间可以中断一下,休息一下,对眼睛是有好处的。想着自己是不是能够做些什么来提醒自己,就想到之前c++builder练习书上有一个闹钟的例子,感觉改一下来达到自己的要求。

基本要求:设想是有两个时间:专注时间和休息时间,这两个是可以设置的。专注时间一到,音乐响起,然后就停下手上的工作,休息;紧接其后,休息时间一到,相关的音乐响起,继续回来工作。

需要组件:2个label、2个edit、2个button、1个timer、1个mediaplayer。

具体效果:



相关设置很简单,在属性栏修改caption属性。

主要组件属性方法介绍:

system---timer组件:主要属性:interval(int类型)--设置方法:timer->interval=...;单位毫秒,定时器启动后经过interval时间后处理定时器中设置的内容

                                                         enable--设置方法:timer->Enable=true;启动定时器;timer->Enable=false;关闭定时器

system---mediaplayer组件:主要属性:filename--设置方法:mediaplayer->filename=("");制定指定的音乐文件地址,播放时自动调用。

函数:mediaplayer->play();开始播放;mediaplayer->close();停止播放。

相关函数及组件设置:

1.窗口创建时初始化设置

void __fastcall TForm1::FormCreate(TObject *Sender)
{
//初始化,清空edit1和edit2,关闭定时器
edt1->Text="";
edt2->Text="";
tmr1->Enabled=False;
mp1->Close();
}

2.edit限制只能数字输入,防止strtoint转化失败

//检查edit1的每次输入,不是数字,退格和delete键的情况下禁止
void __fastcall TForm1::edt1KeyPress(TObject *Sender, char &Key)
{
if(!(((Key >= '0') && (Key <= '9')) || (Key == VK_BACK) || (Key   == VK_DELETE)))
{
Key = 0;
}
}
//---------------------------------------------------------------------------

//检查edit2的每次输入,不是数字,退格和delete键的情况下禁止
void __fastcall TForm1::edt2KeyPress(TObject *Sender, char &Key)
{
if(!(((Key >= '0') && (Key <= '9')) || (Key == VK_BACK) || (Key   == VK_DELETE)))
{
Key = 0;
}
}
3.启动按钮按下时

void __fastcall TForm1::btn1Click(TObject *Sender)
{
FocusTime=StrToInt(edt1->Text);
RestTime=StrToInt(edt2->Text);
tmr1->Interval=60000*FocusTime;  //默认从专注时间开始
tmr1->Enabled=True;      //启动定时器
}
其中FocusTime,RestTime为全局变量。设置时间单位为分钟,而interval单位是毫秒,故需要乘以60,000。

4.timer组件的内容

void __fastcall TForm1::tmr1Timer(TObject *Sender)
{
//由于专注时间和休息时间不断交替,每次进入定时器都会不同
//设置标志位flag
int ApartSignal=1;
if(Flag)
{
mp1->Close();
mp1->FileName=("C:\\Users\\XJ\\Desktop\\当前解决\\tixing.mp3"); //指定铃声
mp1->Open();
mp1->Play();
tmr1->Enabled=False;
tmr1->Interval=60000*RestTime;
tmr1->Enabled=True;
ApartSignal=0;    //ApartSignal=0时flag--,即flag=0
}
else{
mp1->Close();
tmr1->Enabled=False;
tmr1->Interval=60000*FocusTime;
tmr1->Enabled=True;
mp1->FileName=("C:\\Users\\XJ\\Desktop\\当前解决\\dalei.wav");
mp1->Open();
mp1->Play();
ApartSignal=1;      //ApartSignal=1时flag++,即flag=1
}
if(ApartSignal)
{
Flag++;
}
else{
Flag--;
}
}


注意其中的地址,可根据自己选择的音乐来改变,主要格式有mp3,wav等。

本来设置为奇偶变化来区分两种计时,想到这样的话标志的值会一直增大,后来改为双重区分,其中flag只在0和1之间变化。
最后想一下觉得奇偶判断也可以,毕竟不会运行太久的,即可改为if(flag%2==0)......else......

5.停止按钮按下后

void __fastcall TForm1::FormCreate(TObject *Sender)
{
//初始化,清空edit1和edit2,关闭定时器
edt1->Text="";
edt2->Text="";
tmr1->Enabled=False;
mp1->Close();
}
6.附上总代码:

unit.h

#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ExtCtrls.hpp>
#include <MPlayer.hpp>
#include <Dialogs.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:	// IDE-managed Components
TTimer *tmr1;
TMediaPlayer *mp1;
TLabel *lbl1;
TLabel *lbl2;
TEdit *edt1;
TEdit *edt2;
TButton *btn1;
TButton *btn2;
void __fastcall tmr1Timer(TObject *Sender);
void __fastcall FormCreate(TObject *Sender);
void __fastcall btn1Click(TObject *Sender);
void __fastcall btn2Click(TObject *Sender);
void __fastcall edt1KeyPress(TObject *Sender, char &Key);
void __fastcall edt2KeyPress(TObject *Sender, char &Key);
private:	// User declarations
public:		// User declarations
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif


unit.cpp

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
int Flag=1;
int FocusTime=0;
int RestTime=0;
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::tmr1Timer(TObject *Sender) { //由于专注时间和休息时间不断交替,每次进入定时器都会不同 //设置标志位flag int ApartSignal=1; if(Flag) { mp1->Close(); mp1->FileName=("C:\\Users\\XJ\\Desktop\\当前解决\\tixing.mp3"); //指定铃声 mp1->Open(); mp1->Play(); tmr1->Enabled=False; tmr1->Interval=60000*RestTime; tmr1->Enabled=True; ApartSignal=0; //ApartSignal=0时flag--,即flag=0 } else{ mp1->Close(); tmr1->Enabled=False; tmr1->Interval=60000*FocusTime; tmr1->Enabled=True; mp1->FileName=("C:\\Users\\XJ\\Desktop\\当前解决\\dalei.wav"); mp1->Open(); mp1->Play(); ApartSignal=1; //ApartSignal=1时flag++,即flag=1 } if(ApartSignal) { Flag++; } else{ Flag--; } }
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender) { //初始化,清空edit1和edit2,关闭定时器 edt1->Text=""; edt2->Text=""; tmr1->Enabled=False; mp1->Close(); }
//---------------------------------------------------------------------------

void __fastcall TForm1::btn1Click(TObject *Sender) { FocusTime=StrToInt(edt1->Text); RestTime=StrToInt(edt2->Text); tmr1->Interval=60000*FocusTime; //默认从专注时间开始 tmr1->Enabled=True; //启动定时器 }
//---------------------------------------------------------------------------

void __fastcall TForm1::btn2Click(TObject *Sender)
{
mp1->Close(); //关闭定时器
}
//---------------------------------------------------------------------------

//检查edit1的每次输入,不是数字,退格和delete键的情况下禁止 void __fastcall TForm1::edt1KeyPress(TObject *Sender, char &Key) { if(!(((Key >= '0') && (Key <= '9')) || (Key == VK_BACK) || (Key == VK_DELETE))) { Key = 0; } } //--------------------------------------------------------------------------- //检查edit2的每次输入,不是数字,退格和delete键的情况下禁止 void __fastcall TForm1::edt2KeyPress(TObject *Sender, char &Key) { if(!(((Key >= '0') && (Key <= '9')) || (Key == VK_BACK) || (Key == VK_DELETE))) { Key = 0; } }
//---------------------------------------------------------------------------


最后总结:大概实现了自己的要求,就是最后想把音乐这样的资源文件给嵌入到exe程序文件中,但由于用了madieplayer组件,尽管可以加入资源文件,但不能做到mediaplayer组件与资源文件的链接。希望之后再来探索软件安装,来实现软件的可移植性。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐