
通过网盘分享的文件:alarmClock.rar
链接: https://pan.baidu.com/s/15acwo0nPXx7E2KFSiui0Hg?pwd=5sth 提取码: 5sth
unit Unit2; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ComCtrls, Vcl.ExtCtrls, DATEutils; type TForm2 = class(TForm) Label1: TLabel; lblCurrentTime: TLabel; Label3: TLabel; Label2: TLabel; lblStatus: TLabel; dtpAlarmTime: TDateTimePicker; btnSetAlarm: TButton; btnStopAlarm: TButton; Timer1: TTimer; procedure FormCreate(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure btnSetAlarmClick(Sender: TObject); procedure btnStopAlarmClick(Sender: TObject); private { Private declarations } FAlarmTime: TDateTime; // 存储闹钟时间 FAlarmSet: Boolean; // 闹钟是否已设置 procedure PlayAlarm; // 播放闹钟 procedure UpdateDisplay; // 更新显示 public { Public declarations } end; var Form2: TForm2; implementation {$R *.dfm} procedure TForm2.btnSetAlarmClick(Sender: TObject); begin FAlarmTime := dtpAlarmTime.Time; FAlarmSet := True; lblStatus.Caption := Format('闹钟已设置:%s', [TimeToStr(FAlarmTime)]); btnStopAlarm.Enabled := True; btnSetAlarm.Enabled := False; // 可选:播放设置成功提示音 Beep; end; procedure TForm2.btnStopAlarmClick(Sender: TObject); begin FAlarmSet := False; lblStatus.Caption := '闹钟已取消'; btnStopAlarm.Enabled := False; btnSetAlarm.Enabled := True; end; procedure TForm2.FormCreate(Sender: TObject); begin // 初始化 FAlarmSet := False; FAlarmTime := 0; // 设置 DateTimePicker 只显示时间 dtpAlarmTime.Kind := dtkTime; dtpAlarmTime.Time := Now; // 设置定时器间隔为1秒(1000毫秒) Timer1.Interval := 1000; Timer1.Enabled := True; // 按钮状态 btnStopAlarm.Enabled := False; // 显示当前时间 UpdateDisplay; end; procedure TForm2.PlayAlarm; begin // 播放系统默认声音 Beep; // 也可以播放自定义声音文件 // PlaySound('alarm.wav', 0, SND_ASYNC or SND_FILENAME); // 显示消息框 MessageDlg('时间到了!闹钟时间已到!', mtInformation, [mbOK], 0); // 闪烁窗体 FlashWindow(Handle, True); end; procedure TForm2.Timer1Timer(Sender: TObject); var CurrentTime: TDateTime; begin // 更新当前时间显示 UpdateDisplay; // 检查闹钟是否触发 if FAlarmSet then begin CurrentTime := Now; // 比较时间(只比较时分秒,忽略日期) if (HourOf(CurrentTime) = HourOf(FAlarmTime)) and (MinuteOf(CurrentTime) = MinuteOf(FAlarmTime)) and (SecondOf(CurrentTime) = SecondOf(FAlarmTime)) then begin PlayAlarm; FAlarmSet := False; // 闹钟触发后自动重置 lblStatus.Caption := '闹钟已触发!'; btnStopAlarm.Enabled := False; btnSetAlarm.Enabled := True; end; end; end; procedure TForm2.UpdateDisplay; begin lblCurrentTime.Caption := TimeToStr(Now); end; end.
浙公网安备 33010602011771号