![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Будильник [D7, WinXP]
Quattro © (2005-07-20 01:59:00)Ещё раз добрый день!....вот ещё вопрос возник...в МаскЭдит ставишь некое время...как только это время наступило происходят некие действия....на форме Таймер, МаскЭдит, и кнопка...почему то некие действия не хотят происходить=)...теряюсь в догадках.=)..прошу вашей консультации..вот то что я написал...
var
s:TDateTime;
procedure TForm1.Timer1Timer(Sender: TObject);
var
SysTime:TDateTime;
begin
Label1.Caption:='Текущее время : '+ TimeToStr(Now);
SysTime:=Time;
if s = SysTime then
begin
Label2.Caption:='Иц воркинг!';
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
s:=StrToTime(MaskEdit1.Text);
end;
Quattro (2005-07-20 02:42:00) [1]Господа!!Большое вам спасибо!!=))
Defunct (2005-07-20 02:27:00) [2]> Quattro © (20.07.05 01:59)
и никогда не получится.
Минимальный квант системного времени равен 10ms (см Рихтера), в системе туева куча потоков, которые работают разделяю процессорное время на равне с вашим потоком, поэтому нет никакой гарантии, что в заданное вами время, будет выполняться именно ваш поток. Следовательно, будильник должен проверять время на БОЛЬШЕ РАВНО, а НЕНА РАВЕНСТВО
if SysTime >=S then
Label2.Caption:='thinking's good';
Джо (2005-07-20 02:26:00) [3]А нафига с текстом сравнивать?...
Бросаешь на форму:
Button1,
DateTimePicker1,
Timer1.
procedure TForm1.FormCreate(Sender: TObject);
begin
Timer1.Enabled := False;
DateTimePicker1.Kind := dtkTime;
DateTimePicker1.DateTime := Now;
Button1.Caption := 'Start'
end;
...
procedure TForm1.Button1Click(Sender: TObject);
begin
// запускаем/останавливаем таймер
Timer1.Enabled := not Timer1.Enabled;
// надпись на кнопке в зависимости от состояния
if Timer1.Enabled then
Button1.Caption := 'Stop'
else
Button1.Caption := 'Start';
end;
...
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if Now>=DateTimePicker1.DateTime then
begin
Timer1.Enabled := False; // выключим во избежание двойного срабатывания
ShowMessage ('Alarm!');
end;
end;
Quattro (2005-07-20 02:24:00) [4]2alex-drob о чудо!!заработало....а не мог бы кратенько расказать..почему в первоначальном ваинте не работало??
alex-drob (2005-07-20 02:02:00) [5]Попробуй так:
if timetostr(s)= timetostr(SysTime) then
Должно получится.