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

Вниз

Версия программы...   Найти похожие ветки 

 
serko ©   (2007-01-17 22:13) [0]

Всем привет! Ребят расскажите пожалуйста как происходит генерирование и отображение в инфо версии программы?
Почему мне так кажется что все это происходит автоматически, без участия программиста...
Ато я уже замучался вписывать вручную и выдумывать аерсию проги... Вечно забываю изменить...


 
Anatoly Podgoretsky ©   (2007-01-17 22:24) [1]

> serko  (17.01.2007 22:13:00)  [0]

У тебя два вопроса.

1. автоматически генерируется номер билда
2. номер версии, все четыре составляющих можно прочитать из ресурса

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


 
serko ©   (2007-01-17 23:04) [2]


> 2. номер версии, все четыре составляющих можно прочитать
> из ресурса

каким образом это делается?


 
DrPass ©   (2007-01-17 23:05) [3]


> Почему мне так кажется что все это происходит автоматически,
>  без участия программиста...

Если поставишь флажок "Autoincrement buid number", номер сборки будет увеличиваться автоматически. При каждой сборке, естессно. Насчет остального - а как ты думаешь, может ли Delphi лучше тебя знать, какая версия у твоей программы?


 
Джо ©   (2007-01-17 23:19) [4]

>
>
> [2] serko ©   (17.01.07 23:04)
>
> > 2. номер версии, все четыре составляющих можно прочитать
>
> > из ресурса
>
> каким образом это делается?

GetFileVersionInfo,GetFileVersionInfoSize,VerQueryValue


 
ors_archangel ©   (2007-01-18 11:35) [5]

Вот две составляющие, интересно, где ещё две :)
function GetFileVersion(const path,fmt: string): string;
var
 ver: int;
begin
 ver := SysUtils.GetFileVersion(pChar(path));
 if ver = -1 then ver := $0100; // default = 1.0
 result := Format(fmt, [HiWord(ver), LoWord(ver)]);
end;


 
Джо ©   (2007-01-18 12:01) [6]

> [5] ors_archangel ©   (18.01.07 11:35)
> Вот две составляющие, интересно, где ещё две :)

См. [4] :)


 
Джо ©   (2007-01-18 12:06) [7]

Вот, не очень изящно написано, зато давно и вполне работоспособно :)

unit VerInfo;

interface
uses Windows;

const
 MaxInfoStrings = 7;

 INFO_CompanyName = "CompanyName";
 INFO_FileDescription = "FileDescription";
 INFO_FileVersion = "FileVersion";
 INFO_InternalName = "InternalName";
 INFO_LegalCopyright = "LegalCopyright";
 INFO_OriginalFileName = "OriginalFileName";
 INFO_ProductName = "ProductName";
 INFO_ProductVersion = "ProductVersion";

 VersionInfoStrings: array [0..MaxInfoStrings] of string =
 (
   INFO_CompanyName,
   INFO_FileDescription,
   INFO_FileVersion,
   INFO_InternalName,
   INFO_LegalCopyright,
   INFO_OriginalFileName,
   INFO_ProductName,
   INFO_ProductVersion
 );

type
 TFileVersion = record
   Minor,
   Major,
   Build,
   Release: WORD;
 end;

 // Имя файла можно указать как в конструкторе,
 // так и позже, в свойстве FileName, причем, многократно
 TFileVersionInfo = class
 private
   FFileName: string;
   FBuffer: PChar;
   FBuffLen: Cardinal;
   FLocale: string;
   procedure SetFileName(const Value: string);
   procedure LoadFile (AFileName: string);
   procedure UnloadFile;
   function GetHasInfo: Boolean;
 public
   constructor Create (AFileName: string);
   destructor Destroy; override;
   property HasInfo: Boolean read GetHasInfo;
   property FileName: string read FFileName write SetFileName;
   property Locale: string read FLocale;

   function GetString (AString: string): string;
   function GetVersion: TFileVersion;

 end;

implementation
uses SysUtils;

