Форум: "Основная";
Текущий архив: 2006.11.12;
Скачать: [xml.tar.bz2];
ВнизАвтоматическое сохранение даты и времени компиляции в программе Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.044 c