Al inicio de la aplicación, como dice
Roman, podrías lanzar una cosulta y ver la tarea más proxima, lanzar un Timer (revisa SetTimer y KillTimer de la unidad Windows) y listo. Por supuesto, cuando se modifique una fecha de la tarea, tendrías que revisar ese Timer y cambiarlo.
Código Delphi
[-]
SetTimer(frmppal.Handle,1, 100000, @EventoTimer);
procedure EventoTimer();
begin
alarma y ver la siguiente tarea pendiente.
Killtimer(frmppal.handle,1);end;
Si no recuerdo mal, SetTimer te permite programar el cronometro para 9 semanas (si dejas el ordenador encendido tanto tiempo....)
Tambien añadiría: Avisar con X minutos/dias/meses/años de antelación.
En la tabla Tareas, yo añadiria un campo Estado (Pendiente, Pasada, Finalizada) para mostrar al usuario en un grid las tareas de forma personalizada.
PD: En lugar de "volatil" yo usaria "Eventual"