1
0
mirror of https://github.com/salvadordf/CEF4Delphi.git synced 2025-08-04 21:32:54 +02:00

TabbedBrowser2 demos now use the Chrome style

This commit is contained in:
Salvador Díaz Fau
2025-01-09 17:24:32 +01:00
parent 526634f715
commit 38b9b5ae12
14 changed files with 61 additions and 114 deletions

View File

@ -217,7 +217,6 @@ object BrowserFrame: TBrowserFrame
OnBeforePopup = Chromium1BeforePopup OnBeforePopup = Chromium1BeforePopup
OnAfterCreated = Chromium1AfterCreated OnAfterCreated = Chromium1AfterCreated
OnBeforeClose = Chromium1BeforeClose OnBeforeClose = Chromium1BeforeClose
OnClose = Chromium1Close
OnOpenUrlFromTab = Chromium1OpenUrlFromTab OnOpenUrlFromTab = Chromium1OpenUrlFromTab
Left = 40 Left = 40
Top = 72 Top = 72

View File

@ -45,7 +45,6 @@ type
procedure Chromium1AfterCreated(Sender: TObject; const browser: ICefBrowser); procedure Chromium1AfterCreated(Sender: TObject; const browser: ICefBrowser);
procedure Chromium1AddressChange(Sender: TObject; const browser: ICefBrowser; const frame: ICefFrame; const url: ustring); procedure Chromium1AddressChange(Sender: TObject; const browser: ICefBrowser; const frame: ICefFrame; const url: ustring);
procedure Chromium1BeforeClose(Sender: TObject; const browser: ICefBrowser); procedure Chromium1BeforeClose(Sender: TObject; const browser: ICefBrowser);
procedure Chromium1Close(Sender: TObject; const browser: ICefBrowser; var aAction: TCefCloseBrowserAction);
procedure Chromium1LoadError(Sender: TObject; const browser: ICefBrowser; const frame: ICefFrame; errorCode: TCefErrorCode; const errorText, failedUrl: ustring); procedure Chromium1LoadError(Sender: TObject; const browser: ICefBrowser; const frame: ICefFrame; errorCode: TCefErrorCode; const errorText, failedUrl: ustring);
procedure Chromium1LoadingStateChange(Sender: TObject; const browser: ICefBrowser; isLoading, canGoBack, canGoForward: Boolean); procedure Chromium1LoadingStateChange(Sender: TObject; const browser: ICefBrowser; isLoading, canGoBack, canGoForward: Boolean);
procedure Chromium1StatusMessage(Sender: TObject; const browser: ICefBrowser; const value: ustring); procedure Chromium1StatusMessage(Sender: TObject; const browser: ICefBrowser; const value: ustring);
@ -88,7 +87,6 @@ type
procedure SetPendingCanGoForward(aValue : boolean); procedure SetPendingCanGoForward(aValue : boolean);
procedure BrowserCreatedMsg(var aMessage : TMessage); message CEF_AFTERCREATED; procedure BrowserCreatedMsg(var aMessage : TMessage); message CEF_AFTERCREATED;
procedure BrowserDestroyMsg(var aMessage : TMessage); message CEF_DESTROY;
procedure BrowserUpdateCaptionMsg(var aMessage : TMessage); message CEF_UPDATECAPTION; procedure BrowserUpdateCaptionMsg(var aMessage : TMessage); message CEF_UPDATECAPTION;
procedure BrowserUpdateAddressMsg(var aMessage : TMessage); message CEF_UPDATEADDRESS; procedure BrowserUpdateAddressMsg(var aMessage : TMessage); message CEF_UPDATEADDRESS;
procedure BrowserUpdateStateMsg(var aMessage : TMessage); message CEF_UPDATESTATE; procedure BrowserUpdateStateMsg(var aMessage : TMessage); message CEF_UPDATESTATE;
@ -134,12 +132,10 @@ uses
// Destruction steps // Destruction steps
// ================= // =================
// 1. TBrowserFrame.CloseBrowser sets CanClose to FALSE calls TChromium.CloseBrowser // 1. TBrowserFrame.FormCloseQuery sets CanClose to FALSE, destroys CEFWindowParent1
// which triggers the TChromium.OnClose event. // and calls TChromium.CloseBrowser which triggers the TChromium.OnBeforeClose event.
// 2. TChromium.OnClose sends a CEFBROWSER_DESTROY message to destroy CEFWindowParent1 // 2. TChromium.OnBeforeClose sets FCanClose := True and sends a CEF_DESTROYTAB
// in the main thread, which triggers the TChromium.OnBeforeClose event. // message with the TabID to the main form.
// 3. TChromium.OnBeforeClose triggers the TBrowserFrame.OnBrowserDestroyed event
// which sends a CEF_DESTROYTAB message with the TabID to the main form.
constructor TBrowserFrame.Create(AOwner : TComponent); constructor TBrowserFrame.Create(AOwner : TComponent);
begin begin
@ -273,7 +269,6 @@ end;
procedure TBrowserFrame.CreateBrowser; procedure TBrowserFrame.CreateBrowser;
begin begin
Chromium1.DefaultURL := FHomepage; Chromium1.DefaultURL := FHomepage;
Chromium1.RuntimeStyle := CEF_RUNTIME_STYLE_ALLOY;
Chromium1.CreateBrowser(CEFWindowParent1); Chromium1.CreateBrowser(CEFWindowParent1);
end; end;
@ -284,6 +279,7 @@ begin
FClosing := True; FClosing := True;
NavControlPnl.Enabled := False; NavControlPnl.Enabled := False;
Chromium1.CloseBrowser(True); Chromium1.CloseBrowser(True);
FreeAndNil(CEFWindowParent1);
end; end;
end; end;
@ -332,7 +328,8 @@ end;
procedure TBrowserFrame.Chromium1BeforeClose(Sender: TObject; const browser: ICefBrowser); procedure TBrowserFrame.Chromium1BeforeClose(Sender: TObject; const browser: ICefBrowser);
begin begin
if assigned(FOnBrowserDestroyed) then FOnBrowserDestroyed(self); if assigned(FOnBrowserDestroyed) then
FOnBrowserDestroyed(self);
end; end;
procedure TBrowserFrame.Chromium1BeforePopup( Sender : TObject; procedure TBrowserFrame.Chromium1BeforePopup( Sender : TObject;
@ -369,14 +366,6 @@ begin
TBrowserTab(Parent).DoOpenUrlFromTab(targetUrl, targetDisposition); TBrowserTab(Parent).DoOpenUrlFromTab(targetUrl, targetDisposition);
end; end;
procedure TBrowserFrame.Chromium1Close( Sender : TObject;
const browser : ICefBrowser;
var aAction : TCefCloseBrowserAction);
begin
PostMessage(Handle, CEF_DESTROY, 0, 0);
aAction := cbaDelay;
end;
procedure TBrowserFrame.Chromium1LoadError( Sender : TObject; procedure TBrowserFrame.Chromium1LoadError( Sender : TObject;
const browser : ICefBrowser; const browser : ICefBrowser;
const frame : ICefFrame; const frame : ICefFrame;
@ -436,11 +425,6 @@ begin
NavControlPnl.Enabled := True; NavControlPnl.Enabled := True;
end; end;
procedure TBrowserFrame.BrowserDestroyMsg(var aMessage : TMessage);
begin
CEFWindowParent1.Free;
end;
procedure TBrowserFrame.BrowserUpdateCaptionMsg(var aMessage : TMessage); procedure TBrowserFrame.BrowserUpdateCaptionMsg(var aMessage : TMessage);
begin begin
if assigned(FOnBrowserTitleChange) then if assigned(FOnBrowserTitleChange) then

View File

@ -125,22 +125,26 @@ procedure TBrowserTab.CreateBrowser(const aHomepage : string);
begin begin
CreateFrame(aHomepage); CreateFrame(aHomepage);
if (FBrowserFrame <> nil) then FBrowserFrame.CreateBrowser; if (FBrowserFrame <> nil) then
FBrowserFrame.CreateBrowser;
end; end;
procedure TBrowserTab.CloseBrowser; procedure TBrowserTab.CloseBrowser;
begin begin
if (FBrowserFrame <> nil) then FBrowserFrame.CloseBrowser; if (FBrowserFrame <> nil) then
FBrowserFrame.CloseBrowser;
end; end;
procedure TBrowserTab.ShowBrowser; procedure TBrowserTab.ShowBrowser;
begin begin
if (FBrowserFrame <> nil) then FBrowserFrame.ShowBrowser; if (FBrowserFrame <> nil) then
FBrowserFrame.ShowBrowser;
end; end;
procedure TBrowserTab.HideBrowser; procedure TBrowserTab.HideBrowser;
begin begin
if (FBrowserFrame <> nil) then FBrowserFrame.HideBrowser; if (FBrowserFrame <> nil) then
FBrowserFrame.HideBrowser;
end; end;
procedure TBrowserTab.BrowserFrame_OnBrowserDestroyed(Sender: TObject); procedure TBrowserTab.BrowserFrame_OnBrowserDestroyed(Sender: TObject);

View File

@ -29,7 +29,6 @@ object ChildForm: TChildForm
OnBeforePopup = Chromium1BeforePopup OnBeforePopup = Chromium1BeforePopup
OnAfterCreated = Chromium1AfterCreated OnAfterCreated = Chromium1AfterCreated
OnBeforeClose = Chromium1BeforeClose OnBeforeClose = Chromium1BeforeClose
OnClose = Chromium1Close
OnOpenUrlFromTab = Chromium1OpenUrlFromTab OnOpenUrlFromTab = Chromium1OpenUrlFromTab
Left = 24 Left = 24
Top = 56 Top = 56

View File

@ -32,7 +32,6 @@ type
procedure Chromium1AfterCreated(Sender: TObject; const browser: ICefBrowser); procedure Chromium1AfterCreated(Sender: TObject; const browser: ICefBrowser);
procedure Chromium1BeforePopup(Sender: TObject; const browser: ICefBrowser; const frame: ICefFrame; popup_id: Integer; 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: Boolean; var Result: Boolean); procedure Chromium1BeforePopup(Sender: TObject; const browser: ICefBrowser; const frame: ICefFrame; popup_id: Integer; 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: Boolean; var Result: Boolean);
procedure Chromium1TitleChange(Sender: TObject; const browser: ICefBrowser; const title: ustring); procedure Chromium1TitleChange(Sender: TObject; const browser: ICefBrowser; const title: ustring);
procedure Chromium1Close(Sender: TObject; const browser: ICefBrowser; var aAction : TCefCloseBrowserAction);
procedure Chromium1BeforeClose(Sender: TObject; const browser: ICefBrowser); procedure Chromium1BeforeClose(Sender: TObject; const browser: ICefBrowser);
procedure Chromium1OpenUrlFromTab(Sender: TObject; const browser: ICefBrowser; const frame: ICefFrame; const targetUrl: ustring; targetDisposition: TCefWindowOpenDisposition; userGesture: Boolean; out Result: Boolean); procedure Chromium1OpenUrlFromTab(Sender: TObject; const browser: ICefBrowser; const frame: ICefFrame; const targetUrl: ustring; targetDisposition: TCefWindowOpenDisposition; userGesture: Boolean; out Result: Boolean);
@ -77,11 +76,9 @@ uses
// Destruction steps // Destruction steps
// ================= // =================
// 1. FormCloseQuery sets CanClose to FALSE calls TChromium.CloseBrowser which // 1. FormCloseQuery sets CanClose to FALSE, destroys CEFWindowParent1 and calls
// triggers the TChromium.OnClose event. // TChromium.CloseBrowser which triggers the TChromium.OnBeforeClose event.
// 2. TChromium.OnClose sends a CEFBROWSER_DESTROY message to destroy CEFWindowParent1 // 2. TChromium.OnBeforeClose sets FCanClose := True and sends WM_CLOSE to the form.
// in the main thread, which triggers the TChromium.OnBeforeClose event.
// 3. TChromium.OnBeforeClose sets FCanClose := True and sends WM_CLOSE to the form.
procedure TChildForm.AfterConstruction; procedure TChildForm.AfterConstruction;
begin begin
@ -170,12 +167,6 @@ begin
Result := not(TMainForm(Owner).DoOpenUrlFromTab(targetUrl, targetDisposition)); Result := not(TMainForm(Owner).DoOpenUrlFromTab(targetUrl, targetDisposition));
end; end;
procedure TChildForm.Chromium1Close(Sender: TObject; const browser: ICefBrowser; var aAction : TCefCloseBrowserAction);
begin
PostMessage(Handle, CEF_DESTROY, 0, 0);
aAction := cbaDelay;
end;
procedure TChildForm.Chromium1TitleChange(Sender: TObject; const browser: ICefBrowser; const title: ustring); procedure TChildForm.Chromium1TitleChange(Sender: TObject; const browser: ICefBrowser; const title: ustring);
begin begin
try try
@ -236,6 +227,7 @@ begin
FClosing := True; FClosing := True;
Visible := False; Visible := False;
Chromium1.CloseBrowser(True); Chromium1.CloseBrowser(True);
FreeAndNil(CEFWindowParent1);
end; end;
end end
else else

View File

@ -108,13 +108,10 @@ implementation
// TBrowserFrame has all the usual code to close CEF4Delphi browsers following // TBrowserFrame has all the usual code to close CEF4Delphi browsers following
// a similar destruction sequence than the MiniBrowser demo : // a similar destruction sequence than the MiniBrowser demo :
// //
// 1. TBrowserTab.CloseBrowser calls TChromium.CloseBrowser which triggers the // 1. TBrowserFrame.FormCloseQuery sets CanClose to FALSE, destroys CEFWindowParent1
// TChromium.OnClose event. // and calls TChromium.CloseBrowser which triggers the TChromium.OnBeforeClose event.
// 2. TChromium.OnClose sends a CEF_DESTROY message to destroy CEFWindowParent1 // 2. TChromium.OnBeforeClose sets FCanClose := True and sends a CEF_DESTROYTAB
// in the main thread, which triggers the TChromium.OnBeforeClose event. // message with the TabID to the main form.
// 3. TChromium.OnBeforeClose executes the TBrowserFrame.OnBrowserDestroyed
// event which will be used in TBrowserTab to send a CEF_DESTROYTAB message
// to the main form to free the tab.
// This demo also uses custom forms to open popup browsers in the same way as // This demo also uses custom forms to open popup browsers in the same way as
// the PopupBrowser2 demo. Please, read the code comments in that demo for all // the PopupBrowser2 demo. Please, read the code comments in that demo for all
@ -239,7 +236,6 @@ begin
while (i >= 0) do while (i >= 0) do
begin begin
// Only count the fully initialized browser tabs and not the one waiting to be used. // Only count the fully initialized browser tabs and not the one waiting to be used.
if TBrowserTab(BrowserPageCtrl.Pages[i]).Initialized then if TBrowserTab(BrowserPageCtrl.Pages[i]).Initialized then
inc(Result); inc(Result);

View File

@ -85,7 +85,7 @@ object BrowserFrame: TBrowserFrame
end end
end end
object URLEditPnl: TPanel object URLEditPnl: TPanel
Left = 121 Left = 123
Height = 35 Height = 35
Top = 0 Top = 0
Width = 774 Width = 774
@ -96,11 +96,11 @@ object BrowserFrame: TBrowserFrame
TabOrder = 1 TabOrder = 1
object URLCbx: TComboBox object URLCbx: TComboBox
Left = 0 Left = 0
Height = 21 Height = 23
Top = 5 Top = 5
Width = 770 Width = 770
Anchors = [akTop, akLeft, akRight] Anchors = [akTop, akLeft, akRight]
ItemHeight = 0 ItemHeight = 15
ItemIndex = 0 ItemIndex = 0
Items.Strings = ( Items.Strings = (
'https://www.google.com' 'https://www.google.com'
@ -153,7 +153,7 @@ object BrowserFrame: TBrowserFrame
end end
end end
object ConfigPnl: TPanel object ConfigPnl: TPanel
Left = 895 Left = 897
Height = 35 Height = 35
Top = 0 Top = 0
Width = 35 Width = 35
@ -181,8 +181,8 @@ object BrowserFrame: TBrowserFrame
end end
object StatusBar1: TStatusBar object StatusBar1: TStatusBar
Left = 0 Left = 0
Height = 19 Height = 23
Top = 651 Top = 647
Width = 932 Width = 932
Panels = < Panels = <
item item
@ -192,7 +192,7 @@ object BrowserFrame: TBrowserFrame
end end
object CEFWindowParent1: TCEFWindowParent object CEFWindowParent1: TCEFWindowParent
Left = 0 Left = 0
Height = 616 Height = 612
Top = 35 Top = 35
Width = 932 Width = 932
Align = alClient Align = alClient
@ -207,7 +207,6 @@ object BrowserFrame: TBrowserFrame
OnBeforePopup = Chromium1BeforePopup OnBeforePopup = Chromium1BeforePopup
OnAfterCreated = Chromium1AfterCreated OnAfterCreated = Chromium1AfterCreated
OnBeforeClose = Chromium1BeforeClose OnBeforeClose = Chromium1BeforeClose
OnClose = Chromium1Close
OnOpenUrlFromTab = Chromium1OpenUrlFromTab OnOpenUrlFromTab = Chromium1OpenUrlFromTab
Left = 40 Left = 40
Top = 72 Top = 72

View File

@ -47,7 +47,6 @@ type
procedure Chromium1AfterCreated(Sender: TObject; const browser: ICefBrowser); procedure Chromium1AfterCreated(Sender: TObject; const browser: ICefBrowser);
procedure Chromium1AddressChange(Sender: TObject; const browser: ICefBrowser; const frame: ICefFrame; const url: ustring); procedure Chromium1AddressChange(Sender: TObject; const browser: ICefBrowser; const frame: ICefFrame; const url: ustring);
procedure Chromium1BeforeClose(Sender: TObject; const browser: ICefBrowser); procedure Chromium1BeforeClose(Sender: TObject; const browser: ICefBrowser);
procedure Chromium1Close(Sender: TObject; const browser: ICefBrowser; var aAction: TCefCloseBrowserAction);
procedure Chromium1LoadError(Sender: TObject; const browser: ICefBrowser; const frame: ICefFrame; errorCode: Integer; const errorText, failedUrl: ustring); procedure Chromium1LoadError(Sender: TObject; const browser: ICefBrowser; const frame: ICefFrame; errorCode: Integer; const errorText, failedUrl: ustring);
procedure Chromium1LoadingStateChange(Sender: TObject; const browser: ICefBrowser; isLoading, canGoBack, canGoForward: Boolean); procedure Chromium1LoadingStateChange(Sender: TObject; const browser: ICefBrowser; isLoading, canGoBack, canGoForward: Boolean);
procedure Chromium1StatusMessage(Sender: TObject; const browser: ICefBrowser; const value: ustring); procedure Chromium1StatusMessage(Sender: TObject; const browser: ICefBrowser; const value: ustring);
@ -90,7 +89,6 @@ type
procedure SetPendingCanGoForward(aValue : boolean); procedure SetPendingCanGoForward(aValue : boolean);
procedure BrowserCreatedMsg(var aMessage : TMessage); message CEF_AFTERCREATED; procedure BrowserCreatedMsg(var aMessage : TMessage); message CEF_AFTERCREATED;
procedure BrowserDestroyMsg(var aMessage : TMessage); message CEF_DESTROY;
procedure BrowserUpdateCaptionMsg(var aMessage : TMessage); message CEF_UPDATECAPTION; procedure BrowserUpdateCaptionMsg(var aMessage : TMessage); message CEF_UPDATECAPTION;
procedure BrowserUpdateAddressMsg(var aMessage : TMessage); message CEF_UPDATEADDRESS; procedure BrowserUpdateAddressMsg(var aMessage : TMessage); message CEF_UPDATEADDRESS;
procedure BrowserUpdateStateMsg(var aMessage : TMessage); message CEF_UPDATESTATE; procedure BrowserUpdateStateMsg(var aMessage : TMessage); message CEF_UPDATESTATE;
@ -136,12 +134,10 @@ uses
// Destruction steps // Destruction steps
// ================= // =================
// 1. TBrowserFrame.CloseBrowser sets CanClose to FALSE calls TChromium.CloseBrowser // 1. TBrowserFrame.FormCloseQuery sets CanClose to FALSE, destroys CEFWindowParent1
// which triggers the TChromium.OnClose event. // and calls TChromium.CloseBrowser which triggers the TChromium.OnBeforeClose event.
// 2. TChromium.OnClose sends a CEFBROWSER_DESTROY message to destroy CEFWindowParent1 // 2. TChromium.OnBeforeClose sets FCanClose := True and sends a CEF_DESTROYTAB
// in the main thread, which triggers the TChromium.OnBeforeClose event. // message with the TabID to the main form.
// 3. TChromium.OnBeforeClose triggers the TBrowserFrame.OnBrowserDestroyed event
// which sends a CEF_DESTROYTAB message with the TabID to the main form.
constructor TBrowserFrame.Create(AOwner : TComponent); constructor TBrowserFrame.Create(AOwner : TComponent);
begin begin
@ -275,7 +271,6 @@ end;
procedure TBrowserFrame.CreateBrowser; procedure TBrowserFrame.CreateBrowser;
begin begin
Chromium1.DefaultURL := FHomepage; Chromium1.DefaultURL := FHomepage;
Chromium1.RuntimeStyle := CEF_RUNTIME_STYLE_ALLOY;
Chromium1.CreateBrowser(CEFWindowParent1); Chromium1.CreateBrowser(CEFWindowParent1);
end; end;
@ -285,7 +280,8 @@ begin
begin begin
FClosing := True; FClosing := True;
NavControlPnl.Enabled := False; NavControlPnl.Enabled := False;
Chromium1.CloseBrowser(True); Chromium1.CloseBrowser(True);
FreeAndNil(CEFWindowParent1);
end; end;
end; end;
@ -371,14 +367,6 @@ begin
TBrowserTab(Parent).DoOpenUrlFromTab(targetUrl, targetDisposition); TBrowserTab(Parent).DoOpenUrlFromTab(targetUrl, targetDisposition);
end; end;
procedure TBrowserFrame.Chromium1Close( Sender : TObject;
const browser : ICefBrowser;
var aAction : TCefCloseBrowserAction);
begin
PostMessage(Handle, CEF_DESTROY, 0, 0);
aAction := cbaDelay;
end;
procedure TBrowserFrame.Chromium1LoadError( Sender : TObject; procedure TBrowserFrame.Chromium1LoadError( Sender : TObject;
const browser : ICefBrowser; const browser : ICefBrowser;
const frame : ICefFrame; const frame : ICefFrame;
@ -438,11 +426,6 @@ begin
NavControlPnl.Enabled := True; NavControlPnl.Enabled := True;
end; end;
procedure TBrowserFrame.BrowserDestroyMsg(var aMessage : TMessage);
begin
CEFWindowParent1.Free;
end;
procedure TBrowserFrame.BrowserUpdateCaptionMsg(var aMessage : TMessage); procedure TBrowserFrame.BrowserUpdateCaptionMsg(var aMessage : TMessage);
begin begin
if assigned(FOnBrowserTitleChange) then if assigned(FOnBrowserTitleChange) then

View File

@ -127,22 +127,26 @@ procedure TBrowserTab.CreateBrowser(const aHomepage : string);
begin begin
CreateFrame(aHomepage); CreateFrame(aHomepage);
if (FBrowserFrame <> nil) then FBrowserFrame.CreateBrowser; if (FBrowserFrame <> nil) then
FBrowserFrame.CreateBrowser;
end; end;
procedure TBrowserTab.CloseBrowser; procedure TBrowserTab.CloseBrowser;
begin begin
if (FBrowserFrame <> nil) then FBrowserFrame.CloseBrowser; if (FBrowserFrame <> nil) then
FBrowserFrame.CloseBrowser;
end; end;
procedure TBrowserTab.ShowBrowser; procedure TBrowserTab.ShowBrowser;
begin begin
if (FBrowserFrame <> nil) then FBrowserFrame.ShowBrowser; if (FBrowserFrame <> nil) then
FBrowserFrame.ShowBrowser;
end; end;
procedure TBrowserTab.HideBrowser; procedure TBrowserTab.HideBrowser;
begin begin
if (FBrowserFrame <> nil) then FBrowserFrame.HideBrowser; if (FBrowserFrame <> nil) then
FBrowserFrame.HideBrowser;
end; end;
procedure TBrowserTab.BrowserFrame_OnBrowserDestroyed(Sender: TObject); procedure TBrowserTab.BrowserFrame_OnBrowserDestroyed(Sender: TObject);

View File

@ -15,7 +15,6 @@ object ChildForm: TChildForm
OnCreate = FormCreate OnCreate = FormCreate
OnDestroy = FormDestroy OnDestroy = FormDestroy
Position = poScreenCenter Position = poScreenCenter
LCLVersion = '3.4.0.0'
object CEFWindowParent1: TCEFWindowParent object CEFWindowParent1: TCEFWindowParent
Left = 0 Left = 0
Height = 256 Height = 256
@ -29,7 +28,6 @@ object ChildForm: TChildForm
OnBeforePopup = Chromium1BeforePopup OnBeforePopup = Chromium1BeforePopup
OnAfterCreated = Chromium1AfterCreated OnAfterCreated = Chromium1AfterCreated
OnBeforeClose = Chromium1BeforeClose OnBeforeClose = Chromium1BeforeClose
OnClose = Chromium1Close
OnOpenUrlFromTab = Chromium1OpenUrlFromTab OnOpenUrlFromTab = Chromium1OpenUrlFromTab
Left = 24 Left = 24
Top = 56 Top = 56

View File

@ -34,7 +34,6 @@ type
procedure Chromium1AfterCreated(Sender: TObject; const browser: ICefBrowser); procedure Chromium1AfterCreated(Sender: TObject; const browser: ICefBrowser);
procedure Chromium1BeforePopup(Sender: TObject; const browser: ICefBrowser; const frame: ICefFrame; popup_id: Integer; 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: Boolean; var Result: Boolean); procedure Chromium1BeforePopup(Sender: TObject; const browser: ICefBrowser; const frame: ICefFrame; popup_id: Integer; 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: Boolean; var Result: Boolean);
procedure Chromium1TitleChange(Sender: TObject; const browser: ICefBrowser; const title: ustring); procedure Chromium1TitleChange(Sender: TObject; const browser: ICefBrowser; const title: ustring);
procedure Chromium1Close(Sender: TObject; const browser: ICefBrowser; var aAction : TCefCloseBrowserAction);
procedure Chromium1BeforeClose(Sender: TObject; const browser: ICefBrowser); procedure Chromium1BeforeClose(Sender: TObject; const browser: ICefBrowser);
procedure Chromium1OpenUrlFromTab(Sender: TObject; const browser: ICefBrowser; const frame: ICefFrame; const targetUrl: ustring; targetDisposition: TCefWindowOpenDisposition; userGesture: Boolean; out Result: Boolean); procedure Chromium1OpenUrlFromTab(Sender: TObject; const browser: ICefBrowser; const frame: ICefFrame; const targetUrl: ustring; targetDisposition: TCefWindowOpenDisposition; userGesture: Boolean; out Result: Boolean);
@ -79,11 +78,9 @@ uses
// Destruction steps // Destruction steps
// ================= // =================
// 1. FormCloseQuery sets CanClose to FALSE calls TChromium.CloseBrowser which // 1. FormCloseQuery sets CanClose to FALSE, destroys CEFWindowParent1 and calls
// triggers the TChromium.OnClose event. // TChromium.CloseBrowser which triggers the TChromium.OnBeforeClose event.
// 2. TChromium.OnClose sends a CEFBROWSER_DESTROY message to destroy CEFWindowParent1 // 2. TChromium.OnBeforeClose sets FCanClose := True and sends WM_CLOSE to the form.
// in the main thread, which triggers the TChromium.OnBeforeClose event.
// 3. TChromium.OnBeforeClose sets FCanClose := True and sends WM_CLOSE to the form.
procedure TChildForm.AfterConstruction; procedure TChildForm.AfterConstruction;
begin begin
@ -172,12 +169,6 @@ begin
Result := not(TMainForm(Owner).DoOpenUrlFromTab(targetUrl, targetDisposition)); Result := not(TMainForm(Owner).DoOpenUrlFromTab(targetUrl, targetDisposition));
end; end;
procedure TChildForm.Chromium1Close(Sender: TObject; const browser: ICefBrowser; var aAction : TCefCloseBrowserAction);
begin
PostMessage(Handle, CEF_DESTROY, 0, 0);
aAction := cbaDelay;
end;
procedure TChildForm.Chromium1TitleChange(Sender: TObject; const browser: ICefBrowser; const title: ustring); procedure TChildForm.Chromium1TitleChange(Sender: TObject; const browser: ICefBrowser; const title: ustring);
begin begin
try try
@ -237,7 +228,8 @@ begin
begin begin
FClosing := True; FClosing := True;
Visible := False; Visible := False;
Chromium1.CloseBrowser(True); Chromium1.CloseBrowser(True);
FreeAndNil(CEFWindowParent1);
end; end;
end end
else else

View File

@ -15,7 +15,7 @@ object MainForm: TMainForm
OnDestroy = FormDestroy OnDestroy = FormDestroy
OnShow = FormShow OnShow = FormShow
Position = poScreenCenter Position = poScreenCenter
LCLVersion = '3.4.0.0' LCLVersion = '3.6.0.0'
object BrowserPageCtrl: TPageControl object BrowserPageCtrl: TPageControl
Left = 32 Left = 32
Height = 703 Height = 703

View File

@ -106,13 +106,10 @@ implementation
// TBrowserFrame has all the usual code to close CEF4Delphi browsers following // TBrowserFrame has all the usual code to close CEF4Delphi browsers following
// a similar destruction sequence than the MiniBrowser demo : // a similar destruction sequence than the MiniBrowser demo :
// //
// 1. TBrowserTab.CloseBrowser calls TChromium.CloseBrowser which triggers the // 1. TBrowserFrame.FormCloseQuery sets CanClose to FALSE, destroys CEFWindowParent1
// TChromium.OnClose event. // and calls TChromium.CloseBrowser which triggers the TChromium.OnBeforeClose event.
// 2. TChromium.OnClose sends a CEF_DESTROY message to destroy CEFWindowParent1 // 2. TChromium.OnBeforeClose sets FCanClose := True and sends a CEF_DESTROYTAB
// in the main thread, which triggers the TChromium.OnBeforeClose event. // message with the TabID to the main form.
// 3. TChromium.OnBeforeClose executes the TBrowserFrame.OnBrowserDestroyed
// event which will be used in TBrowserTab to send a CEF_DESTROYTAB message
// to the main form to free the tab.
// This demo also uses custom forms to open popup browsers in the same way as // This demo also uses custom forms to open popup browsers in the same way as
// the PopupBrowser2 demo. Please, read the code comments in that demo for all // the PopupBrowser2 demo. Please, read the code comments in that demo for all
@ -155,11 +152,12 @@ end;
procedure CreateGlobalCEFApp; procedure CreateGlobalCEFApp;
begin begin
GlobalCEFApp := TCefApplication.Create; GlobalCEFApp := TCefApplication.Create;
GlobalCEFApp.cache := 'cache'; GlobalCEFApp.RootCache := 'RootCache';
GlobalCEFApp.EnablePrintPreview := True; GlobalCEFApp.cache := 'RootCache\cache';
GlobalCEFApp.OnContextInitialized := GlobalCEFApp_OnContextInitialized; GlobalCEFApp.EnablePrintPreview := True;
GlobalCEFApp.SetCurrentDir := True; GlobalCEFApp.OnContextInitialized := GlobalCEFApp_OnContextInitialized;
GlobalCEFApp.SetCurrentDir := True;
end; end;
procedure TMainForm.EnableButtonPnl; procedure TMainForm.EnableButtonPnl;
@ -209,7 +207,6 @@ begin
while (i >= 0) do while (i >= 0) do
begin begin
// Only count the fully initialized browser tabs and not the one waiting to be used. // Only count the fully initialized browser tabs and not the one waiting to be used.
if TBrowserTab(BrowserPageCtrl.Pages[i]).Initialized then if TBrowserTab(BrowserPageCtrl.Pages[i]).Initialized then
inc(Result); inc(Result);

View File

@ -2,7 +2,7 @@
"UpdateLazPackages" : [ "UpdateLazPackages" : [
{ {
"ForceNotify" : true, "ForceNotify" : true,
"InternalVersion" : 691, "InternalVersion" : 692,
"Name" : "cef4delphi_lazarus.lpk", "Name" : "cef4delphi_lazarus.lpk",
"Version" : "131.4.1" "Version" : "131.4.1"
} }