我的应用数据库中有一个提醒表
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次),则日期和时间存储在Start_Date&开始时间 提醒应该在那时显示。显示后,表字段“已完成”设置为true。
如果重新出现,日期和时间将存储在Start_Date&开始时间 并存储结束日期和结束时间。提醒应显示在该日期和时间,每天(1),周(2),月(3)或年(4)
如果每天,提醒应该每天显示,直到达到结束日期
如果是每周一次,则应在当天(每周)的某一天显示提醒,直到达到结束日期
如果是每月,则应在当天(每个月)的某一天显示提醒,直到达到结束日期
如果每年,提醒应该显示在那个特定日期(每年),直到达到结束日期
达到结束日期时,已完成更新为True
谢谢,我希望这可以轻松完成任何其他组件或库
答案 0 :(得分:3)
<讽刺>
您的问题: 有没有办法在事件发生时使用TTimer显示提醒的标题和描述?
我的回答
是的,有没有办法做到这一点。
<强>要求:强> 如果是,请在代码中解释。
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;
&LT; /讽刺&GT;
答案 1 :(得分:2)
我知道你说没有额外的组件,但我想你会喜欢这个。
在JVCL中,有一个名为TJvScheduledEvents的组件可以完全满足您的需要,您只需很少的编程就可以使用它。尝试一下,如果您对此有任何疑问,请随时提出。
答案 2 :(得分:1)
所以,我无法弄清楚如何发布所有代码,但这里是主要的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;