Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2019.03.10;
Скачать: [xml.tar.bz2];

Вниз

Стиль меню под Vista и 7   Найти похожие ветки 

 
Maksim V. ©   (2010-03-10 14:04) [0]

Доброго времени суток! При разработке столкнулся с небольшой проблемой. Требуется добавить своё Popup меню в подменю. Код примерно следующий:


 SubMenu := GetSubMenu(GetMenu(hMain), 0);

 hPopup := CreatePopupMenu;

 ZeroMemory(@lpmii, SizeOf(TMenuItemInfoW));
 lpmii.cbSize   := SizeOf(TMenuItemInfoW);
 lpmii.fMask    := MIIM_SUBMENU;
 lpmii.hSubMenu := hPopup;
 SetMenuItemInfoW(SubMenu, 1, TRUE, lpmii);

 InsertMenuW(hPopup, 0, MF_BYCOMMAND, uIdMenuItem, @pszText[1]);

 DestroyMenu(hPopup);
 DrawMenuBar(hMain);


Так вот, подменю добавляется как и положено, только отрисовка его элементов выглядит "по старому", не как в Висте или Семерке - высота пунктов меньше, нет градиентной заливки и закругленных краев. Как решить эту проблему?


 
oldman ©   (2010-03-10 19:09) [1]

инсталлировать дельфи под Вистой.
под ней же компилить.
имхо.


 
Maksim V. ©   (2010-03-10 19:32) [2]

Да ну нет, не может же быть такого. Чего же под Vista делфи может накомпилировать нежели чем на XP?

Ведь наподобие код "работает":

 Menu := LoadMenuW(hInstance, MAKEINTRESOURCEW(uId));
 SubMenu := GetSubMenu(Menu, 0);
 GetCursorPos(P);
 SetForegroundWindow(hWnd);
 InsertMenuW(SubMenu, 0, MF_BYCOMMAND, uIdMenuItem, @pszText[1]);
 TrackPopupMenu(SubMenu, TPM_CENTERALIGN or TPM_LEFTBUTTON, P.X, P.Y, 0, aWnd, nil);
 DestroyMenu(Menu);


То есть можно спокойно присоединить элементы меню в подменю загруженного шаблона, а вот чтобы присоединить уже готовое Popup меню - нет.


 
Anatoly Podgoretsky ©   (2010-03-11 08:52) [3]

> Maksim V.  (10.03.2010 19:32:02)  [2]

И главное как же оно решит, на какой платформе будет запускаться программа, ведь такой настройки то нет.


 
Maksim V. ©   (2010-03-11 16:18) [4]

Нет возможности установить под вистой делфи 7, но если так в лоб подумать, то к чему тут вообще платформа. Я делаю приложение вообще без VCL обертки. Тем более когда выпустили делфи 7, висты и в помине толком то не было, откуда делфи узнает целевую платформу? Может я компилирую вообще под Windows 2000, а программа будет на семерке работать, какая разница, все равно все сводится к вызову системных функций. Хотя может какие-то хитрые директивы компилятору надо указать?


 
Maksim V. ©   (2010-12-05 13:29) [5]

Разобрался. Короче если перед TrackPopupMenu вызвать DestroyMenu, то меню будет отображено в старом стиле. Очень спорный момент, когда требуется обновлять хэндл подменю, полученный через GetMenuItemInfo в сообщении WM_INITMENUPOPUP.


 
DVM ©   (2010-12-05 16:18) [6]


> Maksim V. ©   (10.03.10 14:04) 

Манифест в ресурсы положи правильный и не забудь убрать тот что там может быть уже есть, если уже успел добавить (XPManifest)


 
DVM ©   (2010-12-05 16:19) [7]


> Может я компилирую вообще под Windows 2000, а программа
> будет на семерке работать, какая разница, все равно все
> сводится к вызову системных функций

Кстати, разница бывает что есть, как ни странно. Но это не твой случай.


 
Maksim V. ©   (2010-12-05 17:48) [8]


> DVM ©   (05.12.10 16:18) [6]
> Манифест в ресурсы положи правильный и не забудь убрать
> тот что там может быть уже есть, если уже успел добавить
> (XPManifest)


Манифест я позаимствовал из мюторрента.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
 <assemblyIdentity
     version="1.0.0.0"
     processorArchitecture="X86"
     name="client"
     type="win32"
 />
 <description>Application description here</description>
 <!-- Enable Windows XP and higher themes with common controls -->
 <dependency>
   <dependentAssembly>
     <assemblyIdentity
       type="win32"
       name="Microsoft.Windows.Common-Controls"
       version="6.0.0.0"
       processorArchitecture="X86"
       publicKeyToken="6595b64144ccf1df"
       language="*"
     />
   </dependentAssembly>
 </dependency>
 <!-- Disable Windows Vista UAC compatability heuristics -->
 <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
   <security>
     <requestedPrivileges>
       <requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>
     </requestedPrivileges>
   </security>
 </trustInfo>
 <!-- Enable Windows Vista-style font scaling on Vista -->
 <asmv3:application xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
   <asmv3:windowsSettings xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
     <dpiAware>true</dpiAware>
   </asmv3:windowsSettings>
 </asmv3:application>
</assembly>



> DVM ©   (05.12.10 16:19) [7]
> Кстати, разница бывает что есть, как ни странно. Но это
> не твой случай.

Можно пример случая?


 
DVM ©   (2010-12-05 19:48) [9]


> Maksim V. ©   (05.12.10 17:48) [8]


> Манифест я позаимствовал из мюторрента.

вроде все на месте


> Можно пример случая?

Визуальная часть программы настраивается компилируется под XP а запускается под W7 - при определенном сочетании анкоров и выравниваний под w7 немного искажаются размеры формы и положение контролов на ней. И наоборот, если скомпилировать под w7 - в WinXP искажаются.


 
Maksim V. ©   (2010-12-05 20:10) [10]


> DVM ©   (05.12.10 19:48) [9]
> Визуальная часть программы настраивается компилируется под
> XP а запускается под W7 - при определенном сочетании анкоров
> и выравниваний под w7 немного искажаются размеры формы и
> положение контролов на ней. И наоборот, если скомпилировать
> под w7 - в WinXP искажаются.

Я использую шаблоны диалогов, а там всё в диалоговых юнитах, в ресурс хакере клепаю. Если требуется менять размеры диалоговых окон/контролов на них (или позиции контролов), опять же, пересчитываю в диалоговых юнитах размеры/расстояния. Всё просто и универсально. :)



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2019.03.10;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.001 c
2-1478291127
Иван
2016-11-04 23:25
2019.03.10
Определить путь к файлу (TSearchRec)


1-1360856114
brother
2013-02-14 19:35
2019.03.10
Перевести с C++


4-1268219090
Maksim V.
2010-03-10 14:04
2019.03.10
Стиль меню под Vista и 7


2-1478620871
Некто
2016-11-08 19:01
2019.03.10
StringGrid.Objects


2-1477614402
Artem78
2016-10-28 03:26
2019.03.10
Получить адрес потока видео с Youtube





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский