用DELPHI为WINDOWS做一个带声音的模拟闹钟

   嗨,大家好。我是梦寻,这是我的第一次发帖子,请大家多多鼓励、多多
支持,毕竟嘛,予人方便予己方便。OK,转入正题,现在就来讲如何做一个带
响声的表盘式的 CLOCK。
   首先我们应选择新建一个程序,并在窗体中加入以下元件:
    Timer1: TTimer;
    Image1: TImage;//时钟的表盘
    Edit1: TEdit;  //日期框
    Label1: TLabel;
    PopupMenu1: TPopupMenu;
   而后在 {$R *.DFM} 下面加入这么一句 {$R CLOCKSOU.RES} <--时钟的声音文件,
  (注:CLOCKSOU.RES 是先用windows的记事本新建一个文件,并加入以下几行
        CLICKBEL  WAVE "CLICKBEL.WAV"
        TIMEBELL  WAVE "TIMEBELL.WAV"
    并存为文件 CLOCKSOU.RC 然后在 DOS解面下用BRCC32.exe 将 CLOCKSOU.RC 编译

数据挖掘研究院


 为 DELPHI 格式的资源文件 CLOCOSOU.RES,当然,您如果嫌步骤太烦,那吗最简单的,
 到我的主页 http://www.suye.8u8.com 下载完整的程序代码)
   OK,在完成上面的步骤后我们就可以在窗体的代码筐中输入以下代码。
 
unit Unit1; 数据挖掘实验室

interface 数据挖掘交友

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ExtCtrls,unit2, StdCtrls,inifiles,MMSystem, Menus;
type
  TForm1 = class(TForm)
    Timer1: TTimer;
    Image1: TImage;
    Edit1: TEdit;
    Label1: TLabel;
    PopupMenu1: TPopupMenu;
    pop1: TMenuItem;
    pop2: TMenuItem;
    pop4: TMenuItem;
    pop3: TMenuItem;
    pop5: TMenuItem;
    N1: TMenuItem;
    procedure Timer1Timer(Sender: TObject);
    procedure timdrow(tim:real;long,col:integer);
    procedure FormCreate(Sender: TObject);
    procedure Image1Click(Sender: TObject);
    procedure pop1Click(Sender: TObject);
    procedure pop2Click(Sender: TObject);
    procedure pop4Click(Sender: TObject);

数据挖掘研究院


    procedure pop5Click(Sender: TObject);
    procedure pop3Click(Sender: TObject);
    procedure tiniwr();
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure N1Click(Sender: TObject); 数据挖掘交友

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  CLOCKBELL,wid,pofse:integer;
  tim1,tim2,tim3,tim4:real;
  dtme: TDateTime;
  timini:tinifile;
  dtim,textdef,tmfilename:string;
implementation 数据挖掘论坛

{$R *.DFM}
{$R LL1.RES}  //时钟的发声文件
procedure tform1.tiniwr();
 begin
timini:=TIniFile.Create(tmfilename);
with timini do
begin
WriteString("内容","文字",textdef);
Writestring("参数","时间",dtim);
WriteBool("参数","报时允许",pop1.checked);
WriteBool("参数","秒响允许",pop2.checked);
WriteBool("参数","定时允许",pop3.checked);
end;
 timini.free;
 end;

procedure tform1.timdrow(tim:real;long,col:integer); //指针的过程函数。
var
   xx,yy:integer;
   vtt,vt:real;
begin
IF (TIM2=59) AND (TIM3=0) THEN TIM:=TIM-1;
IF (COL=3)or (col=6) THEN
  if col=3 then VT:=TIM1*5+(TIM2/720)
    else begin
          VT:=TIM1*5+((TIM2-1)/720);
          col:=5;
          end
     ELSE vt:=tim;
vt:=Pi-pi*vt/30-2*pi*(vt-15);  //得出指针末端的 Y 坐标
vtt:=int(long*sin(vt))+45;     //得出指针末端的 X 坐标
xx:=strtoint(floattostr(vtt));
vtt:=int(long*cos(vt))+45;
yy:=strtoint(floattostr(vtt));
case col of                    //判断所要画的指针是 分针、秒针或时针
0:begin
image1.Canvas.pen.Color:=clgray;
image1.Canvas.pen.Width:=1;       

数据挖掘交友


END;
1:BEGIN
image1.Canvas.pen.Color:=clRed;
image1.Canvas.pen.Width:=1;
END;
2:BEGIN
image1.Canvas.pen.color:=clblue;
image1.Canvas.pen.Width:=2;
END;
3:BEGIN
image1.canvas.pen.color:=clgreen;
image1.Canvas.pen.Width:=2;
END;
4:begin
image1.canvas.pen.color:=clblack;
image1.Canvas.pen.Width:=1;
END;
5:begin
image1.canvas.pen.color:=clgray;
image1.Canvas.pen.Width:=3;
END;
end;
IMAGE1.Canvas.Ellipse(43,43,47,47);
image1.Canvas.MoveTo(45,45);
image1.Canvas.Lineto(xx,yy);
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
  str1,str2:string;
begin
str1:=timetostr(time());
STR2:=COPY(STR1,2,1);
if str2=":" then pofse:=0 else pofse:=1;
EDIT1.TEXT:="   "+DATETOSTR(DATE());     //日期盘上的日期数据
str2:=copy(str1,pofse+6,2);
tim4:=strtofloat(str2);
if tim4<>tim3 then                      //判断是否到了移动指针的时间
begin
if (tim3=0) or (tim3=15) or (tim3=30)
  or (tim3=45) then timdrow(tim3,39,4) else timdrow(tim3,39,0);
 tim3:=tim4;
if pop2.checked then PlaySound(PChar("CLICKBEL"),
          hInstance, snd_ASync or snd_Resource); //秒针的“滴答”发声
 str2:=copy(str1,1,pofse+1);

IF(TIM3=0)AND(TIM2=59)THEN  //判断是否到了发出整点报时“钟声”的时间
    BEGIN
     CLOCKBELL:=STRTOINT(STR2);
     IF CLOCKBELL=0 THEN CLOCKBELL:=12;
     END;
     IF CLOCKBELL>12 THEN CLOCKBELL:=CLOCKBELL-12;
 timdrow(tim1,26,6);
 tim1:=strtofloat(str2);
 timdrow(tim2,33,5);
 str2:=copy(str1,pofse+3,2);
 tim2:=strtofloat(str2);
 timdrow(tim2,33,2);
 IF (TIM2<>59) AND (TIM4<>0) THEN timdrow(tim1-1,26,3) ELSE TIMDROW(TIM1,26,3);
 tim2:=strtofloat(str2);
 str2:=copy(str1,pofse+3,2);
 timdrow(tim3,39,1);
IF CLOCKBELL>-1 THEN 
      BEGIN
      IF (CLOCKBELL<>0)and(pop2.checked) THEN
             PlaySound(PChar("TIMEBELL"), hInstance,
                       snd_ASync or snd_Resource);//时钟的整点“钟声”发声 数据挖掘工具
      DEC(CLOCKBELL);
      END;
if (pop3.checked)and(strtotime(dtim)<=time()) then//判断是否到了定时的时间
   begin
     form2.Button2.Caption:="取消";
     clockbell:=120;
     form2.Show;   //显示给自己的提示。
    end;
END;
end; 数据挖掘研究院


procedure TForm1.FormCreate(Sender: TObject); //读入程序开始的初始化设定
var
   str1,str2:string;
begin
tmfilename:=ExtractFilePath(Application.EXEName)+"clock1.ini";
timini:=TIniFile.Create(tmfilename);
with timini do
begin
Textdef:=readString("内容","文字","在这里输入您给自己的提醒");
dtim:=readstring("参数","时间","23:59:59");
pop1.checked:=readBool("参数","报时允许",true);
pop2.checked:=readBool("参数","秒响允许",true);
pop3.checked:=readBool("参数","定时允许",false);
form1.Left:=readinteger("位置","X坐标",566);
form1.top:=readinteger("位置","Y坐标",8);
end;
 timini.free;
dtme:=time();
 pop2.checked:=true;
 pop1.Checked:=true;
 str1:=timetostr(time());
 STR2:=COPY(STR1,2,1);
 If str2=":" then pofse:=0 else pofse:=1;
 image1.Canvas.BRUSH.COLOR:=CLBLACK;;
 str2:=copy(str1,pofse+6,2);
 tim3:=strtofloat(str2);
 str2:=copy(str1,pofse+3,2);
 tim2:=strtofloat(str2);

数据挖掘论坛


 str2:=copy(str1,1,pofse+1);
 tim1:=strtofloat(str2);
 CLOCKBELL:=-1;
end; 数据挖掘实验室

procedure TForm1.Image1Click(Sender: TObject);//表盘鼠标点击时的的处理
begin
PopupMenu1.Popup(FORM1.LEFT+40,FORM1.TOP+150);
end;

procedure TForm1.pop1Click(Sender: TObject);
begin
if pop1.checked then pop1.checked:=false else pop1.checked:=true;
form1.tiniwr();
end; 数据挖掘交友

procedure TForm1.pop2Click(Sender: TObject);
begin
if pop2.checked then pop2.checked:=false else pop2.checked:=true;
form1.tiniwr();
end; 数据挖掘交友

procedure TForm1.pop4Click(Sender: TObject);
begin
form2.show;
form1.tiniwr();
end;

数据挖掘论坛

procedure TForm1.pop5Click(Sender: TObject);
begin
close;
end; 数据挖掘交友

procedure TForm1.pop3Click(Sender: TObject);
begin
if pop3.Checked then
begin
pop3.Checked:=false;
form2.Button2.Caption:="取消";
end
   else
     begin
     pop3.Checked:=true;
     form2.Button2.Caption:="关闭";
     end;
form1.tiniwr();
end; 数据挖掘工具

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
timini:=TIniFile.Create("tmfilename");
with timini do
begin
Writeinteger("位置","X坐标",form1.Left);//保存时钟窗口的初始 X 坐标
Writeinteger("位置","Y坐标",form1.top);//保存时钟窗口的初始 Y 坐标
end;
 timini.free; 数据挖掘工具

end; 数据挖掘交友

procedure TForm1.N1Click(Sender: TObject);
begin
showmessage("模拟闹钟 0.1,"+#13+"  Copy(R)ight by Suye.2001");;
end; 数据挖掘研究院

end.
    好了,经过以上的一些操作后,我们的一个闹钟就几呼完成了,您只要做一些
小变化就全部完成了,OK,就聊到这,您如果还有什么问题,欢迎到我的主页
http://www.suye.8u8.com 询问,说不定您将会得到不错的收获哦。
                                 梦寻,2001.02.04

数据挖掘论坛

[数据挖掘专家] [数据挖掘研究院] [数据挖掘论坛] [数据挖掘实验室]
上一篇:用Delphi开发DirectX控件
下一篇:一个实用的Delphi屏幕拷贝程序的设计
最新评论共有 0 位网友发表了评论 , 查看所有评论
发表评论( 不能超过250字,需审核,请自觉遵守互联网相关政策法规。 )
匿名?
数据挖掘网站导航 数据挖掘论坛导航
  • 数据挖掘工具
  • 数据挖掘论坛
  • DataCruncher - Cognos
  • MineSet - MathSoft
  • Intelligent Miner - GainSmarts
  • Sqlserver - SAS - Clementine
  • CART - Weka - WizSoft
  • NeuroShell - ModelQuest
  • data mining tools - Darwin
  • 数据挖掘交友
  • 数据挖掘博客
  • 数据挖掘工具
  • 数据挖掘资源
  • 数据挖掘技术算法
  • 数据挖掘相关期刊、会议
  • 研究院联盟合作专区
  • 数据挖掘基础与相关技术
  • 数据挖掘厂商与就业
  • 数据挖掘研究者乐园
  • 知名厂商数据挖掘工具资料
  • 国内数据挖掘实验室
  • Foreign Data Mining Lab
  • 热点关注
  • GDI+简介
  • COM与DCOM的区别与联系
  • 使用Delphi解析XML 文档
  • 如何设置delphi/cbuilder/BDE/MSSQL
  • BORLAND在“迫害”程序员?
  • 将image的图片保存为JPG格式图片方法
  • InstallShieldExpressfordelphi制作安装程
  • Real Programmers Use Pascal
  • 关于在COM中使用可选参数的研究
  • TStrings的AddObject方法应用
  • 论坛最新话题
  • Foundations of Statistical Natural Langu
  • Game Theory meet Data Mining: A Recent P
  • System Building: How does it help or hin
  • 数据挖掘与Clementine培训
  • 新手报到
  • 求 SASEM 客户流失预测分析
  • 数据挖掘工程师/搜索研究院—北京——无线
  • 数据挖掘入门介绍(如何着手数据挖掘)
  • Information Overload Survey Results
  • The INEX 2005 Workshop on Element Retrie
  • 相关资讯
  • BORLAND在“迫害”程序员?
  • 李维:我的回忆和一些有趣的事(精彩绝伦)
  • 李维看.net和DELPHI6(含李维照片)
  • 《代码大全》电子版1.01发布了
  • Real Programmers Use Pascal
  • Kylix安装手记
  • Borland与Microsoft关于Delphi的对话
  • InstallShieldExpressfordelphi制作安装程
  • 关于在COM中使用可选参数的研究
  • msagent经典用法
  • 数据挖掘实验室资料
  • 数据挖掘博客地址
  • 数据挖掘实验室网站地址
  • Prepare for Medicare audits by using dat
  • 注册成为SAS用户与爱好者俱乐部会员
  • 水南梅
  • 明日烟
  • 新人报道
  • 下载
  • 厦门服务器托管,450元/月—0592-5177319 高
  • 买空间送域名--0592-5177319 高静