Lazarus fpCEF3 - Навчальний проект 2 - одне вікно (один екземпляр браузера) та контекстне меню
У другому проекті ми заборонимо створення нових об'єктів (вікон) браузера, відкриваючи всі сторінки в головному вікні, а також формуватимемо контекстне меню, яке викликається правою кнопкою миші на будь-якій веб-сторінці.
Якщо ви ще не підключили fpCEF3, дізнайтеся як це зробити: підключення веб-браузера в Lazarus. Так само ми будемо використовувати функцію DecodeURL() модуля synacode із Synapse (див. підключення Synapse).
Створимо одну форму (головну) розміром 600х400 з єдиним контролем-компонентом TChromium, який розтягнемо на всю форму: Anchors: [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() для уникнення «кракозябр» замість символів кирилиці у контекстному меню.
Різні властивості та методи об'єктів браузера, кадру та контекстного меню можна знайти у файлі 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 model : ICefMenuModel) ; procedure Chromium1BeforePopup(Sender: TObject; const browser: ICefBrowser; const frame: ICefFrame; const targetUrl, targetFrameName: ustring; targetDisposition: TCefWindowOpenDisposition; userGesture: Boolean; var popupFeatures: TCefPopupFeatures; вар 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 ; змінна клієнта : ICefClient ; налаштування змінної : TCefBrowserSettings ; варіативна noJavascriptAccess : логічне значення ; вихідний результат : логічне значення) ; begin Result := True ; // Щоб нове вікно не відкрилося frame . LoadUrl(targetUrl) ; <Form1.Chromium1.Load(targetUrl); // Аналогічний результат > end;