Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 02-12-2009
gandalf85 gandalf85 is offline
Miembro
 
Registrado: dic 2009
Posts: 11
Poder: 0
gandalf85 Va por buen camino
Cool 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
Responder Con Cita
  #2  
Antiguo 02-12-2009
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Creo que necesitas: now
http://www.delphibasics.co.uk/RTL.asp?Name=Now
Responder Con Cita
  #3  
Antiguo 02-12-2009
Avatar de bosster_018
bosster_018 bosster_018 is offline
Miembro
 
Registrado: nov 2009
Ubicación: Bolivia
Posts: 127
Poder: 15
bosster_018 Va por buen camino
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
Responder Con Cita
  #4  
Antiguo 02-12-2009
gandalf85 gandalf85 is offline
Miembro
 
Registrado: dic 2009
Posts: 11
Poder: 0
gandalf85 Va por buen camino
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
Responder Con Cita
  #5  
Antiguo 04-12-2009
Avatar de bosster_018
bosster_018 bosster_018 is offline
Miembro
 
Registrado: nov 2009
Ubicación: Bolivia
Posts: 127
Poder: 15
bosster_018 Va por buen camino
No entiendo

Todavía soy novato, por lo tanto no te entendí muy bien...

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 para que otras personas más avanzadas lo vean y te respondan correctamente

Última edición por bosster_018 fecha: 04-12-2009 a las 17:52:25.
Responder Con Cita
  #6  
Antiguo 04-12-2009
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por gandalf85 Ver Mensaje
[..]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.
Responder Con Cita
  #7  
Antiguo 05-12-2009
gandalf85 gandalf85 is offline
Miembro
 
Registrado: dic 2009
Posts: 11
Poder: 0
gandalf85 Va por buen camino
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
Responder Con Cita
  #8  
Antiguo 06-12-2009
Avatar de bosster_018
bosster_018 bosster_018 is offline
Miembro
 
Registrado: nov 2009
Ubicación: Bolivia
Posts: 127
Poder: 15
bosster_018 Va por buen camino
No hace falta probar

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

Saludos
Responder Con Cita
  #9  
Antiguo 06-12-2009
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
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 .
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Cambiar fecha y hora de windows emeceuy API de Windows 5 16-10-2010 09:09:20
Hora del Sistema (Bios) no de Windows zfer Varios 13 11-08-2006 23:16:53
Cachar mensaje de windows EITB API de Windows 2 03-01-2005 18:01:07
Evitar cambio de hora en Windows? danytorres Varios 3 24-01-2004 20:44:37
Que mensaje envia windows??? jhonny API de Windows 4 10-09-2003 02:51:12


La franja horaria es GMT +2. Ahora son las 20:50:10.


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
Copyright 1996-2007 Club Delphi