我正在尝试在Chromium Embedded(DCEF3)的窗口中禁用鼠标右键(上下文菜单),但我没有得到,我没有找到任何设置来本地执行此操作。
我可以禁用“查看源代码”,我正在使用下面的代码,但我真的想要禁用上下文菜单,或者不希望它出现。
注意:我在DLL“Chromium.dll”中使用这个libray与“Inno Setup”一起使用,等同于Inno Web Brower。
procedure TInnoChromium.OnContextMenuCommand(Sender: TObject;
const browser: ICefBrowser; const frame: ICefFrame;
const params: ICefContextMenuParams; commandId: Integer;
eventFlags: TCefEventFlags; out Result: Boolean);
begin
if (commandId = 132) then Result := True; // MENU_ID_VIEW_SOURCE
end;
答案 0 :(得分:16)
要禁用DCEF 3中的上下文菜单,您需要处理OnBeforeContextMenu
事件并清除其model
参数。这就是参考文献所指出的内容(我强调):
<强> OnBeforeContextMenu 强>
在显示上下文菜单之前调用。 | PARAMS |提供 有关上下文菜单状态的信息。 |模型|最初包含 默认的上下文菜单。 |模型|可以清除显示否 上下文菜单或已修改以显示自定义菜单。不要保持 参考| params |或者|模特|在这个回调之外。
因此,要完全禁用上下文菜单,您将编写如下内容:
uses
cefvcl, ceflib;
type
TInnoChromium = class
...
private
FChromium: TChromium;
procedure BeforeContextMenu(Sender: TObject; const browser: ICefBrowser;
const frame: ICefFrame;
public
constructor Create;
end;
implementation
constructor TInnoChromium.Create;
begin
FChromium := TChromium.Create(nil);
...
FChromium.OnBeforeContextMenu := BeforeContextMenu;
end;
procedure TInnoChromium.BeforeContextMenu(Sender: TObject; const browser: ICefBrowser;
const frame: ICefFrame; const params: ICefContextMenuParams; const model: ICefMenuModel);
begin
// to disable the context menu clear the model parameter
model.Clear;
end;
答案 1 :(得分:2)
注意:在C ++版本中:
void ClientHandler::OnBeforeContextMenu(
CefRefPtr<CefBrowser> browser,
CefRefPtr<CefFrame> frame,
CefRefPtr<CefContextMenuParams> params,
CefRefPtr<CefMenuModel> model) {
CEF_REQUIRE_UI_THREAD();
//Clear disables the context menu
model->Clear();
}
}