1

我找到了一个使用该TMenuBar.UseOSMenu属性放置 Windows 和 Mac 主菜单的示例。但它似乎只适用于德尔福。TMenuBar我在 C++Builder的 FMX 组件中找不到相同的属性。

有谁知道如何在 C++ 中的 Mac OSX 上的 Apple 菜单栏中放置一个菜单栏?

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

4

2 回答 2

0

UseOSMenu在 10.1 Berlin、Delphi 或 C++ 中没有属性。它在 XE3 中被删除:

FireMonkey XE3 的新单位和变化

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

另见:

在 FireMonkey 应用程序中使用菜单

为 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 标准)上。
于 2017-01-18T20:32:37.923 回答
0

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

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

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

于 2021-04-22T16:14:00.577 回答