Цитата:
Сообщение от SCrat.ORS
Установил D2010, там работает и так и сяк и этак и все функции нормально отображают иконки, а также и прозрачность.
Вопрос можно закрыть, но тем не менее если кто знает как сделать иконки на D2006 - скажите.
|
В принципе, уже SCrat.ORS сам себе все уже объяснил, я лишь дополню его объяснение. Возможность отображать 32 битные иконки в меню официально появилась лишь начиная с Windows Vista. В ОС более ранних версий программы могут рисовать 32 битные иконки только "ручками" в OwnerDraw режиме. Это же самое делает и Delphi, включая флаг MFT_OWNERDRAW при добавлении пункта меню с иконкой (любой, не только 32 битной). Свойство OwnerDraw из VCL TMenuItem тоже включает MFT_OWNERDRAW, но к прорисовке иконок оно не имеет ни какого отношения. В целях сохранения совместимости с ранее написанным ПО Vista и 7, встретив флаг MFT_OWNERDRAW, отключает визуальную тему для меню. Новые версии Delphi, зная эту особенность, начинают рисовать "ручками" ВСЕ меню в режиме MFT_OWNERDRAW, по сути эмулируя функциональность Windows. Поэтому в D2010 меню с иконками выглядит "нативно". Но лишь выглядит, на самом деле оно полностью рисуется кодом VCL.
Теоретически, наверное можно пофиксить эту проблему в D2006, если в момент, когда меню еще не появилось, самостоятельно установить нужную иконку средствами WinApi, но это путь настоящих джедаев

(подсказка - нужно использовать 32-bit pre-multiplied alpha RGB bitmap и функцию SetMenuItemInfo)