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

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

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

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

既然TMainMenu也在Windows上显示,但也声称它是“非标准的Windows”,我可以假设TMainMenu对两者都足够吗?或者我真的需要为Windows实现单独的TMenuBar吗?如果我不将它们分开,会有什么影响?

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

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

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

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

点赞