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 23-08-2010
Avatar de jafera
jafera jafera is offline
Miembro
 
Registrado: may 2007
Ubicación: Llagostera (Girona)
Posts: 582
Poder: 17
jafera Va por buen camino
Fecha de compilacion

Hola a todos.

Tengo una duda con fechas.

Como puedo obtener la fecha de compilacion o de build de un ejecutable?

Quiero poner esta fecha en un formulario AbouBox en el que ya tengo puesta la versión con un GetAppVersion

Saludos

Josep
Responder Con Cita
  #2  
Antiguo 23-08-2010
luisdevis luisdevis is offline
Miembro
 
Registrado: mar 2004
Posts: 32
Poder: 0
luisdevis Va por buen camino
Prueba este código : Usa el Unit Windows

Function TForm1.DaVersion : String;
{Se pueden pedir los siguientes datos:
CompanyName
FileDescription
FileVersion
InternalName
LegalCopyright
OriginalFilename
ProductName
ProductVersion
}

type
PaLeerBuffer = array [0..MAX_PATH] of char;

var
Size, Size2 : DWord;
Pt, Pt2, Pt3 : Pointer;
Mensa,Idioma : string;
begin

Size := GetFileVersionInfoSize(PChar (Application.Exename), Size2);
if Size > 0 then
begin
GetMem (Pt, Size);
GetFileVersionInfo (PChar (ParamStr (0)), 0, Size, Pt);
VerQueryValue( Pt, '\VarFileInfo\Translation',Pt2, Size2);
Idioma:=IntToHex( DWord(Pt2^) ,8 );
Idioma:=Copy(Idioma,5,4)+Copy(Idioma,1,4);

VerQueryValue( Pt,Pchar('\StringFileInfo\'+Idioma+'\'+'FileVersion'),Pt2, Size2);
if Size2 > 0 then mensa := mensa +'Version: '+Copy(PaLeerBuffer(Pt2^),1,Size2)+#13+#13;
Result := Copy(PaLeerBuffer(Pt2^),1,Size2);
FreeMem (Pt);
end;
end;
Responder Con Cita
  #3  
Antiguo 23-08-2010
Avatar de jafera
jafera jafera is offline
Miembro
 
Registrado: may 2007
Ubicación: Llagostera (Girona)
Posts: 582
Poder: 17
jafera Va por buen camino
Gracias por la respuesta.
Esta opcion ya la habia visto, pero la implementé ya que no veo por ningun lado es la variable con la fecha que es loq ue me interesa.

Saludo

Josep
Responder Con Cita
  #4  
Antiguo 23-08-2010
Avatar de MAXIUM
MAXIUM MAXIUM is offline
Miembro
 
Registrado: may 2005
Posts: 1.488
Poder: 20
MAXIUM Va camino a la fama
Buscalo en esta sección, la respuesta ya esta.
Responder Con Cita
  #5  
Antiguo 23-08-2010
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola jafera.

Probá de este modo:
Código Delphi [-]
function FileGetDateTime(Nombre: string): TDateTime;
var
  Hnd: Integer;
begin
  Hnd := FileOpen(Nombre, 0);
  try
    Result:= FileDateToDateTime(FileGetDate(Hnd));
  finally
    FileClose(Hnd);
  end;
end;

Llamada de ejemplo:
Código Delphi [-]
var
  FechaDT: TDateTime;
  FechaST: string; 
begin
  FechaDT:= FileGetDateTime('C:\Windows\System32\ChkDsk.exe');
  FechaST:= DateToStr(Fecha); // fecha 
end;

Saludos.

Última edición por ecfisa fecha: 23-08-2010 a las 20:51:20.
Responder Con Cita
  #6  
Antiguo 25-08-2010
Avatar de jafera
jafera jafera is offline
Miembro
 
Registrado: may 2007
Ubicación: Llagostera (Girona)
Posts: 582
Poder: 17
jafera Va por buen camino
Hola, estoy intentando implementar la funcion que me pasasteis y me lanza este error:

[Error] ModulDades.pas(192): Declaration of 'filegetdatetime' differs from previous declaration

En private declaro la funcion

function FilegetdateTime : TDateTime;

Luego coloco la funcion y me lanza este error.

Que puedo hacer mal?

Gracias

Josep
Responder Con Cita
  #7  
Antiguo 25-08-2010
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Jafera.

Si usás la funcion tál como está no te tendría que dar ese mensaje.

Pero si la querés declarar como privada de un Form, seria:
Código Delphi [-]
 ....
 private
    function FileGetDateTime(Nombre: string): TDateTime;
 end;

implementation
...
function TForm1.FileGetDateTime(Nombre: string): TDateTime;
...

El por qué del error es fácil de ver si comparas:
Cita:
function FilegetdateTime : TDateTime;
Cita:
function FileGetDateTime(Nombre: string): TDateTime;
Indudablemente en la primera falta la declaración del parámetro 'Nombre'.

Saludos.

Última edición por ecfisa fecha: 25-08-2010 a las 20:19:51.
Responder Con Cita
  #8  
Antiguo 26-08-2010
Avatar de Lord Delfos
Lord Delfos Lord Delfos is offline
Miembro
 
Registrado: ene 2008
Ubicación: Tandil, Argentina
Posts: 558
Poder: 17
Lord Delfos Va por buen camino
Para sumar algo:

Este tema lo consulté una vez y llegué a la siguiente solución. A mí me ha funcionado de mil maravillas, pero requiere instalar las CNWizards (que de todas maneras son muy recomendables).

http://www.clubdelphi.com/foros/showthread.php?t=65520

Saludongons.
Responder Con Cita
  #9  
Antiguo 26-08-2010
Avatar de jafera
jafera jafera is offline
Miembro
 
Registrado: may 2007
Ubicación: Llagostera (Girona)
Posts: 582
Poder: 17
jafera Va por buen camino
Ok ecfisa, era un problema de colocacion del código en los forms.

Con el ejemplo que pusiste del chkdsk funciona de perlas pero si le pongo la ruta de mi exe me da un error:

Debugger Exception Notification
---------------------------
Project Bombers.exe raised exception class EConvertError with message 'Invalid argument to date encode'. Process stopped. Use Step or Run to continue.
---------------------------
OK Help

Que puede ser?

Lord_Delfos, vi tu codigo, tengo CnPack instaldo pero intente seguir el tutorial y no tuve narices a sacarlo en mi aplicación.

Es que hay muchas cosas que aun se me escapan, cree el script, con su .pas, etc pero luego no consegui ejecutarlo de ninguna manera.

Creo que se quedó algo en el tintero. Volveré a intentarlo de nuevo.

Gracias a todos

Josep
Responder Con Cita
  #10  
Antiguo 26-08-2010
Avatar de Lord Delfos
Lord Delfos Lord Delfos is offline
Miembro
 
Registrado: ene 2008
Ubicación: Tandil, Argentina
Posts: 558
Poder: 17
Lord Delfos Va por buen camino
Para que corra hay que marcar la casilla fmBeforeCompile y listo. Uno no corre el script, se corre él solo al compilar.
Responder Con Cita
  #11  
Antiguo 26-08-2010
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por jafera Ver Mensaje
Ok ecfisa, era un problema de colocacion del código en los forms.

Con el ejemplo que pusiste del chkdsk funciona de perlas pero si le pongo la ruta de mi exe me da un error:

Debugger Exception Notification
---------------------------
Project Bombers.exe raised exception class EConvertError with message 'Invalid argument to date encode'. Process stopped. Use Step or Run to continue.
---------------------------
OK Help

Que puede ser?
Hola Jafera.


¿ Podés enviar el código donde se genéra el error ?

Saludos.

Última edición por ecfisa fecha: 26-08-2010 a las 17:08:31.
Responder Con Cita
  #12  
Antiguo 26-08-2010
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola de nuevo Jafera.

No es necesario que pongas el código, ya ví donde está el problema.

El procedimiento llama a FileOpen para obtener el Handle:
Código Delphi [-]
 Hnd := FileOpen(Nombre, 0);
E intenta abrir un archivo (el que se está ejecutando) que yá está abierto. ( Perdón por la obviedad... )

Así que no te va a servir para obtener el handle de la aplicación que está en ejecución.

Voy a investigar un poco a ver si se puede tomar algún atajo...

Si logro algo te comento.

Saludos.
Responder Con Cita
  #13  
Antiguo 26-08-2010
Avatar de jafera
jafera jafera is offline
Miembro
 
Registrado: may 2007
Ubicación: Llagostera (Girona)
Posts: 582
Poder: 17
jafera Va por buen camino
Gracias ecfisa.

Ahora que ya habia aprendido a colocar la funcion en su sitio y que me las daba felices pues me sale esto, jejeje.

Gracias por vuestras respuestas y si sabemos como obtener los datos del fichero "abierto" pues perfecto, sino, intentaremos la solucion de Lord_Delfos la cual me parece correcta pero que no supe implementar en mi aplicacion todo y el mini tutorial que colgo.

Igual no llego a más y en vez de Delphi debo volver al antiguo Basic con sus lineas 10.20.30...., bromas a parte me encantan los retos y como soy obstinado no parare hasta sacarlo.

Josep
Responder Con Cita
  #14  
Antiguo 26-08-2010
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Jafera.

Estaba seguro se podría lograr, solo había que saber donde buscar y es en TWin32FindData...

Probá este código:
Código Delphi [-]
uses Windows;

function GetFileDate(Nombre: string): TDateTime;
var
  SR: TSearchRec;
  LocalFileTime: TFileTime;
  SystemTime: TSystemTime;
begin
  if FindFirst(Nombre, $FF, SR) = 0 then
  begin
    FileTimeToLocalFileTime(SR.FindData.ftCreationTime, LocalFileTime);
    FileTimeToSystemTime(LocalFileTime, SystemTime) ;
    Result:= SystemTimeToDateTime(SystemTime);
  end;
end;

Ejemplos de llamada:
Código Delphi [-]
var
  dt: TDateTime;
begin
   dt:= GetFileDate(ParamStr(0));
   ShowMessage(DateToStr(GetFileDate(ParamStr(0))));
end;

Saludos.

Última edición por ecfisa fecha: 26-08-2010 a las 23:05:41.
Responder Con Cita
  #15  
Antiguo 26-08-2010
Avatar de jafera
jafera jafera is offline
Miembro
 
Registrado: may 2007
Ubicación: Llagostera (Girona)
Posts: 582
Poder: 17
jafera Va por buen camino
Ahora si que funciona, solo que se debe borrar el exe antes de hacer un nuevo build para que no guarde la ultima fecha de creacion, pero esto es lo de menos.

Gracias

Josep
Responder Con Cita
  #16  
Antiguo 27-08-2010
Avatar de jafera
jafera jafera is offline
Miembro
 
Registrado: may 2007
Ubicación: Llagostera (Girona)
Posts: 582
Poder: 17
jafera Va por buen camino
Lo he solucionado cambiando un parámetro el la linea siguiente:

Código Delphi [-]
 
FileTimeToLocalFileTime(SR.FindData.ftLastWriteTime, LocalFileTime);

Asi accedo a la fecha de ultima modificacion.

Ademas la variable dt y la asignacion del valor dt no son necesarios, funciona pasando directamente el valor a la etiqueta o edit que tengamos en el form

Código Delphi [-]
Label3.Caption:='Compilat el '+(DateToStr(GetFileDate(ParamStr(0))));

Saludos

Josep

Última edición por jafera fecha: 27-08-2010 a las 09:52:47.
Responder Con Cita
  #17  
Antiguo 28-08-2010
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por jafera Ver Mensaje
Ademas la variable dt y la asignacion del valor dt no son necesarios, funciona pasando directamente el valor a la etiqueta o edit que tengamos en el form
¿ Así como te puse en los ejemplos de llamada ?
Código Delphi [-]
   ShowMessage(DateToStr(GetFileDate(ParamStr(0))));

Si, sólo hay que cambiar 'ShowMessage()' por 'Label3.Caption:='...

Saludos.

Última edición por ecfisa fecha: 28-08-2010 a las 22:58:43.
Responder Con Cita
  #18  
Antiguo 30-08-2010
Avatar de jafera
jafera jafera is offline
Miembro
 
Registrado: may 2007
Ubicación: Llagostera (Girona)
Posts: 582
Poder: 17
jafera Va por buen camino
Hola a todos de nuevo.

Lord_Delfos, ya implementé el codigo generado con el CnWizards, funciona de p.m. es justo lo que quería.

Me costó un poco entender el tema del script, me faltaba compilarlo para obtener el .inc y una vez comprendido, pues a funcionar.

Como decimos por aquí, una vez le vez el trasero sabes que es gallina.

Saludos a todos y muchas gracias, sois unos profesores esplendidos.

Ahora me quiero liar con el gnu gettext para poder usar mi aplicacion en castellano y catalan, algun tutorial para delphi_adictos_torpones como yo?

Gracias por adelantado

Josep
Responder Con Cita
  #19  
Antiguo 30-08-2010
Avatar de Lord Delfos
Lord Delfos Lord Delfos is offline
Miembro
 
Registrado: ene 2008
Ubicación: Tandil, Argentina
Posts: 558
Poder: 17
Lord Delfos Va por buen camino
De nada.

Cita:
Ahora me quiero liar con el gnu gettext para poder usar mi aplicacion en castellano y catalan, algun tutorial para delphi_adictos_torpones como yo?
Ni idea.

Cita:
Empezado por jafera Ver Mensaje
Como decimos por aquí, una vez le vez el trasero sabes que es gallina.
jajaajaja...
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
¿Directivas compilacion? drykea Varios 1 03-05-2007 14:51:15
Compilación de componentes Velia Varios 1 06-09-2006 06:00:31
Errores De CompilaciÓn nax Varios 1 20-08-2005 07:54:24
Error Compilaciòn amesoft Varios 1 07-08-2005 19:09:23
Velocidad de compilacion kalimero Varios 2 10-11-2004 14:06:12


La franja horaria es GMT +2. Ahora son las 06:33:29.


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