2012-05-31 19 views
6

क्या डेल्फी क्रोमियम एम्बेडेड में दृश्य स्रोत विकल्प को अक्षम करना संभव है?
मुझे गुण/विधियों की सूची में कुछ भी उपयुक्त नहीं मिला है।क्रोमियम एम्बेडेड में दृश्य स्रोत विकल्प को अक्षम कैसे करें?

उत्तर

12

क्रोमियम पॉपअप मेनू आइटम छिपाने की अनुमति देने वाली कोई सीधी सेटिंग्स या ईवेंट नहीं हैं। हालांकि आप कम से कम कुछ विकल्प हैं जारी रखने के लिए कैसे, आप कर सकते हैं, उदाहरण के लिए:

1. टेल उपयोगकर्ता कि स्रोत देखें विकल्प मना किया और कार्रवाई

आप क्या कार्रवाई तय कर सकते हैं गिरावट है आप करेंगे OnMenuAction इवेंट हैंडलर में अनुमति दें या अस्वीकार करें, जहां आप Result पैरामीटर को सही असाइन करते हैं तो कार्रवाई अस्वीकार कर दी जाती है। निम्नलिखित कोड की जाँच करता है कि आप स्रोत देखें कार्रवाई प्रदर्शन किया है और यदि हां, तो कार्रवाई की जानकारी संदेश गिरावट और दिखाने:

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. आप कस्टम पेज (फ्रेम) पॉपअप मेनू

स्वामी हैं तो आप बना सकते हैं बनाएं अपना खुद का पॉपअप मेनू, लेकिन आपको यह विचार करने की आवश्यकता है कि यह मेनू काफी हार्डकोडेड है, इसलिए आपको इसे बनाए रखने की आवश्यकता होगी यदि आपको डेल्फी क्रोमियम रैपर के प्रत्येक नए संस्करण के साथ इसे समान रखना होगा। कर रहे हैं वहाँ, क्योंकि मैं कुछ संस्करण है कि ध्यान दिया है

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. 

फ़ुटनोट

प्रकार परिभाषाएं सभी कोड नमूने में इस्तेमाल किया: यहाँ कोड स्रोत देखें मेनू आइटम के बिना पेज मेनू बनाने का तरीका है डेल्फी क्रोमियम में गलत घटना हैंडलर परिभाषाएं हैं।

+0

ठीक है। आपका बहुत बहुत धन्यवाद ! – 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 उपयोग कर सकते हैं आप पूरी तरह से पॉपअप मेनू से छुटकारा पाने के लिए करना चाहते हैं।

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^