image

通过网盘分享的文件: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.