Delphi FireMonkey:如何抑制默认弹出菜单

Delphi FireMonkey:如何抑制默认弹出菜单,delphi,popup,firemonkey,Delphi,Popup,Firemonkey,我有一个TMemo,在FireMonkey表单上有一个关联的TPopupMenu 当我右键点击备忘录时,我会得到自己的弹出菜单,但在弹出菜单消失后,我仍然会得到默认的弹出菜单(显示剪切、复制、粘贴、全选) 如何禁用默认菜单,或者是否可以将自己的项目添加到默认菜单?我无法重现此行为。以下是我尝试过的: 文件->新建->FireMonkey HD应用程序 在表单上放置TMemo和TPopupMenu 将PopupMenu指定给对象检查器中的Memo1.PopupMenu 在PopupMenu中创建

我有一个TMemo,在FireMonkey表单上有一个关联的TPopupMenu

当我右键点击备忘录时,我会得到自己的弹出菜单,但在弹出菜单消失后,我仍然会得到默认的弹出菜单(显示剪切、复制、粘贴、全选)


如何禁用默认菜单,或者是否可以将自己的项目添加到默认菜单?

我无法重现此行为。以下是我尝试过的:

  • 文件->新建->FireMonkey HD应用程序
  • 在表单上放置
    TMemo
    TPopupMenu
  • PopupMenu
    指定给对象检查器中的
    Memo1.PopupMenu
  • PopupMenu
    中创建两个菜单项,并将它们分配给相同的
    OnClick
    事件(在对象检查器中生成)。我在这两个项目的
    caption
    中保留了
    MenuItem1
    MenuItem2
    的默认标题
  • 编写了一个简单的
    MessageDlg
    ,其中显示
    TMenuItem(发送者)。在
    OnClick
    处理程序中,使用一个
    Ok
    按钮显示标题
  • 运行应用程序,右键单击
    Memo1
    ,然后选择任一菜单项
我看到一个菜单显示了我的两个项目(
MenuItem1
MenuItem2
)。选择任一项都会在消息对话框中显示相应的
标题
,然后在该对话框中单击
Ok
。没有显示默认的弹出菜单


编辑:为您找到它。这是更新3中修复的错误-请参阅,并搜索
98705
,或滚动浏览,直到到达
FireMonkey\Components
部分(这是该部分下的第二个或第三个条目)。

我无法重现此行为。以下是我尝试过的:

  • 文件->新建->FireMonkey HD应用程序
  • 在表单上放置
    TMemo
    TPopupMenu
  • PopupMenu
    指定给对象检查器中的
    Memo1.PopupMenu
  • PopupMenu
    中创建两个菜单项,并将它们分配给相同的
    OnClick
    事件(在对象检查器中生成)。我在这两个项目的
    caption
    中保留了
    MenuItem1
    MenuItem2
    的默认标题
  • 编写了一个简单的
    MessageDlg
    ,其中显示
    TMenuItem(发送者)。在
    OnClick
    处理程序中,使用一个
    Ok
    按钮显示标题
  • 运行应用程序,右键单击
    Memo1
    ,然后选择任一菜单项
我看到一个菜单显示了我的两个项目(
MenuItem1
MenuItem2
)。选择任一项都会在消息对话框中显示相应的
标题
,然后在该对话框中单击
Ok
。没有显示默认的弹出菜单


编辑:为您找到它。这是更新3中修复的错误-请参阅,然后搜索
98705
,或者滚动到
FireMonkey\Components
部分(这是该部分下的第二个或第三个条目)。

我只做了您所做的事情,但无论做什么,我仍然会得到默认的弹出窗口。我正在使用XE2更新2。也许这是一个bug,它在更新3或4中被修复了?你在使用这些吗?我有更新3(有报告说4有问题,所以我现在暂缓)。无论如何,+1用于尝试你描述的步骤。我只是想证实我没有疯。目前还没有明确的答案:)我应该咬紧牙关,升级到3级(关于4级问题的传言足以让我暂时离开)。我认为这些报告很有价值。我试图按照您的步骤进行操作,但我甚至无法编译
MessageDlg('..',mtWarning,…
('Undeclared identifier:'mtWarning')。我必须编写
MessageDlg('..',TMsgDlgType(0),…
。顺便说一句@Sertac,这是XE2中的一个更改(如您所知)。您需要的是:`MessageDlg('you selected'+TMenuItem>)(发件人).Text,TMsgDlgType.mtConfirmation,[TMsgDlgBtn.mbOk],0);`。我刚才做的和你做的完全一样,但无论我做什么,我仍然会得到默认弹出窗口。我使用的是XE2更新2。可能这是一个错误,它在更新3或4中得到了修复。你使用了其中的任何一个吗?我有更新3(有报道说4有问题,所以我现在暂缓)。无论如何,+1是为了尝试你所描述的步骤。我只是想确认我没有发疯。还没有明确的答案:)我应该咬紧牙关,升级到3(关于4有问题的谣言足以让我暂时离开)。我认为这些报告很有价值。我试图按照您的步骤进行操作,但我甚至无法编译
MessageDlg('..',mtWarning,…
('Undeclared identifier:'mtWarning')。我必须编写
MessageDlg('..',TMsgDlgType(0),…
。顺便说一句,我也不能复制这个问题。@Sertac,这是XE2的一个变化(如您所知)。以下是您需要的:`MessageDlg('您选择了'+TMenuItem(发送者)。Text,TMsgDlgType.mtConfirmation,[TMsgDlgBtn.mbOk],0);`。