Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   objeto timer (https://www.clubdelphi.com/foros/showthread.php?t=30758)

Carliviris 17-04-2006 22:18:29

objeto timer
 
como puedo realizar una accion o un evento con el objeto timer?
me explico, lo que deseo hacer es, que despues de una fecha determinada, por ejemplo de hoy a un mes, me realice una accion o me llame una funcion el programa solo.

me entienden??
alguien me ayuda?

alapaco 17-04-2006 22:21:16

Tenes que guardar esa información en algun lado...un archivo, una base de datos, la registry...etc...

Carliviris 17-04-2006 22:25:05

si pero yo no se usar el objeto timer
como hago que la accion se ejecute sola despues de un tiempo determinado?
claro se que tengo que ir guardando

alapaco 17-04-2006 22:34:15

En el único evento que tiene el timer vas preguntado si la fecha actual es mayor o igual que la fecha en que queres que ocurra tal evento, si es asi pones la propiedad Enabled del TTimer en False y ejecutas la acción que querias ejecutar.

Podes poner la propiedad Interval en digamos 60000.-

Carliviris 17-04-2006 22:38:27

voy intentar hacerlo ahora y te comunico el resultado
muchas gracias

Sotrono 17-04-2006 22:38:39

Hola, en el Timer tenes que establecer el intervalo que quieras y despues en el evento OnTimer vas chequeando si estas dentro de los "margenes de accion" :confused: . Si es así, llama a la otra aplicacion o hace lo que vos quieras.
Para manejar la fecha utiliza el procedimiento DecodeDate:
Código Delphi [-]
DecodeDate( Date, Anio, Mes, Dia );

Con el parámetro Date le estas pasando la fecha actual, el procedimiento te va a devolver el año, el numero de mes y día en las variables correspondientes.
Bueno, y despues de ahi tenés que hacer que se fije si esta dentro del margen de dias y si es asi hacer lo que quieras:
Código Delphi [-]
if (Mes = 4) and (Dia in [1..15]) then
  ShowMessage('Hace lo que quieras');

Bueno, espero que te haya servido.

Bytes..

Carliviris 17-04-2006 22:45:34

voy a intentarlo tambien
mil gracias

Carliviris 17-04-2006 22:50:13

la propiedad intervalo vendrian siendo los segundos??

Sotrono 17-04-2006 22:52:44

Cita:

Empezado por Carliviris
la propiedad intervalo vendrian siendo los segundos??

Milisegundos.

alapaco 17-04-2006 22:53:00

Los milisegundos. Fijate que la ayuda de Delphi lo explica bien.

Carliviris 18-04-2006 00:38:21

intente todo lo que uds me dijeron y no me ha funcionado.
Lo que utilice para ejemplo fue un decodetime que me devuelve el tiempo actual.Esto lo hice en el formshow:

Código Delphi [-]
 DecodeTime(Date,horita,minutos,segundos,mili);

y luego puse esto en el ontimer :

Código Delphi [-]
 if (horita = 6) and (minutos = 32) then
      begin
      Enabled := false;
      ShowMessage('esta vaina funciona');
    end;

y llegado el momento de las 6 horas y los 32 minutos no me salio el mensaje esperado. No se si estoy haciendo algo incorrecto.

Que creen ustedes??

Carliviris 18-04-2006 00:39:00

El timer otra vez
 
intente todo lo que uds me dijeron y no me ha funcionado.
Lo que utilice para ejemplo fue un decodetime que me devuelve el tiempo actual.Esto lo hice en el formshow:

Código Delphi [-]
 DecodeTime(Date,horita,minutos,segundos,mili);

y luego puse esto en el ontimer :

Código Delphi [-]
 if (horita = 6) and (minutos = 32) then
      begin
      Enabled := false;
      ShowMessage('esta vaina funciona');
    end;

y llegado el momento de las 6 horas y los 32 minutos no me salio el mensaje esperado. No se si estoy haciendo algo incorrecto.

Que creen ustedes??

Carliviris 18-04-2006 00:51:19

no hay nadie que pueda darme una mano??
pleaseee

Sotrono 18-04-2006 00:53:33

DecodeTime lo tenes que poner dentro del evento del Timer, porque sino las variables horita y minutos siempre van a tener el valor de cuando se inició la aplicación y no se van a modificar en ningun momento.

Sotrono 18-04-2006 00:56:40

Cita:

Empezado por Calviris
no hay nadie que pueda darme una mano??
pleaseee

Tranquilo, solo pasaron 12 minutos. No estamos todo el tiempo pendientes a ver si publican una respuesta o no.

Carliviris 18-04-2006 00:58:38

como kiera man
no me tira el mensaje esperado.
puede ser que algun valor este obstruyendo el proceso?
podria ser el intervalo?

Sotrono 18-04-2006 01:10:43

La propiedad Enabled del Timer esta en true?

Carliviris 18-04-2006 01:12:57

yeah, esta en true por defecto

Sotrono 18-04-2006 01:22:47

El problema es que a DecodeTime le estas pasando como parametro la fecha (Date) en lugar de la hora (Time).
Date te devuelve la fecha.
Time la hora.
Now la fecha y la hora juntos.
Lo tendrias que hacer asi:

Código Delphi [-]
DecodeTime(Time,horita,minutos,segundos,mili);

Carliviris 18-04-2006 01:24:36

amigos, tengo que irme, seguire intentando en mi casa a ver de que manera podria resultar.

si algunos de uds logran dar con la solucion, por favor publiquenla aqui en este tema para ver si puedo continuar con la realizacion de mi sistema.

mil gracias a todos por sus atenciones y por aportar sus conocimientos
nos veremos manana

Carliviris 18-04-2006 01:26:20

ey, estoy intentado lo que me dijiste ahora nuevamente antes de irme

Carliviris 18-04-2006 01:30:04

ey, todavia no me hace nada con el cambio del time por el date

Sotrono 18-04-2006 01:34:34

A mi me funciona. Revisa el formato de hora si es 12 o 24.
Pone un showmessage de algo en el evento del timer para ver si esta funcionando, proba distintas cosas porque deberia funcionarte.

Saludos...

Carliviris 18-04-2006 01:36:10

es 12 el formato de hora

Sotrono 18-04-2006 01:47:17

Proba de la siguiente manera:

Crea una aplicación nueva, agega un Timer.

En el evento OnTimer pone el siguiente codigo:
Código Delphi [-]
procedure TForm1.Timer1Timer(Sender: TObject);
var horita, minutos, segundos, mili : word;
begin
 DecodeTime(Time,horita,minutos,segundos,mili);
 if (horita = 8) and (minutos = 31) then
      begin
      Timer1.Enabled := false;
      ShowMessage('esta vaina funciona');
    end;
end;
Obviamente cambia el 8 y el 31 de la hora y los minutos por los actuales.

En el evento OnCreate del Form pone esto:
Código Delphi [-]
  Timer1.Interval := 1000;
  Timer1.Enabled := true;

Asi tiene que funcionarte.

Carliviris 18-04-2006 01:55:38

seguire intentando en casa
esto no se pk no me resulta
y yo lo estoy haciendo igual que tu
parece que tengo un gato negro cruzao
hasta manana

Carliviris 18-04-2006 15:00:50

Ok nitido
 
el timer me hizo lo que queria, pero sucede que en mi casa el formato de mi compu es de 24 horas y la de aqui es de 12. Entonces, parece que con el formato de 12 tiene algun tipo de problema.

seria entonces que solamente la podria usar en ese formato?? el problema es que en mi pais el formato mas utilizado es de 12 horas, entonces que podria hacer??

Carliviris 18-04-2006 15:13:30

creo que el problema esta en la parte de am y pm en el formato de 12 horas, pk hay que especificarselo pk las horas se repiten tanto de la noche como las del dia. Lo cual eso no sucede en el formato de 24 horas.

Carliviris 19-04-2006 02:54:09

encontre parte de la solucion, que en si fue un error mio:

como esta computadora tiene el formato de 12 horas, entonces cometia el error de poner por ejemplo si eran las 5 de la tarde poner 5:00 pero deberia de poner en si 17:00 porque al parecer, no importa que el formato sea de 12 horas, para referirse a las horas es como si fueran de formato 24.

gracias a todos, sotrono gracias especiales

Lepe 19-04-2006 13:23:39

No he leido a fondo todos los mensaje, espero que esto sirva para algo.

El único problema que hay es que el Interval de un timer sólo puede aceptar un número en milisegundos, que equivale a 9 semanas (dia arriba, día abajo), por tanto:
Código Delphi [-]
uses DateUtils;

FechaAviso:Tdatetime
begin

if fechaAviso > Now then
begin
   if DaysBetween(fechaAviso, now) < 56 then // menos de  nueve semanas
     Timer1.Interval := MillisecondsBetween(fechaAviso, now)
   else 
     Timer1.interval := 55 * 24 * 60 * 60 * 1000
      // ponemos el timer para dentro de 55 días si el ordenador está
     // encendido 24 horas al día... si se apaga todos los días, se puede buscar
    // el cambio de fechas del ordenador y poner el timer en esa fecha. De 
   //  esta forma se chequea cada 24 horas los mensajes pendientes.

  Timer1.Enabled:= true;
end;

Por cierto, usa siempre Tdatetimes poniendo fecha y hora, así puedes hacer los cálculos de fechas y horas correctamente.

Carliviris das muy poca información en el hilo, todavía ni siquiera sé que estas intentando hacer, deberías replantearte el hilo y decir exactamente cuales son los objetivos del programa y como debe funcionar. Si lo hubieses hecho desde un principio, seguro que tendrías respuestas más claras y concisas.


Saludos

Lepe 19-04-2006 13:39:58

Tambien debes tranquilizarte un poquito, yo al menos, solo entro en el foro 1 vez al día, o 2 como mucho, de nada sirve ver mensajes como:
Cita:

ey, estoy intentado lo que me dijiste ahora nuevamente antes de irme
Esto no es un chat, es un foro, y de hecho tiene una guía de estilo que debe respetarse. Si quieres algo más ameno, lee esta otra guia de estilo :D

Por favor, dedica 5 minutos a leerla y tendrás las claves para formular tus preguntas y obtener las respuestas que buscas.

Saludos de nuevo.


La franja horaria es GMT +2. Ahora son las 17:42:13.

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