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

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

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

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

Сообщение resident » 19.06.2013 19:14:36

Здрасть.
В параметрах проекта есть возможность задать версию, а также автоматическое увеличение номера сборки.
А есть ли возможность узнать их и использовать в проекте? Хочу сделать, чтобы заголовок главной формы включал не только название, но и эти номера :)
resident
энтузиаст
 
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

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

Сообщение Padre_Mortius » 19.06.2013 19:17:00

resident, у alexs в компонентах RX это реализовано, можно там посмотреть пример.
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

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

Сообщение resident » 19.06.2013 20:23:45

Спасиб. А модуль не подскажите? А то скачал, а там объем не маленький. Не понятно по названиям где искать :)
resident
энтузиаст
 
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

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

Сообщение Devel0 » 19.06.2013 20:47:51

Короче, код примерно такой:
Код: Выделить всё
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;
Devel0
новенький
 
Сообщения: 66
Зарегистрирован: 24.07.2011 10:43:13

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

Сообщение Little_Roo » 19.06.2013 21:11:55

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


RxTools -> TRxVersionInfo
Аватара пользователя
Little_Roo
энтузиаст
 
Сообщения: 639
Зарегистрирован: 27.02.2009 19:56:36
Откуда: Санкт-Петербург

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

Сообщение resident » 19.06.2013 22:25:12

Спасиб, вот только скачал RX для Lazarus, там штук двадцать модулей. Ни в одном из них нет TRxVersionInfo
resident
энтузиаст
 
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

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

Сообщение Little_Roo » 19.06.2013 22:35:05

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

Да, а RX (Ваш) откуда ??? Правильный брать отсюда https://svn.code.sf.net/p/lazarus-ccr/svn/components/rx
Аватара пользователя
Little_Roo
энтузиаст
 
Сообщения: 639
Зарегистрирован: 27.02.2009 19:56:36
Откуда: Санкт-Петербург

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

Сообщение resident » 19.06.2013 22:45:49

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

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

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

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

Какая уж ту закладка :) Я не устанавливал ничего. Да и не умею я ставить библиотеки и компоненты. Надеюсь можно выдернуть оттуда функцию или хотя бы модуль?
resident
энтузиаст
 
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

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

Сообщение Little_Roo » 19.06.2013 22:52:41

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

Если и со второго раза не проходит, то КАК еще подсказывать ???
Может, озаботиться прочитыванием/курением самых простых, начальных документашек??? Ну...тех...что для блондинок :(
Хотя.............................................
Аватара пользователя
Little_Roo
энтузиаст
 
Сообщения: 639
Зарегистрирован: 27.02.2009 19:56:36
Откуда: Санкт-Петербург

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

Сообщение alexs » 19.06.2013 23:10:44

resident
Не надо с D+ брать - там всё очень старое.
Если уж совсем с СВН не дружишь - то вот ночные сборки - http://w7site.ru/fpc/rxfpc/
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4064
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

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

Сообщение resident » 19.06.2013 23:26:13

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 и за пару минут нашел готовый кусок кода :)
resident
энтузиаст
 
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

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

Сообщение jec » 20.06.2013 06:14:10

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

Не поделитесь... находкой?
jec
новенький
 
Сообщения: 14
Зарегистрирован: 19.01.2011 12:57:57

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

Сообщение trengtor » 16.07.2013 10:06:22

Судя по всему, он вот что имел ввиду: http://forum.lazarus.freepascal.org/ind ... l#msg63887
Аватара пользователя
trengtor
новенький
 
Сообщения: 77
Зарегистрирован: 03.05.2013 08:57:43
Откуда: Москва

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

Сообщение jec » 17.07.2013 05:31:35

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

СПС! Навскидку оно. (ну не силён в английском, увы()
jec
новенький
 
Сообщения: 14
Зарегистрирован: 19.01.2011 12:57:57


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 232

Рейтинг@Mail.ru