{ TFileVersionInfo }

type
 TVer1 = record
   Minor: Word;
   Major: Word;
 end;
 TVer2 = record
   Build: Word;
   Release: Word;
 end;

constructor TFileVersionInfo.Create(AFileName: string);
begin
 FFileName := AFileName;
 LoadFile(AFileName);
end;

destructor TFileVersionInfo.Destroy;
begin
 UnloadFile;
 inherited;
end;

function TFileVersionInfo.GetHasInfo: Boolean;
begin
 Result := (FFileName <> "") and (FBuffLen <> 0);
end;

function TFileVersionInfo.GetString(AString: string): string;
var
 InfoLen: Cardinal;
 PInfo: PChar;
begin
 if VerQueryValue(
   FBuffer,
   PChar("\StringFileInfo\" + FLocale + "\"+AString),
   Pointer(PInfo),
   InfoLen
 ) then
 begin
   Result := PInfo;
 end
 else
   Result := ""
end;

function TFileVersionInfo.GetVersion: TFileVersion;
var
 FI: PVSFixedFileInfo;
 VerSize: Cardinal;
 Ver1: TVer1;
 Ver2: TVer2;
begin
 if VerQueryValue(FBuffer,"\",Pointer(FI),VerSize) then
 begin
   Ver1 := TVer1(FI.dwFileVersionMS);
   Ver2 := TVer2(FI.dwFileVersionLS);

   Result.Minor := Ver1.Minor;
   Result.Major := Ver1.Major;
   Result.Build := Ver2.Build;
   Result.Release := Ver2.Release;
 end;
end;

procedure TFileVersionInfo.LoadFile(AFileName: string);
var
 Dummy,LangLen: Cardinal;
 LangBuff: PChar;
begin
 UnloadFile;

 FBuffLen := 0;

 // Buffer size
 FBuffLen := GetFileVersionInfoSize(
   PChar(AFileName),
   Dummy
 );

 if FBuffLen <> 0 then
 begin
   GetMem (FBuffer,FBuffLen);

   // read resource data
   GetFileVersionInfo(
     PChar(FileName),
     0,
     FBuffLen,
     FBuffer
   );

   // check string locale
   VerQueryValue(FBuffer, "\VarFileInfo\Translation", pointer(LangBuff), LangLen);
   if langLen >= 4 then // if specified
   begin
     StrLCopy(@Dummy, LangBuff, 2);
     FLocale:= Format("%4.4x", [Dummy]);
     StrLCopy(@Dummy, LangBuff+2, 2);
     FLocale := FLocale + Format("%4.4x", [Dummy]);
   end
   else
     // use Amer. Engl, ANSI
     FLocale := "040904E4";
 end;
end;

procedure TFileVersionInfo.SetFileName(const Value: string);
begin
 FFileName := Value;
 LoadFile(Value);
end;

procedure TFileVersionInfo.UnloadFile;
begin
 FreeMem (FBuffer);
end;

end.


 
КиТаЯц ©   (2007-01-18 13:56) [8]

Кстати, у меня

> Если поставишь флажок "Autoincrement buid number", номер
> сборки будет увеличиваться автоматически.

не работает почему-то. Почему может не работать? D7


 
Virgo_Style ©   (2007-01-18 14:38) [9]

телепатирую: "Build" - это не F9, а Project - Build <имя проекта>



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

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

Наверх




Память: 0.49 MB
Время: 0.055 c
2-1169113274
Beavercrazy
2007-01-18 12:41
2007.02.04
Как определить координаты ячейки в строке?


3-1163669328
darlock
2006-11-16 12:28
2007.02.04
Как определить пуст блоб или нет


2-1169117274
knever
2007-01-18 13:47
2007.02.04
Оптимизация скорости работы программ для технических расчетов


2-1169110118
dsa256
2007-01-18 11:48
2007.02.04
Форма окна по контуру картинки


1-1165956161
AndreyRu
2006-12-12 23:42
2007.02.04
Сглаживание глифов