如何通过 C++ Builder 在 Mac OS 的 Apple 菜单栏中放置菜单栏?
How to put menu bar in Apple menu bar in Mac OS by C++ Builder?
我找到了一个使用 TMenuBar.UseOSMenu
属性 为 Windows 和 Mac 放置主菜单的示例。但它似乎只适用于 Delphi。我在 C++Builder 的 FMX TMenuBar
组件中找不到相同的 属性。
有谁知道如何在 C++ Mac OSX 上的 Apple 菜单栏中放置一个菜单栏?
我正在使用 C++ Builder 10.1 Berlin Update 2。
10.1 Berlin、Delphi 或 C++ 中没有 UseOSMenu
属性。它在 XE3 中被删除:
New Units and Changes in FireMonkey XE3
UseOSMenu has been removed. For multi-platform applications, you should use FMX.Menus.TMainMenu
, a nonvisual component
另见:
Using Menus in a FireMonkey Application
Creating Menus for OS X and Windows
Use the correct control for your target system (OS X vs. Windows).
For Windows applications, use the TMenuBar
control:
- The main menu is placed in the client area of the form (standard for Windows).
- The menu items are not on the Mac OS X menu bar (nonstandard for OS X).
For Mac OS X applications, use the TMainMenu
component:
- The main menu is placed in the non-client area of the Windows form (nonstandard for Windows).
- Menu items are placed on the Mac OS X menu bar (standard for OS X).
求助于 $IFDEF 并在代码中构建菜单是可行的。但奇怪的是 FMX 没有以更便携的方式处理主菜单。
照原样,TMainMenu 还不错,但有一些小问题:在 Mac 上,第一个定义的菜单变成了应用程序菜单,您给它的名称替换为应用程序名称。因此,有必要使用虚拟名称(例如“App”)创建第一个菜单,并在该菜单上使用通常的“关于”命令。那么File菜单就是要定义的second菜单。当 运行 在 PC 上时,第一个虚拟“App”菜单需要在代码中删除,否则它会显示。在 Mac(但不是 PC)上,FMX 添加了一个未请求的“Window”菜单作为最后一个菜单;我不知道如何防止这种情况。
另一个问题是快捷方式。我还没有找到在 TMainMenu 的项目编辑器中以可移植的方式设置这些的方法,即导致在 PC 上按 Ctrl,在 Mac 上按 Cmd。哦,好吧,也许毕竟唯一好的解决方案真的是用完全独立的 TMenuBar 和 TMainMenu 以及 $IFDEFs 在代码中构建它!
我找到了一个使用 TMenuBar.UseOSMenu
属性 为 Windows 和 Mac 放置主菜单的示例。但它似乎只适用于 Delphi。我在 C++Builder 的 FMX TMenuBar
组件中找不到相同的 属性。
有谁知道如何在 C++ Mac OSX 上的 Apple 菜单栏中放置一个菜单栏?
我正在使用 C++ Builder 10.1 Berlin Update 2。
10.1 Berlin、Delphi 或 C++ 中没有 UseOSMenu
属性。它在 XE3 中被删除:
New Units and Changes in FireMonkey XE3
UseOSMenu has been removed. For multi-platform applications, you should use
FMX.Menus.TMainMenu
, a nonvisual component
另见:
Using Menus in a FireMonkey Application
Creating Menus for OS X and Windows
Use the correct control for your target system (OS X vs. Windows).
For Windows applications, use the
TMenuBar
control:
- The main menu is placed in the client area of the form (standard for Windows).
- The menu items are not on the Mac OS X menu bar (nonstandard for OS X).
For Mac OS X applications, use the
TMainMenu
component:
- The main menu is placed in the non-client area of the Windows form (nonstandard for Windows).
- Menu items are placed on the Mac OS X menu bar (standard for OS X).
求助于 $IFDEF 并在代码中构建菜单是可行的。但奇怪的是 FMX 没有以更便携的方式处理主菜单。
照原样,TMainMenu 还不错,但有一些小问题:在 Mac 上,第一个定义的菜单变成了应用程序菜单,您给它的名称替换为应用程序名称。因此,有必要使用虚拟名称(例如“App”)创建第一个菜单,并在该菜单上使用通常的“关于”命令。那么File菜单就是要定义的second菜单。当 运行 在 PC 上时,第一个虚拟“App”菜单需要在代码中删除,否则它会显示。在 Mac(但不是 PC)上,FMX 添加了一个未请求的“Window”菜单作为最后一个菜单;我不知道如何防止这种情况。
另一个问题是快捷方式。我还没有找到在 TMainMenu 的项目编辑器中以可移植的方式设置这些的方法,即导致在 PC 上按 Ctrl,在 Mac 上按 Cmd。哦,好吧,也许毕竟唯一好的解决方案真的是用完全独立的 TMenuBar 和 TMainMenu 以及 $IFDEFs 在代码中构建它!