РЕШЕНО: Об информации исполняемого файла

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

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

Аватара пользователя
Xenar
постоялец
Сообщения: 158
Зарегистрирован: 08.06.2011 12:54:07

РЕШЕНО: Об информации исполняемого файла

Сообщение Xenar »

Захотелось выводить информацию о номере сборки своей программы. Нашел соответствующую статью http://fsweb.info/programming/lazarus/file_info.html но сразу же столкнулся с тем что Lazarus не может обнаружить модуль FileInfo. В инспекторе проекта FCL установлен.
Версия 0.9.30-0
FPC: 2.4.2
Ревизия SVN: i386-linux-gtk-2
Последний раз редактировалось Xenar 15.07.2011 15:53:45, всего редактировалось 1 раз.
svk12
постоялец
Сообщения: 411
Зарегистрирован: 09.06.2008 18:42:47

Сообщение svk12 »

RxLib, компонент TVersionInfo или просто использовать TAboutDialog оттуда же...
Аватара пользователя
Xenar
постоялец
Сообщения: 158
Зарегистрирован: 08.06.2011 12:54:07

Сообщение Xenar »

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

Сообщение Little_Roo »

Xenar писал(а): почитал я сколько гимороя с установкой этого RxLib......

Правда? :D Никогда не было - работаю уже несколько лет, и полет нормальный...
Аватара пользователя
Xenar
постоялец
Сообщения: 158
Зарегистрирован: 08.06.2011 12:54:07

Сообщение Xenar »

Little_Roo писал(а):
Xenar писал(а): почитал я сколько гимороя с установкой этого RxLib......

Правда? :D Никогда не было - работаю уже несколько лет, и полет нормальный...

Завидую вашему опыту белой завистью но с высоты моих пары месяцев в программировании несколько видится все по иному. Просто сильна уверенность что результат пляски по ценности будет ниже уровня необходимости в данной фичи. Ну и аллах с ней.
svk12
постоялец
Сообщения: 411
Зарегистрирован: 09.06.2008 18:42:47

Сообщение svk12 »

Честно говоря, ни малейшего гемора не заметил.
Ставишь rxnew.lpk отсюда :
http://lazarus-ccr.svn.sourceforge.net/ ... onents/rx/
и все дела.
Аватара пользователя
alexs
долгожитель
Сообщения: 4069
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

Xenar писал(а):почитал я сколько гимороя с установкой этого RxLib......

А самому проверить? Какие проблемы?
Аватара пользователя
Xenar
постоялец
Сообщения: 158
Зарегистрирован: 08.06.2011 12:54:07

Сообщение Xenar »

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

Сообщение Padre_Mortius »

это не проблемы... это просят поставить компонент rx, который идет в составе лазаруса
Аватара пользователя
dunin
энтузиаст
Сообщения: 634
Зарегистрирован: 02.05.2007 13:18:11
Откуда: Тољя††и
Контактная информация:

Сообщение dunin »

Xenar, лазарус какой версии? У меня при установке RxNew он сам Rx цепляет. Я только сообщение вижу, что-то вроде "при установке также будет установлен паке Rx"
Аватара пользователя
Xenar
постоялец
Сообщения: 158
Зарегистрирован: 08.06.2011 12:54:07

Сообщение Xenar »

dunin писал(а):Xenar, лазарус какой версии? У меня при установке RxNew он сам Rx цепляет. Я только сообщение вижу, что-то вроде "при установке также будет установлен паке Rx"

Версия 0.9.30-0
FPC: 2.4.2
Ревизия SVN: i386-linux-gtk-2

Добавлено спустя 1 минуту 38 секунд:
Padre_Mortius писал(а):это не проблемы... это просят поставить компонент rx, который идет в составе лазаруса

Так если он в составе лазаруса то почему он его не видит.
И там еще LCLBase пакет было.
Padre_Mortius
энтузиаст
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Сообщение Padre_Mortius »

Xenar, откуда ставился лазарус?
Аватара пользователя
Xenar
постоялец
Сообщения: 158
Зарегистрирован: 08.06.2011 12:54:07

Сообщение Xenar »

Padre_Mortius писал(а):Xenar, откуда ставился лазарус?

Из реп http://www.hu.freepascal.org/lazarus/
Аватара пользователя
alexs
долгожитель
Сообщения: 4069
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

Это значит, что есть старая версия Lazarus-а.
Используй последнюю 0.9.31 и всё будет нормально.
LCLBase - это, как я понял, зависимость из 31-й версии.
Либо возьми с SVN версию, которая была при выходе 30-й версии Lazarus-а.
Аватара пользователя
Xenar
постоялец
Сообщения: 158
Зарегистрирован: 08.06.2011 12:54:07

Сообщение Xenar »

Решил я все таки эту задачку с выводом номера сборки без использования RXlib.
Может кому пригодится решение:
Создаем модуль vinfi

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

unit vinfo;

{$mode objfpc}

interface

uses
  Classes, SysUtils, resource, versiontypes, versionresource;

type
  { TVersionInfo }

  TVersionInfo = class
  private
    FVersResource: TVersionResource;
    function GetFixedInfo: TVersionFixedInfo;
    function GetStringFileInfo: TVersionStringFileInfo;
    function GetVarFileInfo: TVersionVarFileInfo;
  public
    constructor Create;
    destructor Destroy; override;

    procedure Load(Instance: THandle);
    property FixedInfo: TVersionFixedInfo read GetFixedInfo;
    property StringFileInfo: TVersionStringFileInfo read GetStringFileInfo;
    property VarFileInfo: TVersionVarFileInfo read GetVarFileInfo;
  end;

implementation

{ TVersionInfo }

function TVersionInfo.GetFixedInfo: TVersionFixedInfo;
begin
  Result := FVersResource.FixedInfo;
end;

function TVersionInfo.GetStringFileInfo: TVersionStringFileInfo;
begin
  Result := FVersResource.StringFileInfo;
end;

function TVersionInfo.GetVarFileInfo: TVersionVarFileInfo;
begin
  Result := FVersResource.VarFileInfo;
end;

constructor TVersionInfo.Create;
begin
  inherited Create;
  FVersResource := TVersionResource.Create;
end;

destructor TVersionInfo.Destroy;
begin
  FVersResource.Free;
  inherited Destroy;
end;

procedure TVersionInfo.Load(Instance: THandle);
var
  Stream: TResourceStream;
begin
  Stream := TResourceStream.CreateFromID(Instance, 1, PChar(RT_VERSION));
  try
    FVersResource.SetCustomRawDataStream(Stream);
    // access some property to load from the stream
    FVersResource.FixedInfo;
    // clear the stream
    FVersResource.SetCustomRawDataStream(nil);
  finally
    Stream.Free;
  end;
end;
end.

сохраняем его в папку со своей программой как vinfo.pas
Подключаем его как модуль на нужную форму

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

uses vinfo 

Реализовываем примерно по следующему примеру

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

procedure TForm1.FormCreate(Sender: TObject);
// initialize a bunch of stuff for this app when the form is first opened
// [0] = Major version, [1] = Minor ver, [2] = Revision, [3] = Build Number
// The above values can be found in the menu: Project > Project Options > Version Info
 Var
  MajorNum : String;
  MinorNum : String;
  RevisionNum : String;
  BuildNum : String;
  Info: TVersionInfo;
begin
  Info := TVersionInfo.Create;
  Info.Load(HINSTANCE);
  // grab just the Build Number
  MajorNum := IntToStr(Info.FixedInfo.FileVersion[0]);
  MinorNum := IntToStr(Info.FixedInfo.FileVersion[1]);
  RevisionNum := IntToStr(Info.FixedInfo.FileVersion[2]);
  BuildNum := IntToStr(Info.FixedInfo.FileVersion[3]);
  Info.Free;
 Label1.Caption := 'Сборка '+MajorNum+'.'+MinorNum+'.'+RevisionNum+'.'+BuildNum;
end;

Честно скомуниздил с буржуйского форума freepascal :)
Ответить