You've already forked CEF4Delphi
mirror of
https://github.com/salvadordf/CEF4Delphi.git
synced 2025-06-12 22:07:39 +02:00
Fixed UTF8 string conversion in SimpleBrowser for Linux
- Removed "cmem" and "interfaces" from the TinyBrowser2 demo for Linux. - Simplified the code of the TinyBrowser2 demo for Linux. - Added the workaround for the CEF focus issue to TChromiumWindow in Linux. - Set the result type of GetChildWindowHandle to LclType.THandle in FPC for TCEFWinControl, TCEFLinkedWindowParent and TChromiumWindow.
This commit is contained in:
@ -13,18 +13,18 @@ object Form1: TForm1
|
||||
LCLVersion = '2.0.10.0'
|
||||
object AddressPnl: TPanel
|
||||
Left = 0
|
||||
Height = 21
|
||||
Height = 25
|
||||
Top = 0
|
||||
Width = 1013
|
||||
Align = alTop
|
||||
BevelOuter = bvNone
|
||||
ClientHeight = 21
|
||||
ClientHeight = 25
|
||||
ClientWidth = 1013
|
||||
Enabled = False
|
||||
TabOrder = 0
|
||||
object AddressEdt: TEdit
|
||||
Left = 0
|
||||
Height = 21
|
||||
Height = 25
|
||||
Top = 0
|
||||
Width = 982
|
||||
Align = alClient
|
||||
@ -33,7 +33,7 @@ object Form1: TForm1
|
||||
end
|
||||
object GoBtn: TButton
|
||||
Left = 982
|
||||
Height = 21
|
||||
Height = 25
|
||||
Top = 0
|
||||
Width = 31
|
||||
Align = alRight
|
||||
@ -44,10 +44,11 @@ object Form1: TForm1
|
||||
end
|
||||
object ChromiumWindow1: TChromiumWindow
|
||||
Left = 0
|
||||
Height = 684
|
||||
Top = 21
|
||||
Height = 680
|
||||
Top = 25
|
||||
Width = 1013
|
||||
Align = alClient
|
||||
TabStop = True
|
||||
TabOrder = 1
|
||||
OnBeforeClose = ChromiumWindow1BeforeClose
|
||||
OnAfterCreated = ChromiumWindow1AfterCreated
|
||||
|
@ -64,7 +64,7 @@ type
|
||||
procedure FormCreate(Sender: TObject);
|
||||
|
||||
procedure ChromiumWindow1AfterCreated(Sender: TObject);
|
||||
procedure ChromiumWindow1BeforeClose(Sender: TObject);
|
||||
procedure ChromiumWindow1BeforeClose(Sender: TObject);
|
||||
private
|
||||
|
||||
protected
|
||||
@ -136,7 +136,7 @@ begin
|
||||
FClosing := False;
|
||||
|
||||
// The browser will load the URL in AddressEdt initially.
|
||||
ChromiumWindow1.ChromiumBrowser.DefaultURL := AddressEdt.Text;
|
||||
ChromiumWindow1.ChromiumBrowser.DefaultURL := UTF8Decode(AddressEdt.Text);
|
||||
end;
|
||||
|
||||
procedure TForm1.Chromium_OnBeforePopup(Sender: TObject;
|
||||
@ -160,7 +160,7 @@ end;
|
||||
procedure TForm1.GoBtnClick(Sender: TObject);
|
||||
begin
|
||||
// This will load the URL in the edit box
|
||||
ChromiumWindow1.LoadURL(AddressEdt.Text);
|
||||
ChromiumWindow1.LoadURL(UTF8Decode(AddressEdt.Text));
|
||||
end;
|
||||
|
||||
procedure TForm1.FormActivate(Sender: TObject);
|
||||
|
@ -10,7 +10,7 @@
|
||||
// For more information about CEF4Delphi visit :
|
||||
// https://www.briskbard.com/index.php?lang=en&pageid=cef
|
||||
//
|
||||
// Copyright © 2018 Salvador Díaz Fau. All rights reserved.
|
||||
// Copyright © 2021 Salvador Díaz Fau. All rights reserved.
|
||||
//
|
||||
// ************************************************************************
|
||||
// ************ vvvv Original license and comments below vvvv *************
|
||||
@ -42,9 +42,7 @@ program TinyBrowser2;
|
||||
uses
|
||||
{$IFDEF UNIX}{$IFDEF UseCThreads}
|
||||
cthreads,
|
||||
cmem,
|
||||
{$ENDIF}{$ENDIF}
|
||||
Interfaces,
|
||||
uCEFApplication,
|
||||
uTinyBrowser2 in 'uTinyBrowser2.pas';
|
||||
|
||||
|
@ -50,7 +50,6 @@ type
|
||||
private
|
||||
FChromium : TChromiumCore;
|
||||
|
||||
procedure Chromium_OnClose(Sender: TObject; const browser: ICefBrowser; var aAction : TCefCloseBrowserAction);
|
||||
procedure Chromium_OnBeforeClose(Sender: TObject; const browser: ICefBrowser);
|
||||
procedure Chromium_OnBeforePopup(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: Boolean; var Result: Boolean);
|
||||
procedure Chromium_OnOpenUrlFromTab(Sender: TObject; const browser: ICefBrowser; const frame: ICefFrame; const targetUrl: ustring; targetDisposition: TCefWindowOpenDisposition; userGesture: Boolean; out Result: Boolean);
|
||||
@ -58,7 +57,6 @@ type
|
||||
public
|
||||
constructor Create;
|
||||
destructor Destroy; override;
|
||||
procedure AfterConstruction; override;
|
||||
end;
|
||||
|
||||
procedure CreateGlobalCEFApp;
|
||||
@ -69,17 +67,19 @@ implementation
|
||||
// This demo is similar to the cefsimple demo in the official CEF project.
|
||||
|
||||
// It doesn't use LCL to create forms from Lazarus code.
|
||||
// It just uses CEF to create a browser window as if it was a popup browser window.
|
||||
// It just uses CEF to create a browser window as if it was a popup browser
|
||||
// window.
|
||||
|
||||
// This browser doesn't use multiple threads to handle the browser and it doesn't use an external message pump.
|
||||
// For this reason we have to call GlobalCEFApp.RunMessageLoop to let CEF handle the message loop and
|
||||
// This browser doesn't use multiple threads to handle the browser and it
|
||||
// doesn't use an external message pump. For this reason we have to call
|
||||
// GlobalCEFApp.RunMessageLoop to let CEF handle the message loop and
|
||||
// GlobalCEFApp.QuitMessageLoop when the browser has been destroyed.
|
||||
|
||||
// The destruction steps are much simpler for that reason.
|
||||
// In this demo it's only necessary to implement the TChromium.OnClose and TChromium.OnBeforeClose events.
|
||||
// The TChromium.OnClose event only sets aAction to cbaClose to continue closing the browser.
|
||||
// The TChromium.OnBeforeClose event calls GlobalCEFApp.QuitMessageLoop because the browser has been destroyed
|
||||
// and it's necessary to close the message loop.
|
||||
// In this demo it's only necessary to implement the TChromium.OnBeforeClose
|
||||
// events. The TChromium.OnBeforeClose event calls GlobalCEFApp.QuitMessageLoop
|
||||
// because the browser has been destroyed and it's necessary to close the
|
||||
// message loop.
|
||||
|
||||
uses
|
||||
uCEFApplication, uCEFConstants;
|
||||
@ -117,47 +117,34 @@ constructor TTinyBrowser2.Create;
|
||||
begin
|
||||
inherited Create;
|
||||
|
||||
FChromium := nil;
|
||||
end;
|
||||
|
||||
destructor TTinyBrowser2.Destroy;
|
||||
begin
|
||||
if (FChromium <> nil) then
|
||||
begin
|
||||
FChromium.Free;
|
||||
FChromium := nil;
|
||||
end;
|
||||
|
||||
inherited Destroy;
|
||||
end;
|
||||
|
||||
procedure TTinyBrowser2.AfterConstruction;
|
||||
begin
|
||||
inherited AfterConstruction;
|
||||
|
||||
FChromium := TChromiumCore.Create(nil);
|
||||
FChromium.DefaultURL := 'https://www.google.com';
|
||||
FChromium.OnClose := Chromium_OnClose;
|
||||
FChromium.OnBeforeClose := Chromium_OnBeforeClose;
|
||||
FChromium.OnBeforePopup := Chromium_OnBeforePopup;
|
||||
FChromium.OnOpenUrlFromTab := Chromium_OnOpenUrlFromTab;
|
||||
FChromium.CreateBrowser('Tiny Browser 2');
|
||||
end;
|
||||
|
||||
procedure TTinyBrowser2.Chromium_OnClose(Sender: TObject; const browser: ICefBrowser; var aAction : TCefCloseBrowserAction);
|
||||
destructor TTinyBrowser2.Destroy;
|
||||
begin
|
||||
aAction := cbaClose;
|
||||
if (FChromium <> nil) then
|
||||
FreeAndNil(FChromium);
|
||||
|
||||
inherited Destroy;
|
||||
end;
|
||||
|
||||
procedure TTinyBrowser2.Chromium_OnBeforeClose(Sender: TObject; const browser: ICefBrowser);
|
||||
procedure TTinyBrowser2.Chromium_OnBeforeClose(Sender: TObject;
|
||||
const browser: ICefBrowser);
|
||||
begin
|
||||
GlobalCEFApp.QuitMessageLoop;
|
||||
end;
|
||||
|
||||
procedure TTinyBrowser2.Chromium_OnBeforePopup(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;
|
||||
procedure TTinyBrowser2.Chromium_OnBeforePopup(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: Boolean; var Result: Boolean);
|
||||
begin
|
||||
// For simplicity, this demo blocks all popup windows and new tabs
|
||||
|
Reference in New Issue
Block a user