【问题标题】:How to put menu bar in Apple menu bar in Mac OS by C++ Builder?如何通过 C++ Builder 将菜单栏放在 Mac OS 中的 Apple 菜单栏中?
【发布时间】:2017-01-17 02:15:30
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案1】:

    在 10.1 Berlin、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 标准)。

    【讨论】:

    • 谢谢,雷米。在 Mac OS X 上使用 TMainMenu 效果很好。
    • 嗨 Remy,你知道当应用程序适用于 Windows 时如何禁用/隐藏 TMainMenu 吗?我的应用程序预计将用于 Mac OS X 和 Windows。对于上述评论,我需要在 Windows 上使用“TMenuBar”,在 Mac OS X 上使用“TMainMenu”。当它在 Mac OS X 中运行时我可以隐藏“TMenuBar”,但在 Windows 上运行时我不能隐藏“TMainMenu”。如果我只对两个操作系统都使用“TMainMenu”,有时它会在 Windows 运行时报告错误异常。是否可以在 Mac OS X 和 Windows 上使用“TmainMenu”?谢谢!
    • 我不知道。这是一个使用每个平台视图通常有意义的领域,除了你不能在单独的视图中拥有每个平台的组件,我认为这真的很愚蠢。 FireMonkey 的全部意义在于编写一次代码并跨平台使用,那么为什么没有一个菜单组件在每个平台上都有相应的行为呢?我不知道。您可能不得不求助于$IFDEFs 在需要时动态创建每个菜单组件。
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多