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'
|
LCLVersion = '2.0.10.0'
|
||||||
object AddressPnl: TPanel
|
object AddressPnl: TPanel
|
||||||
Left = 0
|
Left = 0
|
||||||
Height = 21
|
Height = 25
|
||||||
Top = 0
|
Top = 0
|
||||||
Width = 1013
|
Width = 1013
|
||||||
Align = alTop
|
Align = alTop
|
||||||
BevelOuter = bvNone
|
BevelOuter = bvNone
|
||||||
ClientHeight = 21
|
ClientHeight = 25
|
||||||
ClientWidth = 1013
|
ClientWidth = 1013
|
||||||
Enabled = False
|
Enabled = False
|
||||||
TabOrder = 0
|
TabOrder = 0
|
||||||
object AddressEdt: TEdit
|
object AddressEdt: TEdit
|
||||||
Left = 0
|
Left = 0
|
||||||
Height = 21
|
Height = 25
|
||||||
Top = 0
|
Top = 0
|
||||||
Width = 982
|
Width = 982
|
||||||
Align = alClient
|
Align = alClient
|
||||||
@ -33,7 +33,7 @@ object Form1: TForm1
|
|||||||
end
|
end
|
||||||
object GoBtn: TButton
|
object GoBtn: TButton
|
||||||
Left = 982
|
Left = 982
|
||||||
Height = 21
|
Height = 25
|
||||||
Top = 0
|
Top = 0
|
||||||
Width = 31
|
Width = 31
|
||||||
Align = alRight
|
Align = alRight
|
||||||
@ -44,10 +44,11 @@ object Form1: TForm1
|
|||||||
end
|
end
|
||||||
object ChromiumWindow1: TChromiumWindow
|
object ChromiumWindow1: TChromiumWindow
|
||||||
Left = 0
|
Left = 0
|
||||||
Height = 684
|
Height = 680
|
||||||
Top = 21
|
Top = 25
|
||||||
Width = 1013
|
Width = 1013
|
||||||
Align = alClient
|
Align = alClient
|
||||||
|
TabStop = True
|
||||||
TabOrder = 1
|
TabOrder = 1
|
||||||
OnBeforeClose = ChromiumWindow1BeforeClose
|
OnBeforeClose = ChromiumWindow1BeforeClose
|
||||||
OnAfterCreated = ChromiumWindow1AfterCreated
|
OnAfterCreated = ChromiumWindow1AfterCreated
|
||||||
|
@ -64,7 +64,7 @@ type
|
|||||||
procedure FormCreate(Sender: TObject);
|
procedure FormCreate(Sender: TObject);
|
||||||
|
|
||||||
procedure ChromiumWindow1AfterCreated(Sender: TObject);
|
procedure ChromiumWindow1AfterCreated(Sender: TObject);
|
||||||
procedure ChromiumWindow1BeforeClose(Sender: TObject);
|
procedure ChromiumWindow1BeforeClose(Sender: TObject);
|
||||||
private
|
private
|
||||||
|
|
||||||
protected
|
protected
|
||||||
@ -136,7 +136,7 @@ begin
|
|||||||
FClosing := False;
|
FClosing := False;
|
||||||
|
|
||||||
// The browser will load the URL in AddressEdt initially.
|
// The browser will load the URL in AddressEdt initially.
|
||||||
ChromiumWindow1.ChromiumBrowser.DefaultURL := AddressEdt.Text;
|
ChromiumWindow1.ChromiumBrowser.DefaultURL := UTF8Decode(AddressEdt.Text);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TForm1.Chromium_OnBeforePopup(Sender: TObject;
|
procedure TForm1.Chromium_OnBeforePopup(Sender: TObject;
|
||||||
@ -160,7 +160,7 @@ end;
|
|||||||
procedure TForm1.GoBtnClick(Sender: TObject);
|
procedure TForm1.GoBtnClick(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
// This will load the URL in the edit box
|
// This will load the URL in the edit box
|
||||||
ChromiumWindow1.LoadURL(AddressEdt.Text);
|
ChromiumWindow1.LoadURL(UTF8Decode(AddressEdt.Text));
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TForm1.FormActivate(Sender: TObject);
|
procedure TForm1.FormActivate(Sender: TObject);
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
// For more information about CEF4Delphi visit :
|
// For more information about CEF4Delphi visit :
|
||||||
// https://www.briskbard.com/index.php?lang=en&pageid=cef
|
// 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 *************
|
// ************ vvvv Original license and comments below vvvv *************
|
||||||
@ -42,9 +42,7 @@ program TinyBrowser2;
|
|||||||
uses
|
uses
|
||||||
{$IFDEF UNIX}{$IFDEF UseCThreads}
|
{$IFDEF UNIX}{$IFDEF UseCThreads}
|
||||||
cthreads,
|
cthreads,
|
||||||
cmem,
|
|
||||||
{$ENDIF}{$ENDIF}
|
{$ENDIF}{$ENDIF}
|
||||||
Interfaces,
|
|
||||||
uCEFApplication,
|
uCEFApplication,
|
||||||
uTinyBrowser2 in 'uTinyBrowser2.pas';
|
uTinyBrowser2 in 'uTinyBrowser2.pas';
|
||||||
|
|
||||||
|
@ -50,7 +50,6 @@ type
|
|||||||
private
|
private
|
||||||
FChromium : TChromiumCore;
|
FChromium : TChromiumCore;
|
||||||
|
|
||||||
procedure Chromium_OnClose(Sender: TObject; const browser: ICefBrowser; var aAction : TCefCloseBrowserAction);
|
|
||||||
procedure Chromium_OnBeforeClose(Sender: TObject; const browser: ICefBrowser);
|
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_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);
|
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
|
public
|
||||||
constructor Create;
|
constructor Create;
|
||||||
destructor Destroy; override;
|
destructor Destroy; override;
|
||||||
procedure AfterConstruction; override;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure CreateGlobalCEFApp;
|
procedure CreateGlobalCEFApp;
|
||||||
@ -69,17 +67,19 @@ implementation
|
|||||||
// This demo is similar to the cefsimple demo in the official CEF project.
|
// 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 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.
|
// This browser doesn't use multiple threads to handle the browser and it
|
||||||
// For this reason we have to call GlobalCEFApp.RunMessageLoop to let CEF handle the message loop and
|
// 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.
|
// GlobalCEFApp.QuitMessageLoop when the browser has been destroyed.
|
||||||
|
|
||||||
// The destruction steps are much simpler for that reason.
|
// 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.
|
// In this demo it's only necessary to implement the TChromium.OnBeforeClose
|
||||||
// The TChromium.OnClose event only sets aAction to cbaClose to continue closing the browser.
|
// events. The TChromium.OnBeforeClose event calls GlobalCEFApp.QuitMessageLoop
|
||||||
// The TChromium.OnBeforeClose event calls GlobalCEFApp.QuitMessageLoop because the browser has been destroyed
|
// because the browser has been destroyed and it's necessary to close the
|
||||||
// and it's necessary to close the message loop.
|
// message loop.
|
||||||
|
|
||||||
uses
|
uses
|
||||||
uCEFApplication, uCEFConstants;
|
uCEFApplication, uCEFConstants;
|
||||||
@ -117,47 +117,34 @@ constructor TTinyBrowser2.Create;
|
|||||||
begin
|
begin
|
||||||
inherited Create;
|
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 := TChromiumCore.Create(nil);
|
||||||
FChromium.DefaultURL := 'https://www.google.com';
|
FChromium.DefaultURL := 'https://www.google.com';
|
||||||
FChromium.OnClose := Chromium_OnClose;
|
|
||||||
FChromium.OnBeforeClose := Chromium_OnBeforeClose;
|
FChromium.OnBeforeClose := Chromium_OnBeforeClose;
|
||||||
FChromium.OnBeforePopup := Chromium_OnBeforePopup;
|
FChromium.OnBeforePopup := Chromium_OnBeforePopup;
|
||||||
FChromium.OnOpenUrlFromTab := Chromium_OnOpenUrlFromTab;
|
FChromium.OnOpenUrlFromTab := Chromium_OnOpenUrlFromTab;
|
||||||
FChromium.CreateBrowser('Tiny Browser 2');
|
FChromium.CreateBrowser('Tiny Browser 2');
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TTinyBrowser2.Chromium_OnClose(Sender: TObject; const browser: ICefBrowser; var aAction : TCefCloseBrowserAction);
|
destructor TTinyBrowser2.Destroy;
|
||||||
begin
|
begin
|
||||||
aAction := cbaClose;
|
if (FChromium <> nil) then
|
||||||
|
FreeAndNil(FChromium);
|
||||||
|
|
||||||
|
inherited Destroy;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TTinyBrowser2.Chromium_OnBeforeClose(Sender: TObject; const browser: ICefBrowser);
|
procedure TTinyBrowser2.Chromium_OnBeforeClose(Sender: TObject;
|
||||||
|
const browser: ICefBrowser);
|
||||||
begin
|
begin
|
||||||
GlobalCEFApp.QuitMessageLoop;
|
GlobalCEFApp.QuitMessageLoop;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TTinyBrowser2.Chromium_OnBeforePopup(Sender: TObject; const browser: ICefBrowser;
|
procedure TTinyBrowser2.Chromium_OnBeforePopup(Sender: TObject;
|
||||||
const frame: ICefFrame; const targetUrl, targetFrameName: ustring; targetDisposition: TCefWindowOpenDisposition;
|
const browser: ICefBrowser; const frame: ICefFrame; const targetUrl,
|
||||||
userGesture: Boolean; const popupFeatures: TCefPopupFeatures; var windowInfo: TCefWindowInfo;
|
targetFrameName: ustring; targetDisposition: TCefWindowOpenDisposition;
|
||||||
var client: ICefClient; var settings: TCefBrowserSettings; var extra_info: ICefDictionaryValue;
|
userGesture: Boolean; const popupFeatures: TCefPopupFeatures;
|
||||||
|
var windowInfo: TCefWindowInfo; var client: ICefClient;
|
||||||
|
var settings: TCefBrowserSettings; var extra_info: ICefDictionaryValue;
|
||||||
var noJavascriptAccess: Boolean; var Result: Boolean);
|
var noJavascriptAccess: Boolean; var Result: Boolean);
|
||||||
begin
|
begin
|
||||||
// For simplicity, this demo blocks all popup windows and new tabs
|
// For simplicity, this demo blocks all popup windows and new tabs
|
||||||
|
@ -74,10 +74,9 @@ type
|
|||||||
{$IFDEF FPC}
|
{$IFDEF FPC}
|
||||||
procedure SetVisible(Value: Boolean); override;
|
procedure SetVisible(Value: Boolean); override;
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
function GetBrowserInitialized : boolean;
|
function GetBrowserInitialized : boolean;
|
||||||
|
function GetChildWindowHandle : {$IFDEF FPC}LclType.{$ENDIF}THandle; override;
|
||||||
{$IFDEF MSWINDOWS}
|
{$IFDEF MSWINDOWS}
|
||||||
function GetChildWindowHandle : THandle; override;
|
|
||||||
|
|
||||||
procedure WndProc(var aMessage: TMessage); override;
|
procedure WndProc(var aMessage: TMessage); override;
|
||||||
|
|
||||||
procedure OnCloseMsg(var aMessage : TMessage); message CEF_DOONCLOSE;
|
procedure OnCloseMsg(var aMessage : TMessage); message CEF_DOONCLOSE;
|
||||||
@ -86,11 +85,14 @@ type
|
|||||||
procedure WebBrowser_OnClose(Sender: TObject; const browser: ICefBrowser; var aAction : TCefCloseBrowserAction);
|
procedure WebBrowser_OnClose(Sender: TObject; const browser: ICefBrowser; var aAction : TCefCloseBrowserAction);
|
||||||
procedure WebBrowser_OnBeforeClose(Sender: TObject; const browser: ICefBrowser);
|
procedure WebBrowser_OnBeforeClose(Sender: TObject; const browser: ICefBrowser);
|
||||||
procedure WebBrowser_OnAfterCreated(Sender: TObject; const browser: ICefBrowser);
|
procedure WebBrowser_OnAfterCreated(Sender: TObject; const browser: ICefBrowser);
|
||||||
|
|
||||||
{$IFDEF FPC}
|
{$IFDEF FPC}
|
||||||
procedure BrowserAfterCreated(Data: PtrInt);
|
procedure WebBrowser_OnGotFocus(Sender: TObject; const browser: ICefBrowser);
|
||||||
|
procedure BrowserSetFocusMsg(Data: PtrInt);
|
||||||
|
procedure BrowserAfterCreated(Data: PtrInt);
|
||||||
procedure BrowserOnCLose(Data: PtrInt);
|
procedure BrowserOnCLose(Data: PtrInt);
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
|
procedure DoEnter; override;
|
||||||
|
procedure DoExit; override;
|
||||||
|
|
||||||
public
|
public
|
||||||
constructor Create(AOwner: TComponent); override;
|
constructor Create(AOwner: TComponent); override;
|
||||||
@ -176,11 +178,15 @@ begin
|
|||||||
FChromium.OnClose := {$IFDEF FPC}@{$ENDIF}WebBrowser_OnClose;
|
FChromium.OnClose := {$IFDEF FPC}@{$ENDIF}WebBrowser_OnClose;
|
||||||
FChromium.OnBeforeClose := {$IFDEF FPC}@{$ENDIF}WebBrowser_OnBeforeClose;
|
FChromium.OnBeforeClose := {$IFDEF FPC}@{$ENDIF}WebBrowser_OnBeforeClose;
|
||||||
FChromium.OnAfterCreated := {$IFDEF FPC}@{$ENDIF}WebBrowser_OnAfterCreated;
|
FChromium.OnAfterCreated := {$IFDEF FPC}@{$ENDIF}WebBrowser_OnAfterCreated;
|
||||||
|
{$IFDEF LINUX}
|
||||||
|
// This is a workaround for the CEF issue #2026. Read below for more info.
|
||||||
|
FChromium.OnGotFocus := {$IFDEF FPC}@{$ENDIF}WebBrowser_OnGotFocus;
|
||||||
|
TabStop := True;
|
||||||
|
{$ENDIF}
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{$IFDEF MSWINDOWS}
|
function TChromiumWindow.GetChildWindowHandle : {$IFDEF FPC}LclType.{$ENDIF}THandle;
|
||||||
function TChromiumWindow.GetChildWindowHandle : THandle;
|
|
||||||
begin
|
begin
|
||||||
Result := 0;
|
Result := 0;
|
||||||
|
|
||||||
@ -189,6 +195,7 @@ begin
|
|||||||
if (Result = 0) then Result := inherited GetChildWindowHandle;
|
if (Result = 0) then Result := inherited GetChildWindowHandle;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
{$IFDEF MSWINDOWS}
|
||||||
procedure TChromiumWindow.WndProc(var aMessage: TMessage);
|
procedure TChromiumWindow.WndProc(var aMessage: TMessage);
|
||||||
var
|
var
|
||||||
TempHandle : THandle;
|
TempHandle : THandle;
|
||||||
@ -274,6 +281,16 @@ end;
|
|||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
|
|
||||||
{$IFDEF FPC}
|
{$IFDEF FPC}
|
||||||
|
procedure TChromiumWindow.WebBrowser_OnGotFocus(Sender: TObject; const browser: ICefBrowser);
|
||||||
|
begin
|
||||||
|
Application.QueueAsyncCall(@BrowserSetFocusMsg, 0);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TChromiumWindow.BrowserSetFocusMsg(Data: PtrInt);
|
||||||
|
begin
|
||||||
|
SetFocus;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TChromiumWindow.BrowserAfterCreated(Data: PtrInt);
|
procedure TChromiumWindow.BrowserAfterCreated(Data: PtrInt);
|
||||||
begin
|
begin
|
||||||
UpdateSize;
|
UpdateSize;
|
||||||
@ -344,6 +361,34 @@ begin
|
|||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
// This is a workaround for the CEF issue #2026
|
||||||
|
// https://bitbucket.org/chromiumembedded/cef/issues/2026/multiple-major-keyboard-focus-issues-on
|
||||||
|
// We use ChromiumWindow1.OnEnter, ChromiumWindow1.OnExit and
|
||||||
|
// TChromium.OnGotFocus to avoid most of the focus issues.
|
||||||
|
// ChromiumWindow1.TabStop must be TRUE.
|
||||||
|
procedure TChromiumWindow.DoEnter;
|
||||||
|
begin
|
||||||
|
inherited DoEnter;
|
||||||
|
|
||||||
|
{$IFDEF LINUX}
|
||||||
|
if not(csDesigning in ComponentState) and
|
||||||
|
FChromium.Initialized and
|
||||||
|
not(FChromium.FrameIsFocused) then
|
||||||
|
FChromium.SendFocusEvent(True);
|
||||||
|
{$ENDIF}
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TChromiumWindow.DoExit;
|
||||||
|
begin
|
||||||
|
inherited DoExit;
|
||||||
|
|
||||||
|
{$IFDEF LINUX}
|
||||||
|
if not(csDesigning in ComponentState) then
|
||||||
|
FChromium.SendCaptureLostEvent;
|
||||||
|
{$ENDIF}
|
||||||
|
end;
|
||||||
|
|
||||||
{$IFDEF FPC}
|
{$IFDEF FPC}
|
||||||
procedure Register;
|
procedure Register;
|
||||||
begin
|
begin
|
||||||
|
@ -73,7 +73,7 @@ type
|
|||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
procedure SetChromium(aValue : TChromium);
|
procedure SetChromium(aValue : TChromium);
|
||||||
|
|
||||||
function GetChildWindowHandle : THandle; override;
|
function GetChildWindowHandle : {$IFDEF FPC}LclType.{$ENDIF}THandle; override;
|
||||||
{$IFDEF MSWINDOWS}
|
{$IFDEF MSWINDOWS}
|
||||||
procedure WndProc(var aMessage: TMessage); override;
|
procedure WndProc(var aMessage: TMessage); override;
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
@ -105,7 +105,7 @@ begin
|
|||||||
FChromium := nil;
|
FChromium := nil;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TCEFLinkedWindowParent.GetChildWindowHandle : THandle;
|
function TCEFLinkedWindowParent.GetChildWindowHandle : {$IFDEF FPC}LclType.{$ENDIF}THandle;
|
||||||
begin
|
begin
|
||||||
Result := 0;
|
Result := 0;
|
||||||
|
|
||||||
|
@ -62,7 +62,7 @@ uses
|
|||||||
type
|
type
|
||||||
TCEFWinControl = class(TWinControl)
|
TCEFWinControl = class(TWinControl)
|
||||||
protected
|
protected
|
||||||
function GetChildWindowHandle : THandle; virtual;
|
function GetChildWindowHandle : {$IFDEF FPC}LclType.{$ENDIF}THandle; virtual;
|
||||||
procedure Resize; override;
|
procedure Resize; override;
|
||||||
|
|
||||||
public
|
public
|
||||||
@ -110,7 +110,7 @@ implementation
|
|||||||
uses
|
uses
|
||||||
uCEFMiscFunctions, uCEFClient, uCEFConstants;
|
uCEFMiscFunctions, uCEFClient, uCEFConstants;
|
||||||
|
|
||||||
function TCEFWinControl.GetChildWindowHandle : THandle;
|
function TCEFWinControl.GetChildWindowHandle : {$IFDEF FPC}LclType.{$ENDIF}THandle;
|
||||||
begin
|
begin
|
||||||
{$IFDEF MSWINDOWS}
|
{$IFDEF MSWINDOWS}
|
||||||
if not(csDesigning in ComponentState) and HandleAllocated then
|
if not(csDesigning in ComponentState) and HandleAllocated then
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
"UpdateLazPackages" : [
|
"UpdateLazPackages" : [
|
||||||
{
|
{
|
||||||
"ForceNotify" : true,
|
"ForceNotify" : true,
|
||||||
"InternalVersion" : 260,
|
"InternalVersion" : 261,
|
||||||
"Name" : "cef4delphi_lazarus.lpk",
|
"Name" : "cef4delphi_lazarus.lpk",
|
||||||
"Version" : "88.2.9.0"
|
"Version" : "88.2.9.0"
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user