惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Y
Y Combinator Blog
B
Blog
S
SegmentFault 最新的问题
Vercel News
Vercel News
博客园 - 聂微东
宝玉的分享
宝玉的分享
C
Check Point Blog
有赞技术团队
有赞技术团队
IT之家
IT之家
V
V2EX
爱范儿
爱范儿
GbyAI
GbyAI
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Microsoft Azure Blog
Microsoft Azure Blog
P
Proofpoint News Feed
博客园 - 司徒正美
博客园_首页
Last Week in AI
Last Week in AI
博客园 - 叶小钗
量子位
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
F
Fortinet All Blogs
腾讯CDC
J
Java Code Geeks

博客园 - 涂磊

TMS可以单独安装控件 02]AdvStringGrid中添加CheckBox 01]TMSadvStringGrid下载与安装 epson投影仪提示,保存时间的电池电量偏低,取消显示 XboxS联网下载完游戏后,要拔掉网线,就能玩游戏了 12]RichEdit某些文本突出显示 delphi10.3中Tmemo中某些文本显示下划线 delphi的TReeView支持鼠标拖动节点 cnPack里MarkDown里RTF显示 11]delphi中 RichEdit1设置行距 10]RichEdit另存 为BMP图片 09]delphi中richedit查找 08]delphi10.3剪贴板的图片,保存到文件 07]Delphi10.3中Richedit中的链接可以点击 06]delphi10.3中richedit中文本背景颜色 05]delphi10.3中richedit中删除线 delphi10.3中UpDown1使用 04]RichEdit的上标和下标,Delphi10.3 03]RichEdit插入BMP图片 delphi 中tButtonColor颜色选择 02]如何设置RichEdit文本颜色?_编程语言-CSDN问答 01]delphi从TRichEdit获得RTF格式文本(PC版本) Delphi10.3接收从文件管理器拖放过来的文件名
用DeepSeek做的Delphi闹钟
涂磊 · 2026-04-11 · via 博客园 - 涂磊

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.