Как узнать версию файла?

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

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

Ответить
resident
энтузиаст
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

Как узнать версию файла?

Сообщение resident »

Здрасть.
В параметрах проекта есть возможность задать версию, а также автоматическое увеличение номера сборки.
А есть ли возможность узнать их и использовать в проекте? Хочу сделать, чтобы заголовок главной формы включал не только название, но и эти номера :)
Padre_Mortius
энтузиаст
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Сообщение Padre_Mortius »

resident, у alexs в компонентах RX это реализовано, можно там посмотреть пример.
resident
энтузиаст
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

Сообщение resident »

Спасиб. А модуль не подскажите? А то скачал, а там объем не маленький. Не понятно по названиям где искать :)
Devel0
новенький
Сообщения: 66
Зарегистрирован: 24.07.2011 10:43:13

Сообщение Devel0 »

Короче, код примерно такой:

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

uses ..., versionresource, versiontypes, resource;
...
var
  Stream: TResourceStream;
  VersResource: TVersionResource;
  ver: TFileProductVersion;

begin
  //Загрузить ресурсы
  Stream := TResourceStream.CreateFromID(HINSTANCE, 1, PChar(RT_VERSION));
  VersResource:=TVersionResource.Create;
  try
    VersResource.SetCustomRawDataStream(Stream);
    ver:=VersResource.FixedInfo.FileVersion;
    VersResource.SetCustomRawDataStream(nil);

    Result:=Format('%d.%d.%d', [ver[0], ver[1], ver[2]]);
  finally
    VersResource.Free;
  end;
end;
Аватара пользователя
Little_Roo
энтузиаст
Сообщения: 639
Зарегистрирован: 27.02.2009 18:56:36
Откуда: Санкт-Петербург

Сообщение Little_Roo »

resident писал(а):Не понятно по названиям где искать


RxTools -> TRxVersionInfo
resident
энтузиаст
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

Сообщение resident »

Спасиб, вот только скачал RX для Lazarus, там штук двадцать модулей. Ни в одном из них нет TRxVersionInfo
Аватара пользователя
Little_Roo
энтузиаст
Сообщения: 639
Зарегистрирован: 27.02.2009 18:56:36
Откуда: Санкт-Петербург

Сообщение Little_Roo »

Еще раз - закладка RxTools -> компонент TRxVersionInfo

Да, а RX (Ваш) откуда ??? Правильный брать отсюда https://svn.code.sf.net/p/lazarus-ccr/svn/components/rx
resident
энтузиаст
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

Сообщение resident »

Я вот отсюда скачал:
http://rx.delphiplus.org/

Little_Roo писал(а):Правильный брать отсюда https://svn.code.sf.net/p/lazarus-ccr/svn/components/rx

Модуль подскажите?

Little_Roo писал(а):Еще раз - закладка RxTools -> компонент TRxVersionInfo

Какая уж ту закладка :) Я не устанавливал ничего. Да и не умею я ставить библиотеки и компоненты. Надеюсь можно выдернуть оттуда функцию или хотя бы модуль?
Аватара пользователя
Little_Roo
энтузиаст
Сообщения: 639
Зарегистрирован: 27.02.2009 18:56:36
Откуда: Санкт-Петербург

Сообщение Little_Roo »

resident писал(а): Little_Roo писал(а):Правильный брать отсюда https://svn.code.sf.net/p/lazarus-ccr/svn/components/rx
Модуль подскажите?
Little_Roo писал(а):Еще раз - закладка RxTools -> компонент TRxVersionInfo

