Blog. Just Blog
Использование иконок разных размеров в ресурсах
Большим плюсом Flat Assembler является то, что при разработке создается минимальное количество файлов. Описания ресурсов хранятся прямо в исходнике ASM, что тоже очень удобно. Например, в официальной документации и исходниках описание главной иконки в ресурсах исполняемого файла выглядит примерно так:Code (Assembler) : Убрать нумерацию
- section '.rsrc' resource data readable
- directory RT_ICON, icons,\
- RT_GROUP_ICON, group_icons
- resource icons,\
- 1, LANG_NEUTRAL, icon_data
- resource group_icons,\
- 1, LANG_NEUTRAL, main_icon
- ; Описание одиночной иконки
- icon main_icon, icon_data, 'main_icon.ico'
Code (Assembler) : Убрать нумерацию
- section '.rsrc' resource data readable
- directory RT_ICON, icons,\
- RT_GROUP_ICON, group_icons
- resource icons,\
- 1, LANG_NEUTRAL, icon_data1,\
- 2, LANG_NEUTRAL, icon_data2,\
- 3, LANG_NEUTRAL, icon_data3
- resource group_icons,\
- 1, LANG_NEUTRAL, main_icon
- ; Описание иконок разных размеров, объединенных в одну
- icon main_icon,\
- icon_data1, 'icon_16x16_32bit.ico',\
- icon_data2, 'icon_32x32_32bit.ico',\
- icon_data3, 'icon_48x48_32bit.ico'
Система Windows поддерживает файлы иконок особого формата, которые содержат в себе изображения сразу несколько размеров. В зависимости от ситуации из такого мультифайла система извлекает иконку нужного размера и использует при отображении. Но если попытаться использовать такой мультифайл в ресурсах программ на FASM, то из него будет взята только первая по счету иконка. Это связано с особенностями реализации макросов, описывающих ресурсы. Конечно, после компиляции можно поковыряться в ресурсах чем-нибудь типа Restorator'а, но это не самый лучший вариант. На форуме Flat Assembler удалось найти красивое решение для мультифайлов в виде модифицированного штатного макроса FASM. Теперь все иконки можно собрать в один файл и при помощи макроса по индексам выбрать нужные из них.
Code (Assembler) : Убрать нумерацию
- section '.rsrc' resource data readable
- ; Модифицированный макрос FASM
- macro multi_icon group, [label, icon_file,num]
- {
- common local count
- count = 0
- forward local data,size,position
- label dd RVA data,size,0,0
- virtual at 0
- file icon_file:6+(num*16),16
- load size dword from 8
- load position dword from 12
- end virtual
- data file icon_file:position,size
- count = count+1
- common local header
- align 4
- group dd RVA header,6+count*14,0,0
- header dw 0,1,count
- forward
- file icon_file:6+(num*16),12
- dw label#.resid
- common
- align 4
- }
- directory RT_ICON, icons,\
- RT_GROUP_ICON, group_icons
- resource icons,\
- 1, LANG_NEUTRAL, icon_data1,\
- 2, LANG_NEUTRAL, icon_data2,\
- 3, LANG_NEUTRAL, icon_data3
- resource group_icons,\
- 1, LANG_NEUTRAL, main_icon
- ; Описание ресурса иконок теперь будет таким. Добавился индекс иконки
- ; в мультифайле, нумерация индексов начинается с нуля.
- multi_icon main_icon,\
- icon_data1, 'multi_icon.ico', 0,\
- icon_data2, 'multi_icon.ico', 1,\
- icon_data3, 'multi_icon.ico', 2
Просмотров: 2293 | Комментариев: 1
Комментарии
Отзывы посетителей сайта о статье
Добавить комментарий
Заполните форму для добавления комментария

Отличная статья