我的应用程序数据库中有一个提醒表
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
谢谢,我希望这很容易做到,不需要任何额外的组件或库
发布于 2010-12-07 01:02:15
因此,我不知道如何发布所有代码,但下面是主要的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;发布于 2010-12-03 03:30:39
你的问题:是否有一种方法可以在事件发生时使用TTimer来显示提醒的标题和描述?
My answer
是的,有没有办法这样做呢?
要求:如果有,请用代码解释。
Anwer满足您的需求
伪代码:
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;发布于 2010-12-03 05:57:38
我知道你说没有额外的组件,但我想你会喜欢这个的。
在JVCL中,有一个名为TJvScheduledEvents的组件,它可以做您需要的事情,而且您只需很少的编程就可以使用它。试一试,如果你对它有任何问题,请随时提问。
https://stackoverflow.com/questions/4338923
复制相似问题