2013-09-05 6 views
7

Ich versuche, die rechte Maustaste (das Kontextmenü) im Fenster von Chromium Embedded (DCEF3) zu deaktivieren, aber ich bekomme nicht, ich habe keine Einstellungen gefunden um das nativ zu machen.Kontextmenü in Chromium Embedded 3 (DCEF3) deaktivieren

Ich kann zum Beispiel die "View Source" deaktivieren, ich benutze den unten stehenden Code, aber ich möchte das Kontextmenü deaktivieren oder nicht angezeigt werden.

Hinweis: Ich benutze dies in DLL "Chromium.dll" eine Bibliothek mit dem "Inno-Setup" verwendet werden, gleich wie 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; 

Antwort

16

Um das Kontextmenü in DCEF 3 deaktivieren Sie die OnBeforeContextMenu Ereignis zu behandeln brauchen werden und seine model Parameter löschen. Das ist, was die Referenzzustände (hervorgehoben von mir):

OnBeforeContextMenu

aufgerufen, bevor ein Kontextmenü angezeigt wird. | params | liefert Informationen über den Status des Kontextmenüs. | Modell | enthält zunächst das Standardkontextmenü . Das | Modell | kann gelöscht werden, um kein Kontextmenü anzuzeigen oder geändert, um ein benutzerdefiniertes Menü anzuzeigen. Behalten Sie nicht Verweise auf | params | oder | Modell | außerhalb dieses Rückrufs.

Also, um vollständig über das Kontextmenü deaktivieren werden Sie so etwas schreiben:

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; 
+0

Nochmals vielen Dank, es funktionierte perfekt, Code einfach und einfach: D – D3F4ULT

+3

Gern geschehen! Und ja, es könnte nicht einfacher sein :-) Aber z. in CEF 1 war dies ['direkter] (http://stackoverflow.com/a/8409173/960757); in CEF 3 ist es nicht so offensichtlich. – TLama

+0

Ich habe diesen Beitrag auf Ihrem CEF 1 gesehen, obwohl es einfacher ist in DCEF3 xD – D3F4ULT

2

Hinweis: in der C++ Version:

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(); 
    } 
} 
+1

CefContextMenuHandler :: OnBeforeContextMenu (...) – ALittleDiff

Verwandte Themen