我应该在Firemonkey中使用TMainMenu来支持Windows和OS-X吗?

时间:2015-09-04 00:27:02

标签: windows macos delphi firemonkey delphi-xe8

我正在阅读documentation for menus in Firemonkey desktop applications。它解释了有两个完全不同的菜单组件,一个用于Windows(TMenuBar),另一个用于OS-X(TMainMenu)。

此外,它还解释了OS-X上不显示TMenuBar(OS-X的非标准),并且TMainMenu被放置在Windows窗体的非客户区域中(非标准的Windows)

我的理解是Firemonkey应该是多个平台的一个代码库,但似乎他们希望我将两者分开。我可以理解两个平台上的菜单工作方式不同,但实现两个不同的主菜单(并根据平台有条件地显示/隐藏它们)似乎是不必要的痛苦。我无意使用特定于任一平台的菜单的特殊功能。更不用说TMenuBar完全是丑陋的。

由于TMainMenu也会在Windows上显示,但同时也宣称它不符合Windows",我可以假设TMainMenu对两者都足够吗?或者我真的需要为Windows实现单独的TMenuBar吗?如果我不将它们分开,会有什么影响?

我看到了this video,但它是Delphi XE2的,我在Delphi XE8 TMenuBar控件中找不到这样的选项。同样,TMenuBar非常难看,并且不像TMainMenu那样像典型的菜单一样工作。我很困惑他们为什么建议使用这个TMenuBar

1 个答案:

答案 0 :(得分:2)

链接到的帮助页面是错误的,如果'FireMonkey-native'(可以这么说)不是一个问题(我的意思是,请参见下文)。 TMainMenu在Windows上不是“非标准” - 它包装了Windows本机菜单栏API,就像VCL等价物一样。相比之下,TMenuBar完全是定制的。

也就是说,一般来说,自从Office 97在二十年前就这样做以来,时尚一直是在Windows上使用自定义菜单栏,但原始菜单栏API仍然完全支持并由Windows中的记事本使用(例如) 10.此外,编写一个体面的自定义菜单,以便它正确地伪造一个真正的自定义菜单 - 以及证明导致不首先使用真实的附加功能 - 需要相当多的努力和详细的API知识。不幸的是,人们可能会怀疑FMX产品是否享有此功能,这并不是说它将来不会好转。

一个警告 - 使用TMenuBar的一个原因可能是您使用FMX的自定义样式选项,并希望您的菜单栏完全参与。