È possibile disabilitare l'opzione di visualizzazione della sorgente in Delphi Chromium Embedded?
Non ho trovato nulla di adatto nella lista proprietà/metodi.Come disabilitare l'opzione di visualizzazione delle sorgenti in Chromium Embedded?
risposta
Non ci sono impostazioni dirette o eventi che consentono di nascondere le voci di menu popup di Chromium. Tuttavia si dispone di almeno alcune opzioni come continuare, è possibile per esempio:
utente 1. dicono che l'opzione Visualizza sorgente è vietato e il declino l'azione
Si può decidere quale azione si vuole consentire o rifiutare il gestore di eventi OnMenuAction
, dove se si assegna True al parametro Result
l'azione viene rifiutata. Il seguente codice controlla di aver eseguito l'azione vista di origine e in tal caso, il declino l'azione e mostrare il messaggio di informazioni:
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. falso la voce di menu a qualcosa di personalizzato cambiando il titolo di voce di menu con il suo azione
È possibile sfruttare la voce di menu per qualcos'altro modificando la didascalia della voce di menu ed eseguendo alcune azioni personalizzate. Il codice di esempio seguente mostra come modificare la voce di menu visualizza sorgente nella voce di menu di dialogo Informazioni su:
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. Creare i vostri menu della pagina (frame) pop-up personalizzati
È possibile creare il tuo menu popup, ma devi considerare che questo menu è abbastanza hardcoded, quindi dovrai mantenerlo se avrai bisogno di farlo ugualmente con ogni nuova versione del wrapper Delphi Chromium. Ecco il codice come creare il menu di pagina senza la voce di menu Visualizza sorgente:
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.
nota
Le definizioni del tipo utilizzato in tutti gli esempi di codice sono lì perché ho notato che qualche versione di Delphi Chromium ha definizioni di gestore eventi errate.
Probabilmente le cose sono cambiate nel corso degli anni, oggi un metodo diretto esiste:
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;
È possibile utilizzare model.Clear
se si desidera eliminare completamente menu a comparsa.
OK. Grazie mille ! – henry60
Felice di aiutare ;-) – TLama
Grazie per questo grande aiuto;) – Beny