Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Автоматическое сохранение даты и времени компиляции в программе [D6, WinXP]


jTommy ©   (2006-09-30 16:21:00) 

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

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


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

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


Джо   (2006-09-30 16:38:00) [2]

Я решал задачу написанием нехитрого эксперта 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;


Наверх

Титульная страница Поиск, карта сайта Написать письмо