Как запустить уведомление с помощью TimeEdit

Я пытаюсь запустить уведомление в определенное время с помощью TimeEdit, это не сработало! код, который я использовал ..

try
MyNot.Name := Edit1.Text;
MyNot.AlertBody := Edit2.Text;
MyNot.FireDate := Now + TimeEdit1.Time;
NotificationCenter1.ScheduleNotification(MyNot);
Finally
MyNot.DisposeOf;

Я использую Delphi10 Seattle Update1.


person ColdZer0    schedule 24.03.2016    source источник
comment
docwiki.embarcadero.com/RADStudio/Seattle/en/   -  person kami    schedule 24.03.2016
comment
ничего о TimeEdit приятель @kami   -  person ColdZer0    schedule 24.03.2016
comment
Не думайте о TTimeEdit. Думаю, ваша проблема не в этом контроле. Попробуйте использовать, например, myNot.FireDate:=IncSecond(Now, 30);   -  person kami    schedule 24.03.2016
comment
он работает с использованием InSecond, но я не могу запустить уведомление с помощью TimeEdit! @kami   -  person ColdZer0    schedule 24.03.2016
comment
Какое значение вы передаете TimeEdit?   -  person kami    schedule 24.03.2016
comment
MyNot.FireDate := Now + TimeEdit1.Time; @kami   -  person ColdZer0    schedule 24.03.2016
comment
Я вижу это. Я имею в виду ценность внутри TimeEdit1. Что-то вроде 00:05:00. Значение, которое пользователь вводит в этот элемент управления.   -  person kami    schedule 24.03.2016
comment
@kami: И что именно это должно означать для вашего приложения? TTimeEdit представляет собой абсолютное время суток. Вы добавляете это к метке текущего времени. Итак, вы хотите, чтобы уведомление запускалось через 5 минут после текущей даты / времени или вы хотите, чтобы оно запускалось ровно в 12:05 текущей даты? Это две совершенно разные вещи. Итак, чего вы на самом деле пытаетесь достичь? Если вы хотите срабатывать в определенное время определенной даты, посмотрите на такие функции, как EncodeDateTime(), ReplaceTime() и т. Д.   -  person Remy Lebeau    schedule 24.03.2016
comment
@RemyLebeau, это не мое приложение :) Я также думаю, что OP хочет ввести абсолютное время, но этот код работает с относительным.   -  person kami    schedule 24.03.2016


Ответы (1)


Now() возвращает TDateTime, который представляет текущую дату / время часов. Затем вы добавляете введенное пользователем время относительно текущей даты / времени. Например, если пользователь вводит 00:05:00, вы добавите 5 минут к текущей дате / времени.

Если вы хотите, чтобы уведомление запускалось в определенное время текущей даты, используйте функцию Date() вместо функции Now(), чтобы вы добавляли введенное время относительно полуночи (00:00:00am):

MyNot.FireDate := Date + TimeEdit1.Time;

В качестве альтернативы вы можете использовать вместо этого функцию SysUtils.ReplaceTime():

var
  dt: TDateTime;

dt := Date;
ReplaceTime(dt, TimeEdit1.Time);
MyNot.FireDate := dt;

Это дает дополнительное преимущество: вы можете настроить любую дату, которую хотите, например, с помощью функции SysUtils.EncodeDate():

var
  wYear, wMonth, wDay: Word;
  dt: TDateTime;

wYear := ...;
wMonth := ...;
wDay := ...;
dt := EncodeDate(wYear, wMonth, wDay) + TimeEdit1.Time;
MyNot.FireDate := dt;

Or:

var
  wYear, wMonth, wDay: Word;
  dt: TDateTime;

wYear := ...;
wMonth := ...;
wDay := ...;
dt := EncodeDate(wYear, wMonth, wDay);
ReplaceTime(dt, TimeEdit1.Time);
MyNot.FireDate := dt;
person Remy Lebeau    schedule 24.03.2016
comment
Большое спасибо, дружище, отлично. Не могли бы Вы проверить мой другой пост [stackoverflow.com/questions/35963244/, еще раз спасибо - person ColdZer0; 26.03.2016