Delphi 禁用默认弹出(上下文)菜单

Delphi 禁用默认弹出(上下文)菜单,delphi,firemonkey,delphi-xe7,Delphi,Firemonkey,Delphi Xe7,在DelphiXe7 Firemonkey项目中,我想阻止当用户在控件上按下鼠标右键时显示的默认弹出菜单 在VCL中,您可以在ContextPopup()中轻松设置Handled:=true 不幸的是,FMX中不存在此事件 有没有办法在Firemonkey中对此进行归档?您可以通过在表单中添加一个空的(无菜单项)TPopupMenu并将其分配给TEdit.PopupMenu来阻止默认的popop菜单 内部TStyledEdit检查(在TStyledEdit.ShowContextMenu()中)

在DelphiXe7 Firemonkey项目中,我想阻止当用户在控件上按下鼠标右键时显示的默认弹出菜单

在VCL中,您可以在ContextPopup()中轻松设置
Handled:=true

不幸的是,FMX中不存在此事件


有没有办法在Firemonkey中对此进行归档?

您可以通过在表单中添加一个空的(无菜单项)TPopupMenu并将其分配给TEdit.PopupMenu来阻止默认的popop菜单

内部TStyledEdit检查(在TStyledEdit.ShowContextMenu()中)PopupMenu属性是否为nil,如果为nil,则显示用户定义的弹出菜单,否则显示默认的弹出菜单。但是,如果右键单击TEdit,则会中断编辑,因为弹出菜单仍会进入自己的消息循环。因此,用户必须按Esc键或左键单击以继续编辑

一个增强功能是定义一个新的TPopupMenu类,您可以使用该类控制是否启用弹出窗口:

type
  TPopupMenu = class(FMX.Menus.TPopupMenu)
  private
    FEnabled: boolean;
  public
    procedure Popup(X, Y: Single); override;
    property Enabled: boolean read FEnabled Write FEnabled;
  end;

  TForm5 = class(TForm)
    Edit1: TEdit;
    PopupMenu1: TPopupMenu;
    MenuItem1: TMenuItem;
    MenuItem2: TMenuItem;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;


implementation

{$R *.fmx}

procedure TForm5.FormCreate(Sender: TObject);
begin
  PopupMenu1.Enabled := true;
end;

{ TPopupMenu }

procedure TPopupMenu.Popup(X, Y: Single);
begin
  if FEnabled then
    inherited;
end;
拦截对Popup()的调用,如果未启用,则有效阻止弹出