Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Agenda, Recordatorio, Citas, Tareas (https://www.clubdelphi.com/foros/showthread.php?t=15577)

aurafern 27-10-2004 23:40:05

Agenda, Recordatorio, Citas, Tareas
 
Por favor, alguien que haya desarrollado algun modelo de aplicaciones tipo Agenda, Recordatorio, Citas, Administrador de Tareas.
O alguien que tenga idea de cómo desarrollar un programa que me permita ingresar tareas que tengan que ejecutarse (en un sistema o manualmente): una sóla vez (fecha y hora), todos los días a la misma hora, semanalmente, mensualmente,etc..y que suene una alarma para recordarme que debo hacer la tarea que acabo de registrar o que abra una pantalla para recordarmelo,etc
(como el administrador de tareas del outlook).

En fin, no se si me expliqué bien. Pero, el punto es que necesito desarrollar un software en delphi y Firebird que me permita registrar tareas para ser recordadas el día y a la hora correcta, segun los parámetros que el usuario configure. Mi duda mas grande es, como hacer para que el programa que voy a desarrollar se entere que llegó la fecha y la hora estipulada por el usuario, y que por tal razón debe sonar una alarma o mostrar una pantalla recordándome el evento :confused:

Muchas gracias, por la atención prestada!! :D

roman 28-10-2004 00:17:54

Una idea:

Para empezar definiria dos tablas

tareas = (fecha, hora, tipo)
tipos = (volatil, diaria, semanal, mensual, anual, secular)

Cada vez que toque el turno de ejecutarse una tarea examinas su tipo.
  • Si es volátil (sólo se realiza una vez) ejecutas la tarea y borras el registro.
  • Si es diaria ejecutas la tarea y actualizas el campo fecha sumándole un día.
  • Si es semanal ejecutas la tarea y actualizas el campo fecha sumándole una semana.
  • etc.
Cada x tiempo consultas la base:

Código SQL [-]
select * from tareas
where
  fecha = today() and
  hora >= now()

La sintaxis exacta te la dejo de tarea (primera tarea a programar :p )

Las tareas del día actual que ya se hayan realizado no entrarán dentro de esta selección pues ya les actualizaste la fecha, de manera que la selección te devolverá las tareas más próximas al momento de la consulta que aún no se han realizado.

La precisión será mayor mientras más frecuentemente consultes al servidor. Si consultas, digamos, cada cinco minutos, cabrá la posibilidad de que alguna tarea se ejecute con cinco minutos de retraso.

// Saludos

Lepe 28-10-2004 12:21:59

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);
// el 1 indica el identificador de cronometro.
//  programa el crono para 100.000 milisegundos, cuando llegue se ejecutará el 
// procedimiento EventoTimer (la arroba, es porque necesita la direccion del 
// evento).

procedure EventoTimer();
begin
  alarma y ver la siguiente tarea pendiente.
  Killtimer(frmppal.handle,1);// matamos el crono 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" :p

roman 28-10-2004 16:48:33

Hola Lepe,

No entiendo muy bien cuál sería la dinámica de la técnica que describes. Ten en cuenta que puedes tener varias tareas a lo largo de un día de manera que la aplicación debe estar ejecutándose todo el tiempo para cualquier tarea posible durante el día, de manera que no alcanzo a entender eso de "ver la tarea más próxima al iniciar la aplicación".

El campo Estado que mencionas, ¿cuál es el objetivo?. Es decir, ¿qué significa que una tarea esté pendiente? ¿Qué aún no toca el turno de realizarla? Pues eso te lo indica la fecha y hora al igual que si ya está pasada. Lo de Finalizada puede tener sentido si de alguna manera el sistema lleva registro no sólo de cuándo llevar a cabo una tarea sino del progreso de la tarea en marcha.

Lo de Eventual en lugar de Volatil pues te doy toda la razón, no se me ocurría ningún término adecuado :D .

// Saludos

Lepe 29-10-2004 13:09:21

Si quiere añadir eso de "Permitir avisar de la tarea con una Antelacion de X minutos", entonces lo lógico a mi parecer, es añadir un nuevo campo llamado FechaCrono (Fecha real de la tarea restando la antelacion elegida).

Cita:

Empezado por roman
no alcanzo a entender eso de "ver la tarea más próxima al iniciar la aplicación".

¿Firebird puede vigilar un campo de tipo fecha para que al llegar la hora informe al programa? :confused:

Yo hice un recordatorio que no usaba Bases de datos, así que tenía que ver la tarea más cercana, lanzar un timer para avisar al usuario, y despues ver la siguiente tarea para establecer de nuevo el timer.
Cita:

La precisión será mayor mientras más frecuentemente consultes al servidor. Si consultas, digamos, cada cinco minutos, cabrá la posibilidad de que alguna tarea se ejecute con cinco minutos de retraso.
Si lanzas un timer, nunca habrá retrasos, y además no tendrás que consultar al servidor. Ésta es mi idea.

Cita:

El campo Estado que mencionas, ¿cuál es el objetivo?.
Tienes razon Roman, pero si añades "avisar con Antelación" lanzar una consulta con la Fecha de Aviso y Antelación para saber si ya ha pasado o está pendiente, puede ser engorrosa, sobre todo si permites avisar con X minutos/horas/dias (distintas unidades de tiempo que tendrás que restar a la fecha de aviso).

O incluyes el Flag Estado, o bien chequeas la FechaCrono.

Yo prefiero añadir un Flag de estado y hacer una consulta por ese flag, en lugar de chequear Fechas y horas. Además, si pides un listado de todas las tareas, puedes imprimir el campo Estado, y de un vistazo, saber cuales han pasado y cuales no. Depende de las opciones que quiera dar al usuario.


Saludos

O.M.A.R 12-06-2007 01:06:01

Tengo un apuro....
 
Disculpa pero soy nuevo en esto de los foros y quisiera saber si me pueden ayudar.....
Es sobre el mismo tema del Recordatorio. Pero yo solo quisiera una pequeña aplicación en la que el programa emita una alarme o un mensaje a la hora que le asigne el usuario, debo usar un Timer y un DateTimerPicker pero en realidad no sé como utilizarlos...
De antemano muchas gracias...
y Disculpa la molestia...

Lepe 12-06-2007 10:57:34

Bienvenido al foro OMAR.

Tienes mucha documentación, busca en el foro por Timer, seguro que encontrarás código acerca de él. Busca tambien por MillisecondsBetween que te será de ayuda.

Saludos


La franja horaria es GMT +2. Ahora son las 13:30:35.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi