unit rpVersionInfo; //версия 1.0 3/8/98 записана и проверена в Delphi 3. (*Автор Rick Peterson, данный компонент распространяется свободно и освобожден от платы за использование. В случае изменения авторского кода просьба прислать измененный код. Сообщайте пожалуйста обо всех найденных ошибках. Адрес для писем - rickpet@airmail.net. *) interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, TypInfo; type {$M+} (* Видели директиву $M+??? Это заставляет Delphi включать в код RTTI-информацию для перечислимых типов. В основном допускает работу с перечислимыми типами как со строками с помощью GetEnumName *) TVersionType=(vtCompanyName, vtFileDescription, vtFileVersion, vtInternalName, vtLegalCopyright,vtLegalTradeMark, vtOriginalFileName, vtProductName, vtProductVersion, vtComments); {$M-} TrpVersionInfo = class(TComponent) (* Данный компонент позволяет получать информацию о версии вашего приложения во время его выполенния *) private FVersionInfo : Array [0 .. ord(high(TVersionType))] of string; protected function GetCompanyName: string; function GetFileDescription: string; function GetFileVersion: string; function GetInternalName: string; function GetLegalCopyright: string; function GetLegalTradeMark: string; function GetOriginalFileName: string; function GetProductName: string; function GetProductVersion: string; function GetComments: string; function GetVersionInfo(VersionType: TVersionType): string; virtual; procedure SetVersionInfo; virtual; public constructor Create(AOwner: TComponent); override; published (* Использовать это очень просто - Label1.Caption := VersionInfo1.FileVersion Примечание: Все свойства - только для чтения, поэтому они недоступны в Инспекторе Объектов *) property CompanyName: string read GetCompanyName; property FileDescription: string read GetFileDescription; property FileVersion: string read GetFileVersion; property InternalName: string read GetInternalName; property LegalCopyright: string read GetLegalCopyright; property LegalTradeMark: string read GetLegalTradeMark; property OriginalFileName: string read GetOriginalFileName; property ProductName: string read GetProductName; property ProductVersion: string read GetProductVersion; property Comments: string read GetComments; end; procedure Register; implementation constructor TrpVersionInfo.Create(AOwner: TComponent); begin inherited Create(AOwner); SetVersionInfo; end; function TrpVersionInfo.GetCompanyName: string; begin result := GeTVersionInfo(vtCompanyName); end; function TrpVersionInfo.GetFileDescription: string; begin result := GeTVersionInfo(vtFileDescription); end; function TrpVersionInfo.GetFileVersion: string; begin result := GeTVersionInfo(vtFileVersion); end; function TrpVersionInfo.GetInternalName: string; begin result := GeTVersionInfo(vtInternalName); end; function TrpVersionInfo.GetLegalCopyright: string; begin result := GeTVersionInfo(vtLegalCopyright); end; function TrpVersionInfo.GetLegalTradeMark: string; begin result := GeTVersionInfo(vtLegalTradeMark); end; function TrpVersionInfo.GetOriginalFileName: string; begin result := GeTVersionInfo(vtOriginalFileName); end; function TrpVersionInfo.GetProductName: string; begin result := GeTVersionInfo(vtProductName); end; function TrpVersionInfo.GetProductVersion: string; begin result := GeTVersionInfo(vtProductVersion); end; function TrpVersionInfo.GetComments: string; begin result := GeTVersionInfo(vtComments); end; function TrpVersionInfo.GeTVersionInfo(VersionType: TVersionType): string; begin result := FVersionInfo[ord(VersionType)]; end; procedure TrpVersionInfo.SeTVersionInfo; var sAppName,sVersionType : string; iAppSize, iLenOfValue, i: integer; pcBuf,pcValue: PChar; begin sAppName := Application.ExeName; iAppSize:= GetFileVersionInfoSize(PChar(sAppName),iAppSize); if iAppSize > 0 then begin pcBuf := AllocMem(iAppSize); GetFileVersionInfo(PChar(sAppName),0,iAppSize,pcBuf); for i := 0 to Ord(High(TVersionType)) do begin sVersionType := GetEnumName(TypeInfo(TVersionType),i); sVersionType := Copy(sVersionType,3,length(sVersionType)); if VerQueryValue(pcBuf,PChar('StringFileInfo\040904E4\'+ sVersionType), Pointer(pcValue),iLenOfValue) then FVersionInfo[i] := pcValue; end; FreeMem(pcBuf,iAppSize); end; end; procedure Register; begin RegisterComponents('FreeWare', [TrpVersionInfo]); end; end. |