Решил я все таки эту задачку с выводом номера сборки без использования 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