![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Автоматическое сохранение даты и времени компиляции в программе [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;