Показать сообщение отдельно
  #12  
Старый 10.11.2013, 16:09
Aniskin Aniskin вне форума
Прохожий
 
Регистрация: 29.06.2013
Сообщения: 9
Версия Delphi: 7 - XE4
Репутация: 10
По умолчанию

Цитата:
Сообщение от 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)
Ответить с цитированием