Разработка ресурсного файла версий для Delphi-проектов
В данной статье рассматривается процесс создания и использования ресурсного файла версий (.rc) для Delphi-проектов. Ресурсный файл версий используется для хранения информации о версии программы, которая может быть прочитана и отображаться в свойствах файла на операционных системах Windows. Примером использования такой информации является отображение версии программы при наведении на исполняемый файл в проводнике Windows.
Структура версионной информации
Версионная информация в Windows представлена в виде блоков, которые содержат различные данные. Основные блоки - это VarFileInfo и StringFileInfo. Блок VarFileInfo содержит информацию о поддерживаемых локалях и кодовых страницах, в то время как StringFileInfo содержит строковые ресурсы, такие как описание файла, название компании и т.д., для каждой из локалей.
#include "windows.h"
1 VERSIONINFO
FILEVERSION 1, 2, 3, 4
FILEOS 0x00000004L // VOS_WINDOWS32 (32-bit Windows)
FILETYPE VFT_APP
{
BLOCK "VarFileInfo"
{
VALUE "Translation", 0x0809, 0x04E4
// 0x0809 - ID языка: английский (Великобритания)
// 0x04E4 - Кодовая страница: 1252 (Мульти-языковая)
}
BLOCK "StringFileInfo"
{
// Блок данных для локали ID 0x0809 и кодовой страницы 0x04E4
BLOCK "080904E4"
{
VALUE "CompanyName", "MyCompanyName\0"
}
}
}
Получение информации о версии
Для извлечения информации о версии из исполняемого файла можно использовать следующий код на Delphi:
procedure TMyApp.GetFileVersionString();
var
path, versionString: String;
versionSize, versionLength: DWORD;
pstrBuffer, pstrValue: PAnsiChar;
begin
// Код для извлечения версии из файла
// ...
end;
Для определения доступных блоков (StringFileInfo) необходимо использовать функцию VerQueryValue, указав путь к блоку VarFileInfo\Translation. Это позволит получить таблицу локалей и кодовых страниц, после чего можно будет извлечь строки для каждой из поддерживаемых локалей.
Пример кода для извлечения блоков локализации
procedure TMyApp.GetTranslationBlocks();
type
TTranslationRecord = packed record
LanguageID, Charset: WORD;
end;
PTranslationRecord = ^TTranslationRecord;
var
path, translationBlock: String;
versionSize: DWORD;
pstrBuffer: Pointer;
tRecord: PTranslationRecord;
atRecords: array of TTranslationRecord;
countRecords, index: Integer;
begin
// Код для извлечения блоков локализации
// ...
end;
Заключение
В данной статье был рассмотрен процесс создания и использования версионного ресурса в Delphi-проектах, а также предоставлены примеры кода для работы с версионной информацией. Это знание может быть полезно при разработке компонентов, которые требуют поддержки локализации и отображения информации о версии программы.
Разработка ресурсного файла версий для Delphi-проектов включает создание и использование файла .rc для хранения информации о версии программы, которая может быть отображена в Windows.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.