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; 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.