Delphi 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;
为什么不使用主题? 无论是否有正常的方法来移动右边菜单的最后一个点,是否应用了依赖方案?
答案 0 :(得分:3)
不幸的是TMainMenu
的vcl样式钩子没有实现代码来绘制与右边对齐的特定菜单项。此vcl样式钩子(TMainMenuBarStyleHook)作为严格的私有成员嵌入在TFormStyleHook(表单的vcl样式钩子)中,因此这里没有太多修改空间。修复此问题需要您为TForms和TMainMenus重写一个新的vcl样式挂钩。因此,如果要执行此操作,必须将TFormStyleHook类从Vcl.Forms单元复制到新单元,然后修复TFormStyleHook.TMainMenuBarStyleHook.DrawItem
和TFormStyleHook.TMainMenuBarStyleHook.Paint
方法的实现。
答案 1 :(得分:0)
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;
if SetMenuItemInfo(MainMenu, HelpMenuItem.Command, false, mii) then DrawMenuBar(self.Menu.WindowHandle);
end;