Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Fecha de compilacion (https://www.clubdelphi.com/foros/showthread.php?t=69508)

jafera 23-08-2010 11:23:10

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

luisdevis 23-08-2010 17:23:20

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;

jafera 23-08-2010 19:14:33

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

MAXIUM 23-08-2010 19:44:00

Buscalo en esta sección, la respuesta ya esta.

ecfisa 23-08-2010 20:44:39

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.

jafera 25-08-2010 18:13:18

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

ecfisa 25-08-2010 20:09:41

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.

Lord Delfos 26-08-2010 03:15:49

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.

jafera 26-08-2010 10:10:59

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

Lord Delfos 26-08-2010 16:42:55

Para que corra hay que marcar la casilla fmBeforeCompile y listo. Uno no corre el script, se corre él solo al compilar.

ecfisa 26-08-2010 16:48:01

Cita:

Empezado por jafera (Mensaje 374622)
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.

ecfisa 26-08-2010 17:29:57

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...:rolleyes:

Si logro algo te comento.

Saludos.

jafera 26-08-2010 19:25:30

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

ecfisa 26-08-2010 22:59:20

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. :)

jafera 26-08-2010 23:34:49

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

jafera 27-08-2010 09:43:42

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

ecfisa 28-08-2010 22:42:55

Cita:

Empezado por jafera (Mensaje 374728)
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.

jafera 30-08-2010 17:02:07

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

Lord Delfos 30-08-2010 17:28:16

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 (Mensaje 374970)
Como decimos por aquí, una vez le vez el trasero sabes que es gallina.

jajaajaja...


La franja horaria es GMT +2. Ahora son las 20:08:43.

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