|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Меню с иконками в стиле aero
Delphi 2006. Есть MainMenu/PopupMenu - не важно какое, не важно какие там пункты и прочее.
Меню без иконок: Прицепляю к меню ImageList: Почему когда прицепляю иконки, то теряется aero и включается OwnerDraw. Вопрос: Как сделать так? Гугл не помогает. в MSDN тоже ничего умного не нашёл. Побывал делать через: Код:
constructor T32ImageList.Create(AOwner: TComponent); begin inherited Create(AOwner); //Вызываем родительский метод Self.Handle := ImageList_Create( Width, Height, ILC_COLOR32 or ILC_MASK, AllocBy, AllocBy); end; ... ListImages := T32ImageList.Create(Self); Ic:=TIcon.Create; Ic.LoadFromResourceName(hInstance,'MAINICON'); ListImages.AddIcon(Ic); Ic.Free; PopupMenu1.Images:=ListImages; PopupMenu1.Items[0].ImageIndex:=0; PopupMenu1.OwnerDraw:=false; Ничего не выходит, все-равно рис.2 Продолжение темы - Часть 2. Програмистами не рождаются, ими становятся! Последний раз редактировалось SCrat.ORS, 10.04.2015 в 11:45. |
#2
|
||||
|
||||
подключи к проекту 1 24 манифест:
PHP код:
Пишу программы за еду. __________________ |
#3
|
||||
|
||||
Подключен, - не помогает
Програмистами не рождаются, ими становятся! |
#4
|
||||
|
||||
Попробовал на D7 под W7 подключив манифест - работает, смотрите настройки среды
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#5
|
||||
|
||||
Цитата:
Програмистами не рождаются, ими становятся! |
#6
|
||||
|
||||
У меня D7, с 2006 не знаком и желания знакомиться нет совершенно, мог бы посоветовать сделать даунгрейд , но возможно всё дело в системных компонентах, напр. таких как .NET SDK или .NET Framework, ну или MS XML, вдруг чего не хватает, может их обновить надо на более свежие, возможно здесь собака и зарыта
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#7
|
||||
|
||||
Не, мне кажется .NET здесь вообще ни при чём, т.к. он не используется. Проблема заключается в том, что когда подключаешь к меню ImageList, то у него включается OwnerDraw и соответственно выключается манифест и используется ручная отрисовка. Как бы выключить OwnerDraw? Простая установка флага OwnerDraw:=False; после подключения ImageList результатов не дает. Может где-то в компоненте надо поковыряться. Но где. Может создать свой компонент Меню на основе стандартного, но как, - знать не знаю. Где бы поковыряться. Даунгрейд - не вариант, т.к. Д7 не совсем фантан для довольно большой программы написанной на Д2006 - потом половина функционала работать перестанет. Я скачиваю Д2010 - там вроде бы нормально должно пойти, но Душа привыкла к Д2006.
Програмистами не рождаются, ими становятся! Последний раз редактировалось SCrat.ORS, 06.10.2013 в 22:09. |
#8
|
||||
|
||||
Нашел такую вещь, можно прицепить картинку функцией SetMenuItemBitmaps. Функция изменяет вид Check галочки на картинку, всё вроде бы хорошо, но не устанавливается прозрачность, и цепляется только BMP, и работает только с HMENU.
Получается вот так: при использовании с компонентом TMainMenu/TPopupMenu (Handle) - результатов не даёт. - Как использовать SetMenuItemBitmaps c Компонентами? и как сделать прозрачность? Продолжаю думать дальше..., Програмистами не рождаются, ими становятся! |
#9
|
||||
|
||||
Установил D2010, там работает и так и сяк и этак и все функции нормально отображают иконки, а также и прозрачность.
Вопрос можно закрыть, но тем не менее если кто знает как сделать иконки на D2006 - скажите. Програмистами не рождаются, ими становятся! |
#10
|
||||
|
||||
Могу предложить альтернативное решение:- используйте TActionMainMenuBar.
Там все нормально с отображением, с ImageList или без него. В принципе TMainMenu - это ну очень старый компонент и даже в XP с ним возможны глюки. Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#11
|
||||
|
||||
Цитата:
TActionMainMenuBar Пробывал - на выходе получаешь меню аля офис 2003. А нужно Win7, да в младших версиях делфи уже то что нужно, но и простой MainMenu даёт нужный результат. Програмистами не рождаются, ими становятся! |
#12
|
|||
|
|||
Цитата:
В принципе, уже 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) Последний раз редактировалось Aniskin, 10.11.2013 в 16:12. |
#13
|
||||
|
||||
В XE3 все нормально, aero не слетает.
|
#14
|
|||
|
|||
Я бы помог Вам, но у меня Delphi 7.
|