如何添加在OSX上按预期工作的菜单项分隔符?
在Windows平台上,使用VCL ,当我们想在菜单中添加分隔符时,我们添加一个带有Caption := '-'
的TMenuItem
Caption := '-'
;
使用FireMonkey ,我们添加一个带有Text := '-'
的TMenuItem
;
它在Windows平台上按预期工作,具有Text =' - '的项目显示为分隔符。
但是,当我在OSX上运行相同的应用程序时,我可以看到减号...
我没有发现任何属性在TMenuItem
指定它是一个分隔符 ...
我曾尝试使用TMainMenu
和TMenuBar
( UseOSMenu := True|False;
),但我仍然遇到此问题。
任何想法创建一个真正的分隔符? (否则,我将检查操作系统并将其删除,如果OSX ...)
这是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}
我从来没有为Mac编写过程,而且我也没有使用Mac,但出于好奇,我找到了一些关于它的Apple文档。
菜单分隔符项目是一个禁用的空白菜单项,也许你可以假装:
separatorItem
返回用于分隔菜单命令的逻辑组的菜单项。 +(NSMenuItem *)separatorItem返回值
一个菜单项,用于分隔菜单命令的逻辑组。
讨论
该菜单项被禁用。 默认分隔符项目是空格。
(来自:http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ApplicationKit/Classes/NSMenuItem_Class/Reference/Reference.html#//apple_ref/doc/c_ref/NSMenuItem)
我没有这方面的测试设备,但值得一试。
默认情况下,FireMonkey创建它自己的完全样式菜单,但将TMenuBar.UseOSMenu属性设置为true,并使用OS调用来创建菜单。
然后,您可以将其与创建已经讨论过的Cocoa菜单的建议结合起来。
来自http://docwiki.embarcadero.com/RADStudio/en/FireMonkey_Application_Design#Menus:
“将TMenuBar.UseOSMenu属性设置为True将导致FireMonkey创建带有OS调用的菜单树,从而生成本机菜单。在Windows上,此菜单位于父窗体的顶部,并使用当前的外观主题显示。 OS X,只要应用程序拥有焦点,菜单将显示在主屏幕顶部的全局菜单栏中。“
链接地址: http://www.djcxy.com/p/91069.html上一篇: How to add menu items separators which work as expected on OSX?