Destiny
|
Posted: Wed Nov 20, 2024 19:05 Post subject: |
|
|
iteg
OK, скачано, установлено, запущены тестовые программы.
Пробую пока что сообразно своим мыслям пройтись по заметкам, увидеть разницу и рассказать о своих
мыслях, вопросах, возможно опять всё ещё пожеланиях.
А уж с вас, если что, разгромное описание моей тупости, если таковая возникнет))) Ок?
Начнем явно с бага - на вкладке Ресурсы внизу дерева есть панель со столбцами "Свойство \ Значение"
Так вот нельзя изменить размер по высоте у этой панели. Очень хочется её раздвинуть выше... и в бок.
Чтобы полосы прокрутки не появлялись.
Так, теперь Имя. Ок, раз просто 1 это вроде как прямое указание на стандартный тип ресурса- пусть так и пишется.
Но Тип! сейчас пишется как "16 (16 (Version))". Ну как бы явно стоит укоротить до: "16 (Version)"
Равно как и для узла дерева ресурсов вместо "Version (1)" было б читабельней, имхо, писать "Version - 1", просто
чтобы скобочки не ассоциировались с тем же, что и уточнение типов - мол, это не кол-во элементов, а его тип или
же идентификатор просто. Так же это логичнее и для случай, когда ресурсов тип 1 несколько - тогда выводится еще
один узел дерева с иконкой "папка" и пишется "1 (2)", к примеру. Да, сейчас я прочитаю это как "ресурс типа 1, в
кол-ве 2 шт.". НО потом скорее всего буду читать, как "имя 1, подтип 2" - что неверно конечно же.
Для раздела VS_FIXEDFILEINFO походу добавился вывод поля File Date: 0x0000000000000000 (01.01.1601 3:00:00)
И да, я видел статьи, где писалось, что такое поле вроде как есть, хотя в современных справочных материалах его
вроде как и нет. Структура заканчивается на FILESUBTYPE типа того... НО если поле всё же есть - то знаете ли вы
а ЧЕМ тогда это поле можно заполнить официально? В редакторе Visual Studio набор этих полей для правки жестко
ограничен для обработки - и даты там нет. Как и в справке Структура заканчивается на FILESUBTYPE!
Руками вписывать в шаблон RC файла - тоже не понятно КАК...
Хотя там похоже вообще в край это редактор урезан. Даже для типа FILEOS нет перечисления ВСЕХ встроенных
вариантов допустимых его значений, что есть в справке.
Теперь еще раз вернемся к панели со столбцами "Свойство \ Значение". При выделении ресурса 1 то, что там я
вижу Имя, Тип, Размер, Смещение - это я понимаю. А вот данные про Язык и Кодовую страницу - нет, не понимаю.
Ведь из справок и глазками в редакторе RC-файла мы же четко поняли, что ВСЯ инфа о языке присутствует ЛИШЬ
внутри этого ресурса в полях секции "StringFileInfo" в заголовке BLOCK "lang-charset".
Так зачем выводить туда эту инфу, да еще и в умолчательно может и верном формате, но по логике - явно нет.
Так для файла из примеров, что я скинул: FontsListing.exe, я вижу, что указывается 0x409 (1033). А в скобочках
вижу Английский (США). А потом идет кодовая страница "0 - ANSI - кириллица".
Да, Вы расписали это как:
Quote: | "Значение кодовой странице 0 (CP_ACP) определяет, что кодовая страница будет получаться через WinAPI функцию
GetACP - извлекает текущий идентификатор кодовой страницы Windows ANSI для операционной системы, по которому
и получаю в ОС имя." |
Но вот ведь нюанс - а пользователю разве в ЭТОМ месте важно знать КАК именно будет производиться считывание и/или
перевод числа в наименование конкретной кодовой страницы? Мне казалось, что для УЗЛА дерева ресурсов не может
существовать такого понятия вообще. Потому как этот тип ресурсов содержит КОНКРЕТНОЕ место: StringFileInfo - где и
будет указана/выведена эта информация в корректном формате. Для взятого файла это будут ДВЕ структуры! где раздельно
будет указано: "StringTable 0 (0x0409, 0x04B0)" и "StringTable 1 (0x0419, 0x04B0)". Т.е. будет указана инфа о ДВУХ блоках
кодов об языке и его кодовой странице! А не об одном да еще и в "0" формате, который многим по умолчанию будет не ясен.
ИМХО, мне кажется в этой панели эти два параметра должны быть убраны. А то и для Иконок вдруг появляются эти блоки,
и инфа о том, что не вяжется с графический примитивами...
Причем это касается и ситуации, когда корректно указаны ДВА типа ресурсов VERSIONINFO - каждый из которых содержит
ровно один субблок StringTable внутри StringFileInfo с соответствующей языковой парой. И вот тогда хорошо, что имя этого
языка уходит в имя самого ресурса с типом 1: "1033 (Английский (США))". Вот только тут пусть это и будет показано!
Потому как мы четко видим по указанию в субблоке языковой пары (0x0409, 0x04B0) - т.е. это Юникодная кодо-страница!
И именно это уточнение я бы вот и хотел ЧЕТКО увидеть как подтверждение тому, что всё было задано верно в ресурсах.
НО! сейчас в обсуждаемой панельке я увижу: "0x0000 (0) (ANSI - кириллица)" - что опять взорвёт мне мозг. К сожалению.
Кстати, мгновенное отступление: в контекстном меню для элементов этого поля есть пункт "Копировать значение".
НО когда мы зайдем в подпункты этого подменю - мы увидим раздельно "Свойство", раздельно ОПЯТЬ "Значение".
Т.е. как бы масломасляное. Предлагается "Копировать ячейку" выводить как заголовок этого подменю. Потому как
выше вы используете "Копировать строку".
Возвращаемся...
Так же логике идее об убирании из панельки инфы об языке и кодовой странице добавляет просмотр другого файла из
архива примеров что я высылал. AkelPad. В исходниках основного RC файла из его проекта прописано: BLOCK "04090000"
И вот тогда-то увидеть "0x0000 (0) (ANSI - кириллица)" - но ТОЛЬКО на первой вкладке "ИНФО" - будет вполне логично
и корректно. Но никак на вкладке "Ресурсы" в этой панельке для ВСЕГО узла дерева.
Ну и пример в виде файла SpellCheck.dll. Я вот там немного так и не понял насчет парсинга языковых пар, к примеру, хотя
бы вот тут:
VarFileInfo
{
Translation 0: 0x0000, 0x04B0, 0x0009, 0x04B0
}
Да, вы указываете корректно в имени узла ресурса "1033 (Английский (США))" для этого варианта ресурса. НО! мы же вроде точно
знаем, видим, что указаны там НЕВЕРНЫЕ коды! 0x0000 и 0x0009! Еще раз! Тут же указаны КОДЫ ЯЗЫКОВ! Не варианты кодовых
страниц, для них-то как раз всё указано предельно точно, а для четко варианты языков! Там вот НЕТ в таблицах языков 0 и 9!
ИМХО, эти кодовые пары надо было бы пометить как-то цветом, чтобы акцентировать внимание на явной ошибке процесса создания
RC-файла под этот продукт.
Ну и в общем спасибо за подсказку "Тогда для мультиязычности нам необходимо сделать несколько структур VERSIONINFO с единым
идентификатором '1'" - благодаря ей, получилось-таки сделать так, как хотелось. НО правда по прежнему висит сугубо уже теоретический,
но тем не менее вопрос - это как же они умудрились просрать справку, что по факту надо делать НЕ ТО, что там описано!?
Т.е. справка про мультиязычность описывается относительно субблоков StringTable внутри StringFileInfo с соответствующим языковым ID.
Вот их может быть сколько угодно - для каждого языка. А по факту нет - надо делать ВСЮ структуру VERSIONINFO повторяемой, причем
под спец дефайнами:
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
....
#endif // Английский (США) resources
И каждая структура структуру VERSIONINFO долина быть заточена на ОДИН языковой субблок StringTable внутри StringFileInfo
с соответствующей парой языковых данных.
Last edited by Destiny on Thu Dec 05, 2024 17:20; edited 2 times in total |
|