Page 1 of 1

TChromium in a frame

Posted: Wed Sep 02, 2020 6:26 am
by egold2005
Hello,

I am trying to create a frame to encapsulate the browser functions, and for some reason the URL is not being loaded. Here is the frame code. I call .Init in FormShow of the form that hosts the frame. I also have necessary stuff in .dpr like CEF application creation, if not Start...etc..

Thank you.

unit ChromiumFrame;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,


uCEFChromium, uCEFWindowParent, uCEFInterfaces, uCEFConstants, uCEFTypes,
uCEFWinControl, uCEFSentinel, uCEFChromiumCore, ExtCtrls

;

type
TfrmChromiumMap = class(TFrame)
CEFWindowParent1: TCEFWindowParent;
Chromium1: TChromium;
tmrCreate: TTimer;
procedure Chromium1AfterCreated(Sender: TObject; const browser: ICefBrowser);
procedure Chromium1BeforeClose(Sender: TObject; const browser: ICefBrowser);
procedure Chromium1BeforePopup(Sender: TObject; const browser: ICefBrowser; const frame: ICefFrame; const targetUrl, targetFrameName: ustring;
targetDisposition: TCefWindowOpenDisposition; userGesture: Boolean; const popupFeatures: TCefPopupFeatures; var windowInfo: TCefWindowInfo; var client: ICefClient;
var settings: TCefBrowserSettings; var extra_info: ICefDictionaryValue; var noJavascriptAccess, Result: Boolean);
procedure Chromium1CertificateError(Sender: TObject; const browser: ICefBrowser; certError: Integer; const requestUrl: ustring; const sslInfo: ICefSslInfo;
const callback: ICefRequestCallback; out Result: Boolean);
procedure Chromium1Close(Sender: TObject; const browser: ICefBrowser; var aAction: TCefCloseBrowserAction);
procedure tmrCreateTimer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure Init;
procedure Finalize;
end;

implementation

{$R *.dfm}

procedure TfrmChromiumMap.Chromium1AfterCreated(Sender: TObject; const browser: ICefBrowser);
begin
//Chromium1.LoadURL(MyURL)
//browser.MainFrame.LoadUrl() tried that as well
end;

// -----------

procedure TfrmChromiumMap.Chromium1BeforeClose(Sender: TObject; const browser: ICefBrowser);
begin
;
end;

// -----------

procedure TfrmChromiumMap.Chromium1BeforePopup(Sender: TObject; const browser: ICefBrowser; const frame: ICefFrame; const targetUrl, targetFrameName: ustring;
targetDisposition: TCefWindowOpenDisposition; userGesture: Boolean; const popupFeatures: TCefPopupFeatures; var windowInfo: TCefWindowInfo; var client: ICefClient;
var settings: TCefBrowserSettings; var extra_info: ICefDictionaryValue; var noJavascriptAccess, Result: Boolean);
begin
;
end;

// -----------

procedure TfrmChromiumMap.Chromium1CertificateError(Sender: TObject; const browser: ICefBrowser; certError: Integer; const requestUrl: ustring; const sslInfo: ICefSslInfo;
const callback: ICefRequestCallback; out Result: Boolean);
begin
result := TRUE;
callback.cont(TRUE)
end;

// -----------

procedure TfrmChromiumMap.Chromium1Close(Sender: TObject; const browser: ICefBrowser; var aAction: TCefCloseBrowserAction);
begin
;
end;

// -----------

procedure TfrmChromiumMap.Init;
begin
tmrCreate.Enabled := TRUE
end;

// -----------

procedure TfrmChromiumMap.Finalize;
begin
end;

// -----------

procedure TfrmChromiumMap.tmrCreateTimer(Sender: TObject);
begin
tmrCreate.Enabled := FALSE;
if (not Chromium1.CreateBrowser(CEFWindowParent1)) and (not Chromium1.Initialized) then
tmrCreate.Enabled := TRUE;
end;

// -----------

end.

Re: TChromium in a frame

Posted: Wed Sep 02, 2020 8:05 am
by salvadordf
Hi,

The TabbedBrowser2 demo uses browsers in frames and it works fine. Use that demo as a template for your own application.

https://github.com/salvadordf/CEF4Delph ... edBrowser2