如何在C ++ Builder中将菜单栏放在Mac OS的Apple菜单栏中?

时间:2017-01-17 02:15:30

标签: c++builder firemonkey c++builder-10.1-berlin

我找到了一个使用TMenuBar.UseOSMenu属性为Windows和Mac放置主菜单的示例。但它似乎只适用于Delphi。我在C ++ Builder中的FMX&#39 {s} TMenuBar组件中找不到相同的属性。

有没有人知道如何在Mac OSX的C ++菜单栏中放置菜单栏?

我正在使用C ++ Builder 10.1 Berlin Update 2。

2 个答案:

答案 0 :(得分:0)

10.1柏林,Delphi或C ++中没有UseOSMenu属性。它在XE3中删除了:

New Units and Changes in FireMonkey XE3

  

已删除UseOSMenu 。对于多平台应用程序,您应该使用FMX.Menus.TMainMenu,一个非可视组件

另见:

Using Menus in a FireMonkey Application

  

为OS X和Windows创建菜单

     

为目标系统使用正确的控件(OS X与Windows)。

     
      
  • 对于Windows应用程序,请使用TMenuBar控件:

         
        
    • 主菜单位于表单的客户区域(Windows标准)。
    •   
    • 菜单项不在Mac OS X菜单栏上(OS X非标准)。
    •   
  •   
  • 对于Mac OS X应用程序,请使用TMainMenu组件:

         
        
    • 主菜单位于Windows窗体的非客户区域(Windows标准)。
    •   
    • 菜单项放在Mac OS X菜单栏上(OS X的标准)。
    •   
  •   

答案 1 :(得分:0)

求助于 $IFDEF 并在代码中构建菜单会起作用。但奇怪的是 FMX 没有以更便携的方式处理主菜单。

按原样,TMainMenu 还不错,但有一些小问题:在 Mac 上,第一个定义的菜单变成了应用程序菜单,您给它的名称由应用程序名称代替。因此,有必要使用虚拟名称(例如“App”)创建第一个菜单,并在该菜单上使用通常的“关于”命令。然后文件菜单是要定义的第二个菜单。在 PC 上运行时,需要在代码中删除第一个虚拟“应用程序”菜单,否则会显示。在 Mac 上(但不是在 PC 上)FMX 添加了一个未请求的“窗口”菜单作为最后一个菜单;我不知道如何防止这种情况发生。

另一个问题是快捷方式。我还没有找到一种方法来以可移植的方式在 TMainMenu 的项目编辑器中设置这些,即导致 PC 上的 Ctrl 和 Mac 上的 Cmd。哦,好吧,也许毕竟唯一好的解决方案真的是用完全独立的 TMenuBar 和 TMainMenu 以及 $IFDEFs 在代码中构建它!