Comparar duas horas diferentes

Delphi

29/08/2006

Moçada, preciso comparar uma hora em um TDatetimepicker com a hora do sistema (time). Tenho que disparar um evento quando as horas forem iguais, para isso uso um TTimer. Mas acontece que mesmo quando são iguais, o evento não dispara. Segue o código:


procedure TForm1.Timer1Timer(Sender: TObject);
begin
edit4.text := timetostr(time);
if checkbox1.Checked then begin
if datetimepicker1.Time = time then showmessage(´aaa´);
end;
end;

Obs.: o checkbox1 está checado.


...fabinho

...fabinho

Curtidas 0

Respostas

Marco Salles

Marco Salles

29/08/2006

Mas acontece que mesmo quando são iguais, o evento não dispara. Segue o código:


Acho voce precisa de um intervalo para isto ... este intervalo depende de como esta configurado a propriedade intervalo do seu Timer

[b:004a566887]Exemplo para Interval = 100 do Componente Timer1[/b:004a566887]

procedure TForm1.Timer1Timer(Sender: TObject);
const
Intervalo=0.000001; //valor que deve ser ajustado
begin
edit4.text := timetostr(time);
if checkbox1.Checked then begin
if (Frac(datetimepicker1.Time) + Intervalo > time)and
   (Frac(datetimepicker1.Time) - Intervalo < time)
 then
   showmessage(´aaa´);
end;


P:S Para compara time com datetimepicker1.Time voce deve usar a parte fracionaria de datetimepicker1.Time

P:S voce poderia criar um componente com esta caracteirstica... Sugiro
tentar ler o artigo do micheus sobre um componente : ´Cronometro´ que talves voce possa adaptar para disparar um evento , para uma determinada Hora.. É bem fácil , é so seguir os principios

Boa sorte...


GOSTEI 0
Marco Salles

Marco Salles

29/08/2006

Mas acontece que mesmo quando são iguais, o evento não dispara. Segue o código:


Acho voce precisa de um intervalo para isto ... este intervalo depende de como esta configurado a propriedade intervalo do seu Timer

[b:eb2c2b633f]Exemplo para Interval = 100 do Componente Timer1[/b:eb2c2b633f]

procedure TForm1.Timer1Timer(Sender: TObject);
const
Intervalo=0.000001; //valor que deve ser ajustado
begin
edit4.text := timetostr(time);
if checkbox1.Checked then begin
if (Frac(datetimepicker1.Time) + Intervalo > time)and
   (Frac(datetimepicker1.Time) - Intervalo < time)
 then
   showmessage(´aaa´);
end;


P:S Para compara time com datetimepicker1.Time voce deve usar a parte fracionaria de datetimepicker1.Time

P:S voce poderia criar um componente com esta caracteirstica... Sugiro
tentar ler o artigo do micheus sobre um componente : ´Cronometro´ que talves voce possa adaptar para disparar um evento , para uma determinada Hora.. É bem fácil , é so seguir os principios

Boa sorte...


GOSTEI 0
...fabinho

...fabinho

29/08/2006

[quote:4cafe4f48d=´Marco Salles´]
const
Intervalo=0.000001; //valor que deve ser ajustado
[/quote:4cafe4f48d]


Obrigado, deu certo! Porém, ele disparava o evento duas vezes seguidas, então diminuí o intervalo acrecentando um zero. Assim, deu certinho.

intervalo = 0.0000001;


Muito obrigado pelo apoio, caro Marco.


GOSTEI 0
Marco Salles

Marco Salles

29/08/2006

Obrigado, deu certo! Porém, ele disparava o evento duas vezes seguidas, então diminuí o intervalo acrecentando um zero. Assim, deu certinho.


melhor ainda é desabilitar o timer do Componente , quando satisfazer a condição... Pq que que tem que continuar com o teste ele não sera mais verdadeiro ?????

const 
Intervalo=0.000001; //valor que deve ser ajustado 
begin 
edit4.text := timetostr(time); 
if checkbox1.Checked then begin 
if (Frac(datetimepicker1.Time) + Intervalo > time)and 
   (Frac(datetimepicker1.Time) - Intervalo < time) 
 then 
  begin
  Timer1.enabled:=False; //desabilita... oteste não é mais executado
   showmessage(´aaa´); 
  end;
end;


é claro que em outra situação , <depende da sua lógica> , voce habilita novamente o Timer....

[b:76f84322eb]mas melhor mesmo e fazer com componentes[/b:76f84322eb]-->>>
´Sugiro tentar ler o artigo do micheus sobre um componente : ´



GOSTEI 0
POSTAR