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

2008-04-09 04:20:36来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

嗨,大家好。我是梦寻,这是我的第一次发帖子,请大家多多鼓励、多多
支持,毕竟嘛,予人方便予己方便。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);

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:Delphi Win32 API 使用的特殊情况

下一篇:将某一主机域名解析为IP地址。