Lazarus fpCEF3 - Проучвателен проект 2 - Единичен прозорец (еднократен екземпляр на браузър) и контекстно меню

Във втория проект ще забраним създаването на нови обекти на браузъра (прозорци), отваряйки всички страници в главния прозорец, а също така ще формираме контекстно меню, което се извиква с десния бутон на мишката на всяка уеб страница.

Ако все още не сте свързали fpCEF3, научете как да го направите: свързване на уеб браузър в Lazarus. Ще използваме и функцията DecodeURL() на модула synacode от Synapse (вижте връзката Synapse).

Нека създадем една форма (главна) с размер 600x400 с един контролен компонент TChromium, който ще разтегнем до цялата форма: Котви: [akTop,akLeft,akRight,akBottom],

Този път в инспектора на обекти ще оставим свойството DefaultIrl със стойността по подразбиране "about:blank" и ще създадем константата MainUrl със стойността "https://www.yandex.ru/" (задължително чрез "www", в противен случай автоматичното пренасочване в браузъра ще промени нашия начален URL)

В инспектора на обекти нека създадем наши собствени манипулиращи процедури за събитията OnBeforeContextMenu и OnBeforePopup.

В манипулатора " TForm1.Chromium1BeforePopup " ще върнем " Result:=True; » така че да не се отваря нов прозорец и нова уеб страница ще бъде принудена да се отвори в текущия прозорец (рамка) « frame.LoadUrl(targetUrl); »

В манипулатора " TForm1.Chromium1BeforeContextMenu " ще изчистим контекстното меню и ще създадем наше собствено подобно, като се позоваваме на свойствата на браузъра.

Използвайте функцията Utf8Decode(), за да избегнете "krakozyabr" вместо символи на кирилица в контекстното меню.

Различни свойства и методи на обектите на браузъра, рамката и контекстното меню могат да бъдат намерени във файла cef3intf.pas (съответно интерфейси ICefBrowser, ICefFrame, ICefMenuModel).

За да навигирате през всички страници на този раздел на сайта, използвайте иконата на менюто или връзката Навигация в лентатанавигации.

begin RequireDerivedFormResource := True ; Приложение. Инициализиране ; Приложение. CreateForm(TForm1 , Form1) ; Формуляр 1. Хром1. Зареждане (MainUrl) ; Приложение. Бягай ; край .

използва >, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, synacode, cef3lcl, cef3types, cef3intf;

TForm1 = клас (TForm) Chromium1: TChromium; procedure Chromium1BeforeContextMenu(Sender: TObject; const Browser: ICefBrowser; const Frame: ICefFrame; const params: ICefContextMenuParams; const модел: ICefMenuModel); procedure Chromium1BeforePopup(Sender: TObject; const browser: ICefBrowser; const frame: ICefFrame; const targetUrl, targetFrameName: ustring; targetDisposition: TCefWindowOpenDisposition; userGesture: Boolean; var popupFeatures: TCefPopupFeatures; var windowInfo: TCefWindowInfo; var client: ICefClient; var settings: TCefBrowserSettings; var noJavascriptAccess: Boolean; out Result: Boolean) ; частен < частни декларации > публичен < публични декларации > край ;

const MainUrl = 'https://www.yandex.ru/' ;

var Form1 : TForm1 ;

процедура TForm1. Chromium1BeforePopup(Sender: TObject; const browser: ICefBrowser; const frame: ICefFrame; const targetUrl, targetFrameName: ustring; targetDisposition: TCefWindowOpenDisposition; userGesture: Boolean; var popupFeatures: TCefPopup Характеристики; var windowInfo: TCefWindowInfo; var client: ICefClient; var settings: TCefBrowserSettings; var noJavascriptAccess: Boolean; out Result: Boolean) ; начало Резултат := Вярно ; // За да не се отвори новото прозорец frame . LoadUrl(targetUrl) ; <Form1.Chromium1.Load(targetUrl); // Същият резултат > край ;