Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.11.12;
Скачать: CL | DM;

Вниз

Автоматическое сохранение даты и времени компиляции в программе   Найти похожие ветки 

 
jTommy   (2006-09-30 16:21) [0]

День добрый.
Подскажите, возможно-ли сделать так, чтобы во время компиляции дельфи сохраняла дату и время этого момента?

Посмотрел информацию в PE заголовке получаемого exe-файла, по непонятным причинам там всегда одна и та же дата (20 Jun 1992).


 
Джо ©   (2006-09-30 16:38) [1]

Я решал задачу написанием нехитрого эксперта IDE.

Вот текст эксперта:


{
 AddInNotifier, срабатывающий при компиляции проекта.
 Помещает в каталог с главным файлом проекта файл CompileDateTime.inc
 с объявлением констант, содержащих актуальную дату и время компиляции проекта.
 
 E-mail: sergeybox@gmail.com
}

unit CompileTimeExpert;

interface
uses Windows, ExptIntf, ToolIntf;

type

 TCompileTimeNotifier = class(TIAddInNotifier)
 public
   procedure FileNotification(NotifyCode: TFileNotification;
     const FileName: string; var Cancel: Boolean); override;
   procedure EventNotification(NotifyCode: TEventNotification;
     var Cancel: Boolean); override;
 end;

procedure Register;

implementation
uses SysUtils, DateUtils;

var
 Notifier: TCompileTimeNotifier;
 LastCompileDt: TDateTime = 0;

procedure Register;                  
begin
 //
end;

procedure TCompileTimeNotifier.EventNotification(
 NotifyCode: TEventNotification; var Cancel: Boolean);
var
 Fv: TextFile;
 Fn: string;
begin
 if ToolServices.GetProjectName = "" then
   Exit;

 Fn := ExtractFilePath (ToolServices.GetProjectName) +
   "CompileDateTime.inc";

 try
   case NotifyCode of
     enBeforeCompile:
       begin
         AssignFile (Fv,Fn);
         try
           Rewrite (Fv);
           LastCompileDt := Now();
           WriteLn (Fv, "//");
           WriteLn (Fv, "// Auto-generated compile datetime file for " +
             ExtractFileName (ToolServices.GetProjectName) + " project");
           WriteLn (Fv, "// Include it in your project with {$include CompileDateTime.inc} directive");
           WriteLn (Fv, "//");

           WriteLn (Fv, "const");
           WriteLn (Fv, "  _CompileDateTime = ", FloatToStr(Now) + ";");
           WriteLn (Fv, "  _CompileTimeStr = """, TimeToStr(Now) + "" + """;");
           WriteLn (Fv, "  _CompileDateStr = """,DateToStr(Now) + "" + """;");
           WriteLn (Fv, "  _CompileDateTimeStr = """,DateTimeToStr(Now) + "" + """;");
         finally
           CloseFile (Fv);
         end;
       end;
     enAfterCompile:
       begin
         AssignFile (Fv,Fn);
         try
           Append (Fv);
           WriteLn (Fv, "  _CompileDurationInSec = ",
           FloatToStr(SecondSpan(Now(),LastCompileDt)) + ";");
         finally
           CloseFile (Fv);
         end;
       end;
   end;

 finally
   ToolServices.ReloadFile(Fn);
 end;
end;

procedure TCompileTimeNotifier.FileNotification(
 NotifyCode: TFileNotification; const FileName: string;
 var Cancel: Boolean);
begin
end;

initialization
 Notifier := TCompileTimeNotifier.Create;
 ToolServices.AddNotifierEx(Notifier);

finalization
 ToolServices.RemoveNotifier(Notifier);
 Notifier.Free;

end.



Нужно его установить в IDE, то есть, поместить его в пакет и выполнить Build/Install.
После этого в папке с любым скомпилированным проектом будет появляться файл CompileDateTime.inc, который можно включить в текст программы директивой {$include CompileDateTime.inc}. Константы, описанные в файле будут содержать актуальные на момент компиляции данные, например:

//
// Auto-generated compile datetime file for Project2.dpr project
// Include it in your project with {$include CompileDateTime.inc} directive
//
const
 _CompileDateTime = 38990.6491720833;
 _CompileTimeStr = "15:34:48";
 _CompileDateStr = "30.09.2006";
 _CompileDateTimeStr = "30.09.2006 15:34:48";
 _CompileDurationInSec = 0.156999751925468;


 
jTommy   (2006-09-30 20:50) [2]

Ого! Не ожидал такого подробного ответа. Спасибо большое.



Страницы: 1 вся ветка

Текущий архив: 2006.11.12;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.094 c
4-1151253289
pizz_pizz
2006-06-25 20:34
2006.11.12
работа с сертификатами


15-1161381093
WinSetup
2006-10-21 01:51
2006.11.12
Расскажите мне как это работает


2-1161831481
viper03
2006-10-26 06:58
2006.11.12
вывод картинки в DBCtrlGrid


15-1161653886
partizan
2006-10-24 05:38
2006.11.12
Встроенный ассемблер


3-1153997115
ALex123
2006-07-27 14:45
2006.11.12
MySQL и dbExpress: unable to load libmysql.dll.