Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Mensaje de Windows con la hora (https://www.clubdelphi.com/foros/showthread.php?t=65270)

gandalf85 02-12-2009 01:12:58

Mensaje de Windows con la hora
 
Hola a toda la comunidad Delphi.

Mi pregunta es la siguiente:
¿Hay alguna forma de recibir un mensaje de notificación de windows en Delphi con la hora y la fecha del sistema?

Así no tengo que estar continuamente preguntándole al Sistema Operativo por la hora y la fecha. Sino capturar un mensaje que el propio Windows mande a las aplicaciones con estos datos.


Es decir quiero sustituir estas funciones por el mensaje que reciba de Windows

function TReloj.Get_Fecha: string;
var Anio,Mes,Dia:word;
begin
DecodeDate(Date,Anio,Mes,Dia);
Result:= Dia+Mes+Anio);
end;

function TReloj.Get_Hora: string;
var h,m,s,ms:word;
begin
DecodeTime(Time,h,m,s,ms);
Result:= h+m+s;
end;

Si no hay ninguna forma abra que seguir preguntándosela y decodificándola

Gracias por adelantado

Casimiro Notevi 02-12-2009 02:02:38

Creo que necesitas: now
http://www.delphibasics.co.uk/RTL.asp?Name=Now

bosster_018 02-12-2009 02:32:27

No entiendo muy bien
 
No sé si hay una opción donde Windows inserte automñaticamente la hora en la que envia un mensaje.... Pero puedes hacerlo tu mismo.
Como te dijo Casimiro, debes usar la función "Now" que tiene implementada Delphi.
Ejemplo que pongo en un botón:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  Fecha : TDateTime;
  Hora : String;
begin
  //Agregando fecha
  Fecha:= Now;
  //Agregando la hora
  Hora:= TimeToStr(Now);
  ShowMessage('Mensaje de windows' + #13#10 + Hora + #13#10 + DateToStr(Fecha));
end;

Espero que te sirva aunque no entendí bien la pregunta :p

gandalf85 02-12-2009 11:45:21

A ver si me explico mejor
 
Gracias Casimiro y bosster_018 pero no es exactamente eso lo que estoy buscando.

Lo que quiero decir es, que al igual que existe el paso de mensajes dentro de una aplicación
Por Ejemplo: Cuando Tiene Foco, Cuando se Hace DobleClick Izquierdo/Derecho…etc

Código Delphi [-]
procedure TieneFoco(var Message:TWMSetFocus);message WM_SETFOCUS;
procedure DCI (var m:TWMMouse);message WM_LBUTTONDBLCLK;
procedure DCD (var m:TWMMouse);message WM_RBUTTONDBLCLK;

Entonces mi pregunta es que igual que existen estos mensajes, si Windows tiene algún mensaje en el que informe a las aplicaciones con la hora y fecha del Sistema para no tener que preguntarle cada segundo.

Porque hasta ahora yo metía el código dentro de un Timer poniéndole de intervalo 1000 para que se ejecute cada segundo; por lo que en el panel1 tengo la hora actualizada y en el panel2 la fecha. Pero estamos pidiendole todo el rato al SO que nos diga la hora y la fecha

Código Delphi [-]
procedure TForm1.Timer1Timer(Sender: TObject);
var
  Fecha : TDateTime;
  Hora : String;
begin
  Fecha:= Now;
  Hora:= TimeToStr(Now);
  Panel1.Caption:=Hora;
  Panel2.Caption:=DateToStr(Fecha);
end;

De todas formas gracias porque no conocía la función Now y siempre lo hacia con DecodeTime y DecodeDate

Pero si Windows mandaría mensajes a las Aplicaciones con estos datos podríamos evitar poner el Timer y tan solo tendríamos que capturar ese mensaje

bosster_018 04-12-2009 17:45:44

No entiendo
 
Todavía soy novato, por lo tanto no te entendí muy bien... :p

Osea... ¿No quieres utilizar el Timer que tiene Delphi?

Cita:

Empezado por gandalf85:
Pero si Windows mandaría mensajes a las Aplicaciones con estos datos podríamos evitar poner el Timer
y tan solo tendríamos que capturar ese mensaje
Osea quieres evitarte poner varios Timer para realizar sólo un procedimiento...
Si fuera así puede servirte la función "SetTimer" que se ejecuta en modo consola y puede ser usada al igual que un Timer:
Por ejemplo para llamar a un procedimiento se puede usar de esta manera:

Código Delphi [-]
procedure Mensaje;
begin
  ShowMessage('hola');
end;

{Con el SetTimer llamamos al procedimiento cada x segundos, en este caso cada 3 segundos
(como el timer, los segundos se esecriben como milisegundos)}
begin
  SetTimer(0, 0, 3000, @Mensaje);
end.
{Nota importante: como podemos ver la funcion SetTimer se lo coloca al final de la unidad,
pero antes de escribir un Begin en este}

Como te dije apenas soy un novato, por lo que esta respuesta puede no ser la correcta.

Posd: Por lo menos reviví el post :rolleyes: para que otras personas más avanzadas lo vean y te respondan correctamente :p

Casimiro Notevi 04-12-2009 20:19:01

Cita:

Empezado por gandalf85 (Mensaje 347950)
[..]Pero si Windows mandaría mensajes a las Aplicaciones con estos datos podríamos evitar poner el Timer y tan solo tendríamos que capturar ese mensaje

Que yo sepa (con mis escasos conocimientos), no creo que windows esté enviando mensajes de la hora que es.

gandalf85 05-12-2009 02:57:38

Gracias de nuevo Casimiro y bosster_018

bosster_018 me apunto el ejemplo de la función SetTimer, igual alguna vez me hace falta para llamar a un procedimiento sin usar el componente Timer.
He probado el ejemplo y cumple su función de “Timer”

Cita:

Osea... ¿No quieres utilizar el Timer que tiene Delphi?
No es que no quiera utilizar el Timer de Delphi, sino que según tengo entendido, el Timer consume mucha CPU al estar ejecutándose continuamente, sobretodo en intervalos pequeños
Ahora tendré que probar el Timer y el SetTimer haber cual consume menos y así usar el que mejor se adapte para según que casos

Cita:

Que yo sepa (con mis escasos conocimientos), no creo que Windows esté enviando mensajes de la hora que es
Pues entonces abra que poner el Timer y que sea Delphi quien pregunte al Sistema Operativo

bosster_018 06-12-2009 03:05:47

No hace falta probar
 
Como te dije, la función Settimer funciona en "modo consola" (osea un poquito "pasado de moda :rolleyes:") por lo que el consumo de memoria es mínimo.

Saludos

Lepe 06-12-2009 11:05:01

No reinventar la rueda....


TTimer lo que hace es encapsular las llamadas a la API SetTimer, por tanto, es exactamente lo mismo usar un TTimer de delphi que usar la API SetTimer.

Vale que, puedes ahorrar algunos recursos usando tú mismo SetTimer, pero en mi humilde opinión, la sobrecarga al usar TTimer es mínima.


Como se vé claramente, es API de windows, no tiene nada que ver con "modo consola" ni "modas", mirad el código fuente del TTimer por favor ;).


La franja horaria es GMT +2. Ahora son las 22:13:58.

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