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

推荐订阅源

V
Visual Studio Blog
The Last Watchdog
The Last Watchdog
Cisco Talos Blog
Cisco Talos Blog
A
Arctic Wolf
WordPress大学
WordPress大学
The Hacker News
The Hacker News
C
Cybersecurity and Infrastructure Security Agency CISA
H
Help Net Security
GbyAI
GbyAI
V
V2EX
Security Latest
Security Latest
Cyberwarzone
Cyberwarzone
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
P
Privacy International News Feed
I
InfoQ
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
T
Tor Project blog
P
Privacy & Cybersecurity Law Blog
C
Cisco Blogs
月光博客
月光博客
B
Blog
T
Threat Research - Cisco Blogs
I
Intezer
Recent Announcements
Recent Announcements
Latest news
Latest news
S
Schneier on Security
美团技术团队
量子位
H
Hacker News: Front Page
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Webroot Blog
Webroot Blog
N
News | PayPal Newsroom
Martin Fowler
Martin Fowler
博客园 - 三生石上(FineUI控件)
雷峰网
雷峰网
爱范儿
爱范儿
T
Tailwind CSS Blog
Apple Machine Learning Research
Apple Machine Learning Research
博客园 - 聂微东
Cloudbric
Cloudbric
MyScale Blog
MyScale Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Microsoft Security Blog
Microsoft Security Blog
人人都是产品经理
人人都是产品经理
S
Securelist
Hacker News: Ask HN
Hacker News: Ask HN
Y
Y Combinator Blog
Attack and Defense Labs
Attack and Defense Labs
TaoSecurity Blog
TaoSecurity Blog

博客园 - 涂磊

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.