德尔福Xe2U4。主菜单项:文件、选项、帮助(名称:HelpMenuItem)。 2 个按钮。使用 StyleManager Xe2(在项目选项中启用 xe2 主题,并默认设置“Metro Blue”)。
Procedure TForm1.RightMenu; // Shift in the right of last item of the menu
var mii: TMenuItemInfo;MainMenu: hMenu; Buffer: array[0..79] of Char;
begin
MainMenu := Self.Menu.Handle;
mii.cbSize := SizeOf(mii) ;
mii.fMask := MIIM_TYPE;
mii.dwTypeData := Buffer;
mii.cch := SizeOf(Buffer) ;
GetMenuItemInfo(MainMenu, HelpMenuItem.Command, false, mii) ;
mii.fType := mii.fType or MFT_RIGHTJUSTIFY;
SetMenuItemInfo(MainMenu, HelpMenuItem.Command, false, mii) ;
end;
procedure TForm1.Metro1Click(Sender: TObject); // Not Work
begin
TStyleManager.TrySetStyle('Metro Blue'); // or any other
RightMenu;
end;
procedure TForm1.Windows1Click(Sender: TObject); // Work
begin
TStyleManager.TrySetStyle('Windows'); // standart theme
RightMenu;
end;
为什么在使用主题时不起作用?
是否有正常的方法来移动右侧菜单的最后一点,是否不应用依赖方案?
不幸的是,vcl 风格的钩子TMainMenu http://docwiki.embarcadero.com/Libraries/en/Vcl.Menus.TMainMenu没有实现绘制向右对齐的特定菜单项的代码。另外,这个vcl样式钩子(TMainMenuBarStyleHook)作为严格的私有成员嵌入在TFormStyleHook(表单的vcl样式钩子)中,因此这里没有太多修改的空间。修复此问题需要您为 TForms 和 TMainMenus 重写新的 vcl 样式挂钩。因此,如果您想这样做,您必须将 TFormStyleHook 类从 Vcl.Forms 单元复制到新单元,然后修复该单元的实现TFormStyleHook.TMainMenuBarStyleHook.DrawItem
和TFormStyleHook.TMainMenuBarStyleHook.Paint
方法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)