在 Windows 平台上,使用 VCL ,当我们要在菜单中添加分隔符时,我们会添加{{1} } TMenuItem
;
使用 FireMonkey ,我们添加Caption := '-'
TMenuItem
;
它在Windows平台上按预期工作,带有Text =' - '的项目显示为分隔符。
但是,当我在 OSX 上运行相同的应用程序时,我看到了减号......
我在Text := '-'
上找不到任何属性来指定它是分隔符 ...
我尝试使用TMenuItem
和TMainMenu
(TMenuBar
),我仍然遇到此问题。
想创建一个真正的分隔符吗?(否则,我会检查操作系统并在OSX中删除它...)
答案 0 :(得分:4)
这是FireMonkey中的一个错误。我相信他们会解决它。但同时你可以使用下面的代码。在主窗体的OnActivate事件中调用FixSeparatorItemsForMac过程。
请勿忘记使用列表中的mac特定文件。
uses
...
{$IFDEF MACOS}
,Macapi.ObjectiveC,MacApi.AppKit,MacApi.Foundation,FMX.Platform.Mac
{$ENDIF}
{$IFDEF MACOS}
Procedure FixSeparatorItemsForMenuItem(MenuItem:NSMenuItem);
var i:Integer;
subItem:NSMenuItem;
begin
if (MenuItem.hasSubmenu = false) then exit;
for i := 0 to MenuItem.submenu.itemArray.count -1 do
begin
subItem := MenuItem.submenu.itemAtIndex(i);
if (subItem.title.isEqualToString(NSSTR('-'))= true) then
begin
MenuItem.submenu.removeItemAtIndex(i);
MenuItem.submenu.insertItem(TNSMenuItem.Wrap(TNSMenuItem.OCClass.separatorItem),i);
end else begin
FixSeparatorItemsForMenuItem(subItem);
end;
end;
end;
Procedure FixSeparatorItemsForMac;
var NSApp:NSApplication;
MainMenu:NSMenu;
AppItem: NSMenuItem;
i: Integer;
begin
NSApp := TNSApplication.Wrap(TNSApplication.OCClass.sharedApplication);
MainMenu := NSApp.mainMenu;
if (MainMenu <> nil) then
begin
for i := 0 to MainMenu.itemArray.count -1 do
begin
AppItem := mainMenu.itemAtIndex(i);
FixSeparatorItemsForMenuItem(AppItem);
end;
end;
end;
{$ENDIF}
答案 1 :(得分:0)
我从来没有为Mac编程,而且我没有使用Mac,但出于好奇,我找到了一些Apple文档。
“菜单分隔符”项是一个禁用的空白菜单项,也许你可以假装:
separatorItem
返回一个菜单项,用于分隔菜单的逻辑组 命令。 +(NSMenuItem *)separatorItem返回值
一个菜单项,用于分隔菜单命令的逻辑组。
讨论
此菜单项已禁用。默认分隔符项是空格。
答案 2 :(得分:-1)
我没有测试这个的设施,但值得一试。
默认情况下,FireMonkey会创建自己的完全样式菜单,但会将TMenuBar.UseOSMenu属性设置为true,并使用OS调用来创建菜单。
然后,您可以将此与已经讨论过的创建Cocoa菜单的建议结合起来。
来自http://docwiki.embarcadero.com/RADStudio/en/FireMonkey_Application_Design#Menus:
“将TMenuBar.UseOSMenu属性设置为True会导致FireMonkey创建带有OS调用的菜单树,从而生成本机菜单。在Windows上,此菜单位于父窗体的顶部,并使用当前外观主题显示。在Mac OS X上,只要应用程序有焦点,菜单就会显示在主屏幕顶部的全局菜单栏中。“