Comparar duas horas diferentes
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.
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
Curtidas 0
Respostas
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
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
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.
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
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