Ver Mensaje Individual
  #4  
Antiguo 17-09-2012
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.210
Reputación: 22
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Una alternativa a la expuesta por Caral es la siguiente:

Dado que las 24h están dentro del rango del intervalo de un Timer, la estrategia puede ser calcular los milisegundos restantes desde el momento de poner en marcha el "despertador" hasta la hora a "despertar". Si luego seguimos deseando que cada 24h reaparezca el evento, pues ajustamos el timer a un intervalo de 24*3600*1000.

Código Delphi [-]
procedure TForm3.Timer1Timer(Sender: TObject);
begin
  Timer1.Interval:= 86400000;   //24 horas
  Beep;  
  Label1.Caption:= 'A despertar';
end;

procedure TForm3.Button1Click(Sender: TObject);
var
  msec: integer;
  h: Extended;
begin
  h:= DateTimePicker1.Time - Time;
  h:= h-Floor(h);
  Timer1.Interval:= Floor(h*86400000);
end;

Este sistema sólo ejecuta una vez el OnTimer.
Se debe tener en cuenta que si se apaga el PC o se cierra el programa, la cuenta se pierde... con lo que se debería guardar la hora "a despertar" en un archivo para recalcular la cuenta en ese caso.

Otra solución puede pasar por programar una "tarea programada" con API desde código.


Saludos.

Última edición por escafandra fecha: 17-09-2012 a las 01:48:36.
Responder Con Cita