Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.02.04;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.04 c
8-1148858313
452
2006-05-29 03:18
2007.02.04
можно ли задать разное время для каждого из кадров в avi файле


2-1169016602
gio_zh
2007-01-17 09:50
2007.02.04
set


2-1169099675
Garacio
2007-01-18 08:54
2007.02.04
изменить/вернуть обратносистемную дату с помощью DateTimePicker


5-1148224234
jb
2006-05-21 19:10
2007.02.04
MouseWeel


2-1168800281
azl
2007-01-14 21:44
2007.02.04
Мигание иконки в Строке заголовка формы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский