Delphi 添加计时器以在应用程序中实现提醒
我的应用程序数据库中有一个提醒表Delphi 添加计时器以在应用程序中实现提醒,delphi,delphi-7,Delphi,Delphi 7,我的应用程序数据库中有一个提醒表 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-Dail
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显示提醒的标题和说明?如果是,请用代码/seudo代码或文本进行解释
提醒是一次性或重复发生的事件
如果一次(每天发生1次),则日期和时间存储在开始日期和开始时间中
此时应显示提醒。显示后,表格字段“已完成”设置为真
如果重新出现,则日期和时间存储在开始日期和开始时间中
并存储结束日期和结束时间。提醒应在该日期和时间显示,每天(1)、每周(2)、每月(3)或每年(4)
如果是每天,则应在每天的该时间显示提醒,直到到达结束日期
如果是每周,则应在该时间(每周的某一天)显示提醒,直到到达结束日期
如果是每月一次,则应在该特定日期(每月)显示提醒,直到到达结束日期
如果是每年一次,则应在该时间(每年的某一天)显示提醒,直到到达结束日期
当达到结束日期时,“完成”将更新为True
谢谢,我希望不需要任何额外的组件或库就可以轻松完成此任务
您的问题:
是否有方法在事件发生时使用TTimer显示提醒的标题和说明
我的答案
是的,有办法吗
要求:
如果是,请用代码解释
能够满足您的要求
伪代码:
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;
您的问题:
是否有方法在事件发生时使用TTimer显示提醒的标题和说明
我的答案
是的,有办法吗
要求:
如果是,请用代码解释
能够满足您的要求
伪代码:
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;
我知道你说没有附加组件,但我想你会喜欢这个
在JVCL中,有一个名为TJvScheduledEvents的组件,它可以完全满足您的需要,并且只需很少的编程即可使用它。试试看,如果你对它有任何疑问,请随时提问。我知道你说没有附加组件,但我想你会喜欢的
在JVCL中,有一个名为TJvScheduledEvents的组件,它可以完全满足您的需要,并且只需很少的编程即可使用它。试一试,如果您对此有任何疑问,请随时提问。因此,我不知道如何发布所有代码,但这里是TTimer的主要活动
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;
过程TForm1.Timer1Time(发送方:TObject);
变量
CommandText:字符串;
开始
尝试
Timer1.Enabled:=False;
如果ADOQuery1.处于活动状态,则
ADOQuery1.Active:=False;
命令文本:=
格式化('SELECT*FROM members WHERE(START_DATE因此,我不知道如何发布所有代码,但这里是主要的TTimer事件
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;
过程TForm1.Timer1Time(发送方:TObject);
变量
CommandText:字符串;
开始
尝试
Timer1.Enabled:=False;
如果ADOQuery1.处于活动状态,则
ADOQuery1.Active:=False;
命令文本:=
格式('从提醒中选择*,其中(为什么要讽刺?为什么不认真回答呢?我同意。我自己也不理解这种讽刺。尤其是来自一个有着如此高声誉的人。我猜声誉是以牺牲他人为代价的。@Rob,@Shane:对不起,我在写作的那一刻有点厌倦了阅读不完整的问题,也感觉到了@Shane laziness问我们一个完整的想法(带代码)在点击post按钮之前,我想了好几次,但我觉得现在这是公平的,即使带有讽刺意味,我的伪代码对于一个对这件事一无所知的人来说是一个很好的开始,只是想让他/她为此烧掉一些大脑。也许我错了……我错了对@Shane没有遗憾,当然也没有什么私人的东西。为什么要讽刺?为什么不认真回答呢?我同意。我自己也不理解讽刺。尤其是来自一个有着如此高声誉的人。我猜声誉是以牺牲他人为代价的。@Rob,@Shane:对不起,我有点厌倦了在mo上阅读不完整的问题在写作的过程中,也感受到@Shane Lazness要求我们提供完整的想法(带代码)在点击post按钮之前,我想了好几次,但我觉得现在这是公平的,即使带有讽刺意味,我的伪代码对于一个对这件事一无所知的人来说是一个很好的开始,只是想让他/她为此烧掉一些大脑。也许我错了……我错了毫无遗憾,当然对@Shane也没有任何个人隐私。“请用代码解释。”-这听起来更像是你希望有人为你做你的工作。不,我不希望有人做我的代码。如果我能用代码解释,我会的。我不能,因此,我在文本中解释。如果你不想提供答案,那是你的承诺。如果你或有人想向我解释如何做而不给我代码,我愿意接受任何建议d所有建议。-谢谢,我把我的问题改为询问或……谢谢你告诉我我的错误“请用代码解释。”-这听起来更像是你希望有人为你做你的工作。不,我不希望有人做我的代码。如果我能用代码解释,我会的。我不能,因此,我在文本中解释。如果你不想提供答案,那是你的承诺。如果你或有人想向我解释如何做而不给我代码,我愿意接受任何建议d所有建议。-谢谢,我把问题改为询问或…谢谢你告诉我我的错误。这个组件是dataaware组件,还是库兼容