Если и со второго раза не проходит, то КАК еще подсказывать ???
Может, озаботиться прочитыванием/курением самых простых, начальных документашек??? Ну...тех...что для блондинок :(
Хотя.............................................
Аватара пользователя
alexs
долгожитель
Сообщения: 4066
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

resident
Не надо с D+ брать - там всё очень старое.
Если уж совсем с СВН не дружишь - то вот ночные сборки - http://w7site.ru/fpc/rxfpc/
resident
энтузиаст
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

Сообщение resident »

Little_Roo писал(а):Если и со второго раза не проходит, то КАК еще подсказывать ???

Да уж наверное никак, придется отказаться от такой функциональности приложения.
Спасиб за подсказки. Но я наивно надеялся на готовый кусок кода ( Ctrl+C Ctrl+V это же быстрей чем писать ), и к тому я не знаю, как ставить библиотеки. По вашей ссылке мне даже непонятно какой файл качать.
У меня есть кусок (который явно выдернут из какого-то класса, может из (Вашей же) RX, и который отлично работает в Делфи). Вот я и думал, что где-то на поверхности есть что-то типа такого для Лазаруса:

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

function FileVersion(AFileName:string): string;
var
 szName: array[0..255] of Char;
 P: Pointer;
 Value: Pointer;
 Len: UINT;
 GetTranslationString:string;
 FFileName: PChar;
 FValid:boolean;
 FSize: DWORD;
 FHandle: DWORD;
 FBuffer: PChar;
begin
 try
   FFileName := StrPCopy(StrAlloc(Length(AFileName) + 1), AFileName);
   FValid := False;
   FSize := GetFileVersionInfoSize(FFileName, FHandle);
   if FSize > 0 then
     try
       GetMem(FBuffer, FSize);
       FValid := GetFileVersionInfo(FFileName, FHandle, FSize, FBuffer);
     except
       FValid := False;
       raise;
     end;
   Result := '';
   if FValid then
     VerQueryValue(FBuffer, 'VarFileInfoTranslation', p, Len)
   else p := nil;
   if P <> nil then
     GetTranslationString := IntToHex(MakeLong(HiWord(Longint(P^)), LoWord(Longint(P^))), 8);
   if FValid then
     begin
       StrPCopy(szName, 'StringFileInfo' + GetTranslationString + 'FileVersion');
       if VerQueryValue(FBuffer, szName, Value, Len) then
         Result := StrPas(PChar(Value));
     end;
 finally
   try
     if FBuffer <> nil then FreeMem(FBuffer, FSize);
   except
   end;
   try
     StrDispose(FFileName);
   except
   end;
 end;
end;


Добавлено спустя 4 минуты 45 секунд:
alexs писал(а):Если уж совсем с СВН не дружишь - то вот ночные сборки - http://w7site.ru/fpc/rxfpc/

А что с ними делать?
Вот скачал я файл, распаковал.
Запустил Лазарус - Пакет - Открыть файл пакета (*.lpk) - (Выбрал все пять lpk файлов) - Открыть - Использовать - Установить - Вы хотите пересобрать Лазарус? - Да - И с итоге итоге ничего. Никаких новых вкладок не появилось.

Добавлено спустя 17 минут 42 секунды:
Отбой. Заграница в очередной раз нам помогла.
Зашел на http://www.lazarus.freepascal.org и за пару минут нашел готовый кусок кода :)
jec
новенький
Сообщения: 14
Зарегистрирован: 19.01.2011 11:57:57

Сообщение jec »

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

Отбой. Заграница в очередной раз нам помогла. 
Зашел на http://www.lazarus.freepascal.org и за пару минут нашел готовый кусок кода

Не поделитесь... находкой?
Аватара пользователя
trengtor
новенький
Сообщения: 77
Зарегистрирован: 03.05.2013 08:57:43
Откуда: Москва

Сообщение trengtor »

Судя по всему, он вот что имел ввиду: http://forum.lazarus.freepascal.org/ind ... l#msg63887
jec
новенький
Сообщения: 14
Зарегистрирован: 19.01.2011 11:57:57

Сообщение jec »

trengtor писал(а):Судя по всему, он вот что имел ввиду: http://forum.lazarus.freepascal.org/ind ... l#msg63887

СПС! Навскидку оно. (ну не силён в английском, увы()
Ответить