(Notes) Notes (2005 год)

Иконки.

На этой страничке я расскажу о таком элементе профессинального оформления приложений, как иконки.

Что это такое и чем они отличаются от графических файлов типа GIF, PNG, JPG и др? Иконки - это ПАКЕТЫ графических файлов, похожие на пакеты GIF-файлов, только пакетируются в данном случае рисунки С РАЗНЫМ разрешением. Занимать эти пакеты могут до 100 КБ и более. В виндузне приняты следующие разрешения для иконок:




Однако, Виндузовое АПИ отображает три основных формата иконок:

Из этого правила есть ряд исключений, например браузер IE в обязательном порядке в пакете иконки требует наличия рисунка 20х20 пикселов.

В виндузне совершенно нет встроенных инструментов для работы с иконками, разве что свою написать, и даже VS2005 открывает иконки с глубиной цвета до 256. Это довольно странно, ведь иконки в виндузне применяются активно - впрочем и инструментов работы с фонтами в виндузне тоже почему-то нету. Вдруг, подумалось, а ведь и всех остальных-то необходимых инструментов тоже ведь нету - например инструментов работы с help-файлами. Но вернемся к иконкам. Мне известна только одна прога, свободно и удобно, конвертирующая любые виды графики в иконки и обратно - IconWorkshop. Кстати, еще одна незаменимая прога, поставляемая этой компанией - изготовитель ScreenSaver'ов, который тоже почему-то отсутствует в виндузне. Отсутствие всех упомянутых прог, кстати, это серьезная проблема, ведь форматы всех этих файлов - например того же HELP2-файла, являются собственностью MS и не подлежат разглашению. Кроме того, они могут быть изменены в любой момент MS самовольно даже без уведомления потребителей...


Как я уже говорил, иконки могут быть довольно большими, например в 32-х битном цветовом разрешении и размере 48х48 (плюс сжатый 256х256) - это что-то в районе 100 КБ. Поэтому в WEB применение иконок бессмысленно. Тем не менее, как ни странно, в ASP2 поддержка иконок встроена - иконку в GIF преобразует жутковатого размера скрипт WebResourse.AXD. Даже вызов этого скрипта на страничке выглядит неприлично громоздко.


Но вернемся в WIN. Тут все иначе. Прежде всего засчет того, что иконки прекрасно пакуются в EXE-файл, причем как ни странно, это умеет делать даже VS2005. Это довольно удивительно, ведь даже строки с пробелами VS2005 паковать в PE-модуль не умеет без ошибок, а вот иконки почему-то умеет.

Именно благодаря этой особенности, что иконки - это самый обычный встроенный ресурс для WIN-приложений, плюс благодаря прекрасной поддержке иконок в нескольких виндузовых API - прежде всего ListView (а это наш привычный эксплорер файловой состемы) и ImageCombo - иконки и получили широчайшее распространение. Кроме того, иконки прекрасно встраиваются в ImageList, и соответственно, все контролы, базирующиеся на ключах ImageList (такие, например как TreeView) - прекрасно работают с иконками. Но...

Но самый главный шестерочный контрол MsFlexGrid, увы, совершенно не понимает формата иконок и работает строго с GIF-файлами. Вылечить это невозможно и остается только горько-горько сожалеть по этому поводу...

К сожалению, и в NET не обошлось без такой же неприятности с иконками. Важнейший виндузовый контрол ImageCombo - тот самый, который умеет работать с иконками, и который БЫЛ в шестерке - почему то начисто пропал в NET. Это очень огорчительно. Кроме того, даже хваленый DataGridView поддерживает иконки с жуткими ухищрениями. Тем не менее, все основные проги в NET у меня работают с ImageComboBox и с иконками в DataGridView и далось мне это не сразу и не просто. Это мое решение по поддержке иконок в NET опубликовано здесь.

Если же не касаться сложных виндузовых контролов, то в принципе в NET (в отличие от шестерки) извлечь рисунок из иконки элементарно. Надо сначала привести иконку к определенному размеру, а затем методом ToBitmap получить из нее обычную графику.

В заключение я выложу тут пакет иконок, которым сейчас пользуюсь: Старый, Новый: 1, 2, 3, 4.



Comments ( )
Link to this page: //www.vb-net.com/windows/Icon/index.htm
< THANKS ME>