Форум: "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