2012-05-31 11 views

答えて

12

Chromiumのポップアップメニュー項目を非表示にする直接設定やイベントはありません。続行するか、少なくともいくつかのオプションがありますただし、次のことができ、たとえば:

ソースを表示オプションが禁止されますが、どのようなアクションを決めることができ、アクション

を辞退さ 1.テルユーザーはあなたの意志許可または拒否するにはOnMenuActionイベントハンドラを使用します。ここでは、ResultパラメータにTrueを割り当てた場合、アクションは拒否されます。あなたがソース表示アクションを行い、その場合、情報メッセージアクションを拒否し、表示されている次のコードをチェック:カスタムでメニュー項目のキャプションを変更することにより、

type 
    TCefMenuId = TCefHandlerMenuId; 

procedure TForm1.Chromium1MenuAction(Sender: TObject; 
    const browser: ICefBrowser; menuId: TCefMenuId; out Result: Boolean); 
begin 
    if menuId = MENU_ID_VIEWSOURCE then 
    begin 
    Result := True; 
    ShowMessage('View page source is not allowed!'); 
    end; 
end; 

2.偽の何かにメニュー項目をそのアクション

メニュー項目のキャプションを変更し、カスタムアクションを実行することで、メニュー項目を利用することができます。次のサンプルコードについてボックスメニュー項目に表示ソース]メニュー項目を変更する方法を示しています。あなたはあなたが作成できるカスタムページ(フレーム)ポップアップメニュー

を所有して作成

type 
    TCefMenuId = TCefHandlerMenuId; 

procedure TForm1.Chromium1GetMenuLabel(Sender: TObject; 
    const browser: ICefBrowser; menuId: TCefMenuId; var caption: ustring; 
    out Result: Boolean); 
begin 
    if menuId = MENU_ID_VIEWSOURCE then 
    caption := 'About my application...'; 
end; 

procedure TForm1.Chromium1MenuAction(Sender: TObject; 
    const browser: ICefBrowser; menuId: TCefMenuId; out Result: Boolean); 
begin 
    if menuId = MENU_ID_VIEWSOURCE then 
    begin 
    Result := True; 
    ShowMessage('About box...!'); 
    end; 
end; 

3独自のポップアップメニューがありますが、このメニューはかなりハードコードされていると考える必要があります。新しいバージョンのDelphi Chromiumラッパーと同じにする必要がある場合は、このメニューを維持する必要があります。ここではソースを表示]メニュー項目なしページのメニューを作成する方法のコードは次のとおりです。

unit Unit1; 

interface 

uses 
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 
    Dialogs, StdCtrls, Menus, cefvcl, ceflib; 

type 
    PCefMenuInfo = PCefHandlerMenuInfo; 

type 
    TForm1 = class(TForm) 
    Chromium1: TChromium; 
    procedure FormCreate(Sender: TObject); 
    procedure Chromium1BeforeMenu(Sender: TObject; const browser: ICefBrowser; 
     const menuInfo: PCefMenuInfo; out Result: Boolean); 
    private 
    PageMenu: TPopupMenu; 
    procedure OnNavigateBackMenuItemClick(Sender: TObject); 
    procedure OnNavigateForwardMenuItemClick(Sender: TObject); 
    procedure OnPrintMenuItemClick(Sender: TObject); 
    public 
    { Public declarations } 
    end; 

var 
    Form1: TForm1; 

implementation 

{$R *.dfm} 

procedure TForm1.OnNavigateBackMenuItemClick(Sender: TObject); 
begin 
    Chromium1.Browser.GoBack; 
end; 

procedure TForm1.OnNavigateForwardMenuItemClick(Sender: TObject); 
begin 
    Chromium1.Browser.GoForward; 
end; 

procedure TForm1.OnPrintMenuItemClick(Sender: TObject); 
begin 
    Chromium1.Browser.GetFocusedFrame.Print; 
end; 

procedure TForm1.Chromium1BeforeMenu(Sender: TObject; 
    const browser: ICefBrowser; const menuInfo: PCefMenuInfo; 
    out Result: Boolean); 
begin 
    if menuInfo.typeFlags = MENUTYPE_PAGE then 
    begin 
    Result := True; 
    PageMenu.Items[0].Enabled := browser.CanGoBack; 
    PageMenu.Items[1].Enabled := browser.CanGoForward; 
    PageMenu.Popup(menuInfo^.x, menuInfo^.y); 
    end; 
end; 

procedure TForm1.FormCreate(Sender: TObject); 
var 
    MenuItem: TMenuItem; 
begin 
    PageMenu := TPopupMenu.Create(Self); 
    MenuItem := TMenuItem.Create(PageMenu); 
    MenuItem.Caption := 'Back'; 
    MenuItem.OnClick := OnNavigateBackMenuItemClick; 
    PageMenu.Items.Add(MenuItem); 
    MenuItem := TMenuItem.Create(PageMenu); 
    MenuItem.Caption := 'Forward'; 
    MenuItem.OnClick := OnNavigateForwardMenuItemClick; 
    PageMenu.Items.Add(MenuItem); 
    MenuItem := TMenuItem.Create(PageMenu); 
    MenuItem.Caption := '-'; 
    PageMenu.Items.Add(MenuItem); 
    MenuItem := TMenuItem.Create(PageMenu); 
    MenuItem.Caption := 'Print'; 
    MenuItem.OnClick := OnPrintMenuItemClick; 
    PageMenu.Items.Add(MenuItem); 
    Chromium1.Load('www.stackoverflow.com'); 
end; 

end. 

脚注

私はいくつかのバージョン気づいたため、すべてのコードサンプルで使用されるタイプの定義がありますDelphi Chromiumのイベントハンドラの定義が間違っています。

+0

OK。どうもありがとうございました ! – henry60

+1

喜んで;-) – TLama

+1

この大きな助けをありがとう;) – Beny

1

は、おそらく、物事は直接法が存在している今日、長年にわたって変更:

uses 
    ceflib; 

[..] 

implementation 

procedure TForm1.Chromium1BeforeContextMenu(Sender: TObject; 
    const browser: ICefBrowser; const frame: ICefFrame; 
    const params: ICefContextMenuParams; const model: ICefMenuModel); 
begin 
    //model.Clear; 
    model.Remove(Integer(MENU_ID_VIEW_SOURCE)); 
end; 

あなたは完全にポップアップメニューを取り除きたい場合は、model.Clearを使用することができます。

関連する問題