Disclosure Statement: This site contains affiliate links, which means that I may receive a commission if you make a purchase using these links. As an eBay Partner, I earn from qualifying purchases.
TChromium control - Initialization issue
-
- Posts: 48
- Joined: Fri Jul 10, 2020 1:33 pm
Re: TChromium control - Initialization issue
Hi,
Could you please help me on my below mentioned things?
My application is using TWebBrowser and i am trying to replace with TChromium (CEF4 Delphi).
I am using CEFWindowParent and TChromium.
Need your help on following things:
1) How to achieve "OnBeforeNavigate2" (which is in TWebBrowser) in TChromium (CEF4 Delphi)?
2) I am using TWebBrowser in one of my screen
2.1) I have method called LoadSummary(aHTML: String).
2.2) Having 4 Comboboxe's in my screen
2.3) Calling LoadSummary(aHTML: String) on each ComboBox "OnChange" event. Because i need to load the chromium browser based on the value
selected in combobox
2.4) In "FormShow" the data is loading properly in chromium browser (here also calling LoadSummary). But when i choose the the combobox value
then the browser is flickering and not able to select the value from ComboBox. I mean, whenever i try to select the data from ComboBox
immediately browser is flickering (not black screen).
Please help me to address this issue.
procedure TSummaryDialog.LoadSummaryPPT(aSummary: string);
var
lTempFilename: string;
browser: ICefBrowser;
begin
//lTempFilename := fFileCache.SaveToFile('html', aSummary);
//dChromiumBrowser.LoadURL(lTempFilename);
fSummary := aSummary;
dChromiumBrowser.LoadString(aSummary);
end;
//This will run after "FormShow" event
procedure TSummaryDialog.BrowserCreatedMsg(var aMessage : TMessage);
var
browser: ICefBrowser;
lTempFilename: string;
begin
CEFWindowParent.UpdateSize;
try
browser := TCefBrowserRef.UnWrap(Pointer(aMessage.WParam));
if browser.IsSame(dChromiumBrowser.Browser) then
begin
lTempFilename := fFileCache.SaveToFile('html', fSummary);
browser.MainFrame.LoadUrl(lTempFilename);
end;
finally
browser := nil
end;
end;
procedure TSummaryDialog.FormShow(Sender: TObject);
begin
if not(dChromiumBrowser.CreateBrowser(CEFWindowParent, '')) then
dLoadTimer.Enabled := True;
end;
procedure TSummaryDialog.dLoadTimerTimer(Sender: TObject);
begin
dLoadTimer.Enabled := False;
if not(dChromiumBrowser.CreateBrowser(CEFWindowParent, '')) and
not(dChromiumBrowser.Initialized) then
dLoadTimer.Enabled := True;
end;
Could you please help me on my below mentioned things?
My application is using TWebBrowser and i am trying to replace with TChromium (CEF4 Delphi).
I am using CEFWindowParent and TChromium.
Need your help on following things:
1) How to achieve "OnBeforeNavigate2" (which is in TWebBrowser) in TChromium (CEF4 Delphi)?
2) I am using TWebBrowser in one of my screen
2.1) I have method called LoadSummary(aHTML: String).
2.2) Having 4 Comboboxe's in my screen
2.3) Calling LoadSummary(aHTML: String) on each ComboBox "OnChange" event. Because i need to load the chromium browser based on the value
selected in combobox
2.4) In "FormShow" the data is loading properly in chromium browser (here also calling LoadSummary). But when i choose the the combobox value
then the browser is flickering and not able to select the value from ComboBox. I mean, whenever i try to select the data from ComboBox
immediately browser is flickering (not black screen).
Please help me to address this issue.
procedure TSummaryDialog.LoadSummaryPPT(aSummary: string);
var
lTempFilename: string;
browser: ICefBrowser;
begin
//lTempFilename := fFileCache.SaveToFile('html', aSummary);
//dChromiumBrowser.LoadURL(lTempFilename);
fSummary := aSummary;
dChromiumBrowser.LoadString(aSummary);
end;
//This will run after "FormShow" event
procedure TSummaryDialog.BrowserCreatedMsg(var aMessage : TMessage);
var
browser: ICefBrowser;
lTempFilename: string;
begin
CEFWindowParent.UpdateSize;
try
browser := TCefBrowserRef.UnWrap(Pointer(aMessage.WParam));
if browser.IsSame(dChromiumBrowser.Browser) then
begin
lTempFilename := fFileCache.SaveToFile('html', fSummary);
browser.MainFrame.LoadUrl(lTempFilename);
end;
finally
browser := nil
end;
end;
procedure TSummaryDialog.FormShow(Sender: TObject);
begin
if not(dChromiumBrowser.CreateBrowser(CEFWindowParent, '')) then
dLoadTimer.Enabled := True;
end;
procedure TSummaryDialog.dLoadTimerTimer(Sender: TObject);
begin
dLoadTimer.Enabled := False;
if not(dChromiumBrowser.CreateBrowser(CEFWindowParent, '')) and
not(dChromiumBrowser.Initialized) then
dLoadTimer.Enabled := True;
end;
- salvadordf
- Posts: 4564
- Joined: Thu Feb 02, 2017 12:24 pm
- Location: Spain
- Contact:
Re: TChromium control - Initialization issue
Try TChromium.OnBeforeBrowse :john.augustine wrote: Sat Jul 25, 2020 7:24 pm 1) How to achieve "OnBeforeNavigate2" (which is in TWebBrowser) in TChromium (CEF4 Delphi)?
https://magpcss.org/ceforum/apidocs3/pr ... bool,bool)
Perhaps the combobox is forcing the browser to load the same summary multiple times. Check that the contents are different before loading them again.john.augustine wrote: Sat Jul 25, 2020 7:24 pm 2) I am using TWebBrowser in one of my screen
2.1) I have method called LoadSummary(aHTML: String).
2.2) Having 4 Comboboxe's in my screen
2.3) Calling LoadSummary(aHTML: String) on each ComboBox "OnChange" event. Because i need to load the chromium browser based on the value
selected in combobox
2.4) In "FormShow" the data is loading properly in chromium browser (here also calling LoadSummary). But when i choose the the combobox value
then the browser is flickering and not able to select the value from ComboBox. I mean, whenever i try to select the data from ComboBox
immediately browser is flickering (not black screen).
Please help me to address this issue.
-
- Posts: 48
- Joined: Fri Jul 10, 2020 1:33 pm
Re: TChromium control - Initialization issue
Sure, Thank you so much!. I will try the same!
Kindly let me know the corresponding event in "CEF4 Delphi" for below mentioned TWebBrowser events.
1) OnDownloadComplete (I hope OnLoadEnd in CEF4 Delphi)
2) OnDocumentComplete (?? Not Sure)
Thanks & Regards,
John
Kindly let me know the corresponding event in "CEF4 Delphi" for below mentioned TWebBrowser events.
1) OnDownloadComplete (I hope OnLoadEnd in CEF4 Delphi)
2) OnDocumentComplete (?? Not Sure)
Thanks & Regards,
John
- salvadordf
- Posts: 4564
- Joined: Thu Feb 02, 2017 12:24 pm
- Location: Spain
- Contact:
Re: TChromium control - Initialization issue
This is the description of that event :john.augustine wrote: Sun Jul 26, 2020 7:56 am 1) OnDownloadComplete (I hope OnLoadEnd in CEF4 Delphi)
http://docs.embarcadero.com/products/ra ... plete.html
This event would be equivalent to TChromium.OnDownloadUpdated and checking the "downloadItem" properties. Check the MiniBrowser demo to see how to download files.Write an OnDownloadComplete event handler to take specific action after the Web browser stops a downloading operation. For example, use the OnDownloadComplete event to stop an download indication that is started in an OnDownloadBegin event handler.
Note: Unlike the OnNavigateComplete2 event, OnDownloadComplete occurs even if the Web browser does not successfully navigate to an URL.
This is the description of that event :
http://docs.embarcadero.com/products/ra ... plete.html
This event would be equivalent to TChromium.OnLoadEndWrite an OnDocumentComplete event handler to take specific action when a frame or document is fully loaded into the Web browser .For a document without frames, this event occurs once when the document finishes loading. On a document containing multiple frames, this event occurs once for each frame. When the multiple-frame document finishes loading, the Web browser fires the event one final time.
For more TChromium events read this :
https://www.briskbard.com/index.php?lan ... =cef#usage
As you can see in that document, TChromium has the functions, procedures and events of :
- CefBrowser
- CefBrowserHost
- CefClient
- CefContextMenuHandler
- CefDialogHandler
- CefDisplayHandler
- CefDownloadHandler
- CefDragHandler
- CefFindHandler
- CefFocusHandler
- CefJSDialogHandler
- CefKeyboardHandler
- CefLifeSpanHandler
- CefLoadHandler
- CefRenderHandler
- CefRequestHandler
- CefResourceRequestHandler
- CefCookieAccessFilter
- CefRequestContextHandler
- CefMediaObserver
- CefAudioHandler
- CefDevToolsMessageObserver
For all the details about that CEF class you have to click on its link at :
https://www.briskbard.com/index.php?lan ... =cef#usage
-
- Posts: 48
- Joined: Fri Jul 10, 2020 1:33 pm
Re: TChromium control - Initialization issue
Thank you so much for your detailed answers!
John
John
-
- Posts: 48
- Joined: Fri Jul 10, 2020 1:33 pm
CEF4 Delphi - 1 Primary and 2 Background processes are running in Task Manager when launching my application
Hi,
I am seeing 1 Primary and 2 Background processes are running in Task Manager when launching my application.
Not sure, if this is expected behavior or not. If "Yes" then could you please explain the reason for 2 background processes.
Thanks & Regards,
John Augustine
I am seeing 1 Primary and 2 Background processes are running in Task Manager when launching my application.
Not sure, if this is expected behavior or not. If "Yes" then could you please explain the reason for 2 background processes.
Thanks & Regards,
John Augustine
- salvadordf
- Posts: 4564
- Joined: Thu Feb 02, 2017 12:24 pm
- Location: Spain
- Contact:
Re: TChromium control - Initialization issue
Chromium creates those processes. Chromium's developers decided several years ago that it was safer to handle certain tasks in different processes instead of using threads.
Read this for more details about those processes :
http://www.chromium.org/developers/desi ... chitecture
All CEF based applications create 1 or more of these process types : "browser", "gpu", "renderer", "utility" (Network service), etc.
Read this for more details about those processes :
http://www.chromium.org/developers/desi ... chitecture
All CEF based applications create 1 or more of these process types : "browser", "gpu", "renderer", "utility" (Network service), etc.
-
- Posts: 48
- Joined: Fri Jul 10, 2020 1:33 pm
Re: TChromium control - Initialization issue
Thank you so much for the info!
John
John
-
- Posts: 48
- Joined: Fri Jul 10, 2020 1:33 pm
Re: TChromium control - Initialization issue
Hi,
In my application (Delphi), using CEF4 browser at more than one place.
In one of the form > on "FormDestroy" event > i called "dChromiumBrowser.CloseBrowser(True)". Due to this, application login screen is appearing again.
Is calling "CloseBrowser" is mandatory at "FormDestroy" Or "FormClose" event?
Kindly provide your thoughts/advice on this.
Thanks & Regards,
John
In my application (Delphi), using CEF4 browser at more than one place.
In one of the form > on "FormDestroy" event > i called "dChromiumBrowser.CloseBrowser(True)". Due to this, application login screen is appearing again.
Is calling "CloseBrowser" is mandatory at "FormDestroy" Or "FormClose" event?
Kindly provide your thoughts/advice on this.
Thanks & Regards,
John
- salvadordf
- Posts: 4564
- Joined: Thu Feb 02, 2017 12:24 pm
- Location: Spain
- Contact:
Re: TChromium control - Initialization issue
You can destroy browsers without closing the main form but you have to follow the proper destruction sequence.
The TabbedBrowser2 demo shows how to create and destroy browsers which are included in frames but the main form remains open.
The TabbedBrowser2 demo shows how to create and destroy browsers which are included in frames but the main form remains open.