РЕШЕНО: Об информации исполняемого файла
Модератор: Модераторы
РЕШЕНО: Об информации исполняемого файла
Захотелось выводить информацию о номере сборки своей программы. Нашел соответствующую статью http://fsweb.info/programming/lazarus/file_info.html но сразу же столкнулся с тем что Lazarus не может обнаружить модуль FileInfo. В инспекторе проекта FCL установлен.
Версия 0.9.30-0
FPC: 2.4.2
Ревизия SVN: i386-linux-gtk-2
Версия 0.9.30-0
FPC: 2.4.2
Ревизия SVN: i386-linux-gtk-2
Последний раз редактировалось Xenar 15.07.2011 15:53:45, всего редактировалось 1 раз.
RxLib, компонент TVersionInfo или просто использовать TAboutDialog оттуда же...
Мда походу придется пока забыть про эту фичу, почитал я сколько гимороя с установкой этого RxLib......
- Little_Roo
- энтузиаст
- Сообщения: 639
- Зарегистрирован: 27.02.2009 18:56:36
- Откуда: Санкт-Петербург
Xenar писал(а): почитал я сколько гимороя с установкой этого RxLib......
Правда?
Little_Roo писал(а):Xenar писал(а): почитал я сколько гимороя с установкой этого RxLib......
Правда?Никогда не было - работаю уже несколько лет, и полет нормальный...
Завидую вашему опыту белой завистью но с высоты моих пары месяцев в программировании несколько видится все по иному. Просто сильна уверенность что результат пляски по ценности будет ниже уровня необходимости в данной фичи. Ну и аллах с ней.
Честно говоря, ни малейшего гемора не заметил.
Ставишь rxnew.lpk отсюда :
http://lazarus-ccr.svn.sourceforge.net/ ... onents/rx/
и все дела.
Ставишь rxnew.lpk отсюда :
http://lazarus-ccr.svn.sourceforge.net/ ... onents/rx/
и все дела.
-
Padre_Mortius
- энтузиаст
- Сообщения: 1265
- Зарегистрирован: 29.05.2007 17:38:07
- Откуда: Спб
это не проблемы... это просят поставить компонент rx, который идет в составе лазаруса
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
- Откуда: Спб
Xenar, откуда ставился лазарус?
- alexs
- долгожитель
- Сообщения: 4069
- Зарегистрирован: 15.05.2005 23:17:07
- Откуда: г.Ставрополь
- Контактная информация:
Это значит, что есть старая версия Lazarus-а.
Используй последнюю 0.9.31 и всё будет нормально.
LCLBase - это, как я понял, зависимость из 31-й версии.
Либо возьми с SVN версию, которая была при выходе 30-й версии Lazarus-а.
Используй последнюю 0.9.31 и всё будет нормально.
LCLBase - это, как я понял, зависимость из 31-й версии.
Либо возьми с SVN версию, которая была при выходе 30-й версии Lazarus-а.
Решил я все таки эту задачку с выводом номера сборки без использования RXlib.
Может кому пригодится решение:
Создаем модуль vinfi
сохраняем его в папку со своей программой как vinfo.pas
Подключаем его как модуль на нужную форму
Реализовываем примерно по следующему примеру
Честно скомуниздил с буржуйского форума freepascal
Может кому пригодится решение:
Создаем модуль 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
