unit rpVersionInfo; //версия 1.0 3/8/98 записана и проверена в Delphi 3.(*Автор Rick Peterson, данный компонент распространяется свободно
и освобожден от платы за использование. В случае изменения
авторского кода просьба прислать измененный код. Сообщайте пожалуйста
обо всех найденных ошибках. Адрес для писем - rickpet@airmail.net. *)interfaceuses
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))] ofstring;
protectedfunction 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;
publicconstructor 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;
procedureRegister;
implementationconstructor TrpVersionInfo.Create(AOwner: TComponent);
begininherited 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 thenbegin
pcBuf := AllocMem(iAppSize);
GetFileVersionInfo(PChar(sAppName), 0, iAppSize, pcBuf);
for i := 0 to Ord(High(TVersionType)) dobegin
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;
procedureRegister;
begin
RegisterComponents('FreeWare', [TrpVersionInfo]);
end;
end.
Это компонент Delphi под названием rpVersionInfo, который предоставляет информацию о версии приложения в реальном времени. Он был написан Риком Петерсоном и является свободным для использования, модификации и распространения.
Вот разбивка кода:
Интерфейс
Секция интерфейса объявляет тип TVersionType, который представляет собой различные типы информации о версии (например, название компании, описание файла, номер версии и т.д.). Она также объявляет класс компонента TrpVersionInfo, который наследуется от TComponent.
Имплементация
В секции имплементации есть несколько методов и свойств:
Конструктор Create инициализирует компонент и вызывает метод SetVersionInfo, чтобы получить информацию о версии.
Методы GetCompanyName, GetFileDescription, ... , GetComments возвращают соответствующие строки информации о версии.
Метод GetVersionInfo возвращает информацию о версии для заданного типа VersionType.
Метод SetVersionInfo получает информацию о версии из реестра и хранит ее в массиве.
Процедура Register регистрирует компонент в палетке компонентов Delphi.
Замечания
Directive $M+ включает runtime type information (RTTI) для перечисленных типов.
Функция GetEnumName используется для получения имени перечисленного значения как строки.
Функция VerQueryValue используется для получения значения ресурса версии.
Использование
Чтобы использовать этот компонент, создайте экземпляр класса TrpVersionInfo и доступ к его свойствам (например, CompanyName, FileDescription и т.д.), чтобы получить соответствующую информацию о версии. Обратите внимание, что все свойства являются только для чтения, поэтому они не могут быть изменены в Инспекторе объектов.
В целом, этот компонент предоставляет удобный способ получения информации о версии вашего приложения в реальном времени, что делает его полезным для отображения номеров версий, уведомлений о правах и других метаданных.
В статье описывается компонент Delphi для работы с информацией о версии приложения (версия Info), который позволяет получить доступ к различным свойствам версии, таким как компания, файловая описание, файловая версия и другие.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.