Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Программа и интерфейс
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 04.10.2013, 10:01
Аватар для SCrat.ORS
SCrat.ORS SCrat.ORS вне форума
Активный
 
Регистрация: 20.02.2007
Адрес: Мой адрес не дом и не улица, мой адрес 0x7С00
Сообщения: 208
Версия Delphi: 2006
Репутация: 884
По умолчанию Меню с иконками в стиле 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  
Старый 04.10.2013, 10:14
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

подключи к проекту 1 24 манифест:

PHP код:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <assemblyIdentity
      type="win32"
    name="DelphiApplication"
    version="1.0.0.0" 
      processorArchitecture="*"/>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity
        type="win32"
        name="Microsoft.Windows.Common-Controls"
        version="6.0.0.0"
        publicKeyToken="6595b64144ccf1df"
        language="*"
        processorArchitecture="*"/>
    </dependentAssembly>
  </dependency>
</assembly>
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #3  
Старый 04.10.2013, 11:23
Аватар для SCrat.ORS
SCrat.ORS SCrat.ORS вне форума
Активный
 
Регистрация: 20.02.2007
Адрес: Мой адрес не дом и не улица, мой адрес 0x7С00
Сообщения: 208
Версия Delphi: 2006
Репутация: 884
По умолчанию

Подключен, - не помогает
__________________
Програмистами не рождаются, ими становятся!
Ответить с цитированием
  #4  
Старый 04.10.2013, 21:49
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Попробовал на D7 под W7 подключив манифест - работает, смотрите настройки среды
Ответить с цитированием
  #5  
Старый 06.10.2013, 19:46
Аватар для SCrat.ORS
SCrat.ORS SCrat.ORS вне форума
Активный
 
Регистрация: 20.02.2007
Адрес: Мой адрес не дом и не улица, мой адрес 0x7С00
Сообщения: 208
Версия Delphi: 2006
Репутация: 884
По умолчанию

Цитата:
Сообщение от Alegun
Попробовал на D7 под W7 подключив манифест - работает, смотрите настройки среды
Какие именно настройки смотреть? у меня 2006 делфа.
__________________
Програмистами не рождаются, ими становятся!
Ответить с цитированием
  #6  
Старый 06.10.2013, 20:15
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

У меня D7, с 2006 не знаком и желания знакомиться нет совершенно, мог бы посоветовать сделать даунгрейд , но возможно всё дело в системных компонентах, напр. таких как .NET SDK или .NET Framework, ну или MS XML, вдруг чего не хватает, может их обновить надо на более свежие, возможно здесь собака и зарыта
Ответить с цитированием
  #7  
Старый 06.10.2013, 22:06
Аватар для SCrat.ORS
SCrat.ORS SCrat.ORS вне форума
Активный
 
Регистрация: 20.02.2007
Адрес: Мой адрес не дом и не улица, мой адрес 0x7С00
Сообщения: 208
Версия Delphi: 2006
Репутация: 884
По умолчанию

Не, мне кажется .NET здесь вообще ни при чём, т.к. он не используется. Проблема заключается в том, что когда подключаешь к меню ImageList, то у него включается OwnerDraw и соответственно выключается манифест и используется ручная отрисовка. Как бы выключить OwnerDraw? Простая установка флага OwnerDraw:=False; после подключения ImageList результатов не дает. Может где-то в компоненте надо поковыряться. Но где. Может создать свой компонент Меню на основе стандартного, но как, - знать не знаю. Где бы поковыряться. Даунгрейд - не вариант, т.к. Д7 не совсем фантан для довольно большой программы написанной на Д2006 - потом половина функционала работать перестанет. Я скачиваю Д2010 - там вроде бы нормально должно пойти, но Душа привыкла к Д2006.
__________________
Програмистами не рождаются, ими становятся!

Последний раз редактировалось SCrat.ORS, 06.10.2013 в 22:09.
Ответить с цитированием
  #8  
Старый 07.10.2013, 09:31
Аватар для SCrat.ORS
SCrat.ORS SCrat.ORS вне форума
Активный
 
Регистрация: 20.02.2007
Адрес: Мой адрес не дом и не улица, мой адрес 0x7С00
Сообщения: 208
Версия Delphi: 2006
Репутация: 884
По умолчанию

Нашел такую вещь, можно прицепить картинку функцией SetMenuItemBitmaps. Функция изменяет вид Check галочки на картинку, всё вроде бы хорошо, но не устанавливается прозрачность, и цепляется только BMP, и работает только с HMENU.
Получается вот так:


при использовании с компонентом TMainMenu/TPopupMenu (Handle) - результатов не даёт. - Как использовать SetMenuItemBitmaps c Компонентами? и как сделать прозрачность?

Продолжаю думать дальше...,
__________________
Програмистами не рождаются, ими становятся!
Ответить с цитированием
  #9  
Старый 07.10.2013, 11:03
Аватар для SCrat.ORS
SCrat.ORS SCrat.ORS вне форума
Активный
 
Регистрация: 20.02.2007
Адрес: Мой адрес не дом и не улица, мой адрес 0x7С00
Сообщения: 208
Версия Delphi: 2006
Репутация: 884
По умолчанию

Установил D2010, там работает и так и сяк и этак и все функции нормально отображают иконки, а также и прозрачность.
Вопрос можно закрыть, но тем не менее если кто знает как сделать иконки на D2006 - скажите.
__________________
Програмистами не рождаются, ими становятся!
Ответить с цитированием
  #10  
Старый 07.10.2013, 12:22
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Могу предложить альтернативное решение:- используйте TActionMainMenuBar.
Там все нормально с отображением, с ImageList или без него.
В принципе TMainMenu - это ну очень старый компонент и даже в XP с ним возможны глюки.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #11  
Старый 07.10.2013, 15:04
Аватар для SCrat.ORS
SCrat.ORS SCrat.ORS вне форума
Активный
 
Регистрация: 20.02.2007
Адрес: Мой адрес не дом и не улица, мой адрес 0x7С00
Сообщения: 208
Версия Delphi: 2006
Репутация: 884
По умолчанию

Цитата:
Сообщение от Страдалецъ
Могу предложить альтернативное решение:- используйте TActionMainMenuBar.
Там все нормально с отображением, с ImageList или без него.
В принципе TMainMenu - это ну очень старый компонент и даже в XP с ним возможны глюки.

TActionMainMenuBar Пробывал - на выходе получаешь меню аля офис 2003. А нужно Win7, да в младших версиях делфи уже то что нужно, но и простой MainMenu даёт нужный результат.
__________________
Програмистами не рождаются, ими становятся!
Ответить с цитированием
  #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)

Последний раз редактировалось Aniskin, 10.11.2013 в 16:12.
Ответить с цитированием
  #13  
Старый 20.11.2013, 22:28
Аватар для Decoding
Decoding Decoding вне форума
Местный
 
Регистрация: 03.06.2006
Адрес: Почту найдете на моем сайте
Сообщения: 576
Версия Delphi: D10.2
Репутация: 214
По умолчанию

В XE3 все нормально, aero не слетает.
Ответить с цитированием
  #14  
Старый 22.02.2014, 07:09
Egorkaru Egorkaru вне форума
Прохожий
 
Регистрация: 21.01.2014
Адрес: Белово, Кемеровская обл., Россия
Сообщения: 10
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Я бы помог Вам, но у меня Delphi 7.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 23:16.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter