Использование автономерации версий

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
Аватара пользователя
GAMER
энтузиаст
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина
Контактная информация:

Использование автономерации версий

Сообщение GAMER »

Использую автономерацию билдов. Подскажите, как номер версии-билда можно интегрировать в программу. Например, чтобы она выводилась в заголовке окна.
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

Сообщение Mr.Smart »

Только чтением из ресурса exe файла информации о версии.

Код: Выделить всё

function GetFileVersionStr(const AFileName:string): String;
var
 buf : array[0..3071] of byte;
 bufp : pointer;
 fn : string;
 valsize,
 size : DWORD;
 h : DWORD;
 valrec : PVSFixedFileInfo;
 M,L: DWORD;
begin
  result:='';
  M:=0;
  L:=0;
  fn:=AFileName;
  UniqueString(fn);
  size:=GetFileVersionInfoSize(pchar(fn),@h);
  if size>sizeof(buf) then
    begin
      getmem(bufp,size);
      try
        if GetFileVersionInfo(pchar(fn),h,size,bufp) then
          if VerQueryValue(bufp,'\',valrec,valsize) then
           begin
            M:=valrec^.dwFileVersionMS;
            L:=valrec^.dwFileVersionLS;
           end
      finally
        freemem(bufp);
      end;
    end
  else
    begin
      if GetFileVersionInfo(pchar(fn),h,size,@buf) then
        if VerQueryValue(@buf,'\',valrec,valsize) then
          begin
           M:=valrec^.dwFileVersionMS;
           L:=valrec^.dwFileVersionLS;
          end
    end;
  Result:=Format('%d.%d.%d.%d',[M shr 16,M and $FF,L shr 16,L and $FF])
end;


Добавлено спустя 35 секунд:
Но это только в Windows!
Аватара пользователя
GAMER
энтузиаст
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина
Контактная информация:

Сообщение GAMER »

С самого ехе-файла вытягивать или с файла *.rc?
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

Сообщение Mr.Smart »

Пишешь код вида

Код: Выделить всё

var
  s: String;
....
  s:=GetFileVersionStr(ParamStr(0));
...

и в s версия файла вида x.x.x.x

Добавлено спустя 32 секунды:
тоесть натравливаешь функцию на exe файл...
yuray
новенький
Сообщения: 95
Зарегистрирован: 22.05.2008 14:19:19
Откуда: Ровно, Украина

Сообщение yuray »

Может уже и для gtk2 что-то сделали? rc-файл создается... Но как добраться до FileVersion, чтоб в About форме показать?
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

Сообщение Mr.Smart »

Для не Виндос приложений делаю вот так:
создаю файл version.inc содержащим строку вида

Код: Выделить всё

'1.1.0.4'

а в коде где нужно использую вставку

Код: Выделить всё

Caption:={$I version.inc}


p.s. конечно некакой тут автонумерицией не пахнет (версию меняешь в ручную) зато независит от платформы ....
Ответить