добавление таймера для реализации напоминаний в приложении - PullRequest
0 голосов
/ 02 декабря 2010

У меня есть таблица напоминаний в моей базе данных приложений

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 для отображения заголовка и описания напоминания всякий раз, когда происходит событие?Если это так, пожалуйста, объясните в code / seudo code или в тексте.

напоминание - одноразовое или повторяющееся событие

, если один раз (происходит = 1 в день),дата и время сохраняются в Start_Date & Start Time. При этом должно отображаться напоминание.После отображения поле таблицы «Завершено» устанавливается в значение «истина».

, если оно повторяется, дата и время сохраняются в дате начала и времени начала, а также дата окончания и время окончания.Напоминание должно отображаться в этот день и время, каждый день (1), неделя (2), месяц (3) или год (4)

Если ежедневно, напоминание должно отображаться в это время каждый день, доконечная дата достигнута

Если еженедельно, напоминание должно отображаться в это время, в этот конкретный день (каждой недели), пока не будет достигнута конечная дата

Если ежемесячно, напоминание должно отображаться в это времяв этот конкретный день (каждого месяца) до достижения конечной даты

Если ежегодно, то напоминание должно отображаться в это время, в этот конкретный день (каждого года), до достижения конечной даты

когда достигнута дата окончания, Completed обновляется с True

спасибо, я надеюсь, что это легко выполнимо без каких-либо дополнительных компонентов или библиотек

Ответы [ 3 ]

3 голосов
/ 02 декабря 2010

Ваш вопрос: Есть ли способ использовать 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;

2 голосов
/ 03 декабря 2010

Я знаю, что вы сказали без дополнительных компонентов, но я думаю, вам понравится.

В JVCL есть компонент TJvScheduledEvents, который может делать именно то, что вам нужно, и вы можете использовать его с очень небольшим программированием. Попробуйте, и если у вас есть какие-либо вопросы по этому поводу, не стесняйтесь спрашивать.

1 голос
/ 06 декабря 2010

Итак, я не мог понять, как разместить весь код, но вот основное событие 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;
...