添加计时器以在应用程序中实现提醒

时间:2010-12-02 19:23:44

标签: 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-Daily, 2-Weekly, 3-Monthy, 4-Annually)
FieldName = 'completed" (true/False)

有没有办法在事件发生时使用TTimer显示提醒的标题和说明?如果是这样,请用代码/ seudo代码或文本解释。

提醒是一次性或重新发生的事件

如果一次(每天发生1次),则日期和时间存储在Start_Date&开始时间 提醒应该在那时显示。显示后,表字段“已完成”设置为true。

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

如果每天,提醒应该每天显示,直到达到结束日期

如果是每周一次,则应在当天(每周)的某一天显示提醒,直到达到结束日期

如果是每月,则应在当天(每个月)的某一天显示提醒,直到达到结束日期

如果每年,提醒应该显示在那个特定日期(每年),直到达到结束日期

达到结束日期时,已完成更新为True

谢谢,我希望这可以轻松完成任何其他组件或库

3 个答案:

答案 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;