Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 添加计时器以在应用程序中实现提醒_Delphi_Delphi 7 - Fatal编程技术网

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组件,还是库兼容