【问题标题】:Can we use Popupmenu in FMX?我们可以在 FMX 中使用 Popupmenu 吗?
【发布时间】:2024-08-21 04:45:01
【问题描述】:

我正在 FMX 中开发一个移动应用程序,我需要 Popupmenu,但它在 Tool Palette 中显示为禁用,我无法使用它,但在 VCL 中它在 Tool Palette 中启用并且可以使用它。我只想知道 Firemonkey 是否支持 Popupmenu 或者我的安装有问题或者我们必须使用其他工具而不是 FMX 中的 Popupmenu?或者我还能做什么?

实际上我打开了一个 VCL 项目并将 popupmenu 从那里复制到 FMX 并在一个按钮上编写代码,该代码是

procedure TFRM_Party.BTN_Party_OptionClick(Sender: TObject);
begin
  PopupMenu1.Popup(10,10);
  PopupMenu1.Parent := Self;
end;

此代码没有显示任何错误,也没有执行。 该怎么办?有人有想法吗?

【问题讨论】:

  • 我删除了一些标签,因为它们对您的问题并不重要。但是,您应该为您的 Delphi 版本添加标签,或在问题文本中注明。
  • 混合代码从VclFmx 或vv。很可能会失败,即使在某些特殊情况下可能会失败。不要依赖此类解决方案。一个正确开始的FMX 项目提供并接受TPopupMenu 组件就好了。如果您详细描述了创建新项目并尝试使用菜单组件所采取的步骤,那么有人可以评估可能出了什么问题。

标签: delphi firemonkey


【解决方案1】:

您的问题的简短回答是“是”,您应该能够在 IDE 中从 File | New |Multi-Device Application 创建的项目中使用 TPopupMenu 的 FMX 版本。如果您在组件面板上找不到 FMX TPopupMenu,那么您的 Delphi 安装一定有问题。当您说它“已禁用”时,我不太清楚您的意思 - 组件通常要么在组件面板上,要么不在,我不记得在那里看到一个看起来被禁用的。

你没有在你的问题中说你使用的是哪个版本的 Delphi,但如果它有 FireMonkey,AFAIK 它肯定应该有TPopupMenu 的 FMX 版本。

例如,在 Delphi 10.2 Seattle 中,FMX TPopupMenu 出现在组件选项板的“标准”选项卡上,并包含在源单元 FMX.Menus 以及 TMenuBarTMainMenu 中.

如果您在 IDE 中转到 Component | Install packages,弹出窗口应在列表中显示 Embarcadero FMX Standard Components,这是您的 Delphi 安装文件夹中的 bin 文件夹中的文件 dclfmxstd250.bpl。如果该软件包未列出,这就解释了为什么您找不到 FMX TPopupMenu,但如果您遇到这种情况,那么您的 Delphi 应该缺少除 TPopupMenu 之外的更多 FMC 组件。但是,它应该可以通过安装.bpl 文件(或在您的Delphi 版本中的等效文件)轻松解决。如果包那里,点击弹出窗口右下角的Components按钮应该会调出FXM标准组件的整个列表(在我的例子中确实 包括TPopupMenu)。

如果您的Delphi确实包含Embarcadero FMX Standard Components,但仍然缺少TPopupMenu,您可以尝试创建一个新包,将FMX.Menus.pas 添加到其中并在IDE 中编译和安装它。

顺便说一句,虽然 可能 设置一个 FMX + VCL 组合项目(谷歌如何),只是因为你可以在 FMX 表单上放置一个 VCL TPopupMenu'并不意味着它会起作用。

【讨论】:

  • 仅供参考,西雅图是 10.0。东京是 10.2。
  • @RemyLebeau:谢谢。我的 ESD 文件中的安装程序自称“Rad Studio 10 Seattle”,而 Help |关于说“Embarcadero® Delphi 10.2 版本 25.0.31059.3231”,但没有提到东京。我希望他们放弃地理上的废话,它只会造成混乱,imo。不知道会有“武汉”版吗?
  • @MartynA 谢谢。我正在使用 Embarcadero® RAD Studio 10 Seattle 版本 23.0.20618.2753。我已经上传了图片,我认为它会帮助你弄清楚。我还检查了组件 |安装软件包。它在那里可用。