首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在应用中添加定时器来实现提醒

在应用中添加定时器来实现提醒
EN

Stack Overflow用户
提问于 2010-12-03 03:23:44
回答 3查看 1.5K关注 0票数 0

我的应用程序数据库中有一个提醒表

代码语言:javascript
复制
FieldName = 'id'
FieldName = 'title'
FieldName = 'description'
FieldName = 'start_date'
FieldName = 'start_time'
FieldName = 'end_date'
FieldName = 'end_time'
FieldName = 'repeat'  (true/false)
FieldName = 'occurs'  (Integer = 1-Daily, 2-Weekly, 3-Monthy, 4-Annually)
FieldName = 'completed" (true/False)

有没有办法在事件发生时使用TTimer来显示提醒的标题和描述?如果是,请以代码/伪代码或文本形式解释。

提醒可以是一次性事件,也可以是重复发生的事件

如果只有一次(每天发生1次),则日期和时间将存储在Start_Date中&提醒应在该时间显示的开始时间。显示后,表字段Completed设置为true。

如果重复出现,日期和时间将存储在Start_Date中&开始时间,结束日期和结束时间将被存储。提醒应显示在该日期和时间,每天(1)、周(2)、月(3)或年(4)

如果是每天,则应每天在该时间显示提醒,直到到达结束日期

如果是每周,则应在该时间(每周)特定日期显示提醒,直到到达结束日期

如果是每月,则应在该时间(每个月)特定日期显示提醒,直到到达结束日期

如果是每年,则应在该时间、(每年)特定日期显示提醒,直到到达结束日期

到达结束日期时,Completed将更新为True

谢谢,我希望这很容易做到,不需要任何额外的组件或库

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-12-07 01:02:15

因此,我不知道如何发布所有代码,但下面是主要的TTimer事件

代码语言:javascript
复制
Procedure TForm1.Timer1Time(Sender: TObject);
var
 CommandText: String;
begin
 try
  Timer1.Enabled:= False;
  if ADOQuery1.Active then 
   ADOQuery1.Active:= False;
  CommandText :=
  Format('SELECT * FROM REMINDERS WHERE (START_DATE <= %s) AND (COMPLETED = FALSE) AND (LASTCHECK < %s)',
    [FormatDateTime('mm/dd/yy', Date), FormatDateTime('mm/dd/yy', Date)]);
ADOQuery1.SQL.Text := CommandText;
try
  ADOQuery1.Active := True;
  if not ADOQuery1.IsEmpty then
  begin
    BuildReminderList(ADOQuery1);
  end;
except
  //
end;
finally
Timer1.Enabled := True;
  end; 
end;
票数 1
EN

Stack Overflow用户

发布于 2010-12-03 03:30:39

你的问题:是否有一种方法可以在事件发生时使用TTimer来显示提醒的标题和描述?

My answer

是的,有没有办法这样做呢?

要求:如果有,请用代码解释。

Anwer满足您的需求

伪代码:

代码语言:javascript
复制
procedure TEventsManager.SetNextEventTimer;
begin
  if Assigned(NextOcurringEvent) then
  begin
    Timer1.Interval := MillisecondsBetween(Now, NextOcurringEvent.DateTime);
    Timer1.Enabled := True;
  end;
end;

procedure TEventsManager.Timer1Timer(Sender: TObject);
begin
  Timer1.Enabled := False;
  DisplayReminder(nextOcurringEvent);
  SetNextEventTimer;
end;
票数 3
EN

Stack Overflow用户

发布于 2010-12-03 05:57:38

我知道你说没有额外的组件,但我想你会喜欢这个的。

在JVCL中,有一个名为TJvScheduledEvents的组件,它可以做您需要的事情,而且您只需很少的编程就可以使用它。试一试,如果你对它有任何问题,请随时提问。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4338923

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档