1
0
mirror of https://github.com/salvadordf/CEF4Delphi.git synced 2025-02-02 10:25:26 +02:00

FireMonkey support added

- New Delphi package called CEF4Delphi_FMX.dpk that includes VCL and FMX components.
- New FMX comopnents : TFMXChromium, TFMXBufferPanel and TFMXWorkScheduler.
- New FMX demo :  FMXExternalPumpBrowser
- Improved WorkScheduler for VCL too.
- New GlobalCEFApp.DisableWebSecurity property.
This commit is contained in:
Salvador Díaz Fau 2018-01-25 21:34:04 +01:00
parent 45b4965cb8
commit b47a8e2d52
60 changed files with 8748 additions and 719 deletions

View File

@ -107,7 +107,6 @@
</DelphiCompile>
<DCCReference Include="uDOMVisitor.pas">
<Form>DOMVisitorFrm</Form>
<FormType>dfm</FormType>
</DCCReference>
<BuildConfiguration Include="Release">
<Key>Cfg_2</Key>

View File

@ -67,8 +67,6 @@ object DOMVisitorFrm: TDOMVisitorFrm
Caption = 'Go'
TabOrder = 0
OnClick = GoBtnClick
ExplicitLeft = 98
ExplicitTop = 5
end
object VisitDOMBtn: TButton
Left = 39
@ -79,7 +77,6 @@ object DOMVisitorFrm: TDOMVisitorFrm
Caption = 'Visit DOM'
TabOrder = 1
OnClick = VisitDOMBtnClick
ExplicitLeft = 42
end
end
end

View File

@ -160,7 +160,7 @@ end;
procedure SimpleNodeSearch(const aDocument: ICefDomDocument);
const
NODE_ID = 'lst-ib'; // node found in google.com homepage
NODE_ID = 'lst-ib'; // input box node found in google.com homepage
var
TempNode : ICefDomNode;
begin
@ -170,12 +170,18 @@ begin
TempNode := aDocument.GetElementById(NODE_ID);
if (TempNode <> nil) then
CefLog('CEF4Delphi', 1, CEF_LOG_SEVERITY_ERROR, NODE_ID + ' element name : ' + TempNode.Name);
begin
CefLog('CEF4Delphi', 1, CEF_LOG_SEVERITY_ERROR, NODE_ID + ' element name : ' + TempNode.Name);
CefLog('CEF4Delphi', 1, CEF_LOG_SEVERITY_ERROR, NODE_ID + ' element value : ' + TempNode.GetValue);
end;
TempNode := aDocument.GetFocusedNode;
if (TempNode <> nil) then
CefLog('CEF4Delphi', 1, CEF_LOG_SEVERITY_ERROR, 'Focused element name : ' + TempNode.Name);
begin
CefLog('CEF4Delphi', 1, CEF_LOG_SEVERITY_ERROR, 'Focused element name : ' + TempNode.Name);
CefLog('CEF4Delphi', 1, CEF_LOG_SEVERITY_ERROR, 'Focused element inner text : ' + TempNode.ElementInnerText);
end;
end;
except
on e : exception do

View File

@ -0,0 +1,14 @@
del /s /q *.dcu
del /s /q *.exe
del /s /q *.res
del /s /q *.log
del /s /q *.dsk
del /s /q *.identcache
del /s /q *.stat
del /s /q *.local
del /s /q *.~*
rmdir Win32\Debug
rmdir Win32\Release
rmdir Win32
rmdir __history
rmdir __recovery

View File

@ -0,0 +1,92 @@
// ************************************************************************
// ***************************** CEF4Delphi *******************************
// ************************************************************************
//
// CEF4Delphi is based on DCEF3 which uses CEF3 to embed a chromium-based
// browser in Delphi applications.
//
// The original license of DCEF3 still applies to CEF4Delphi.
//
// 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.
//
// ************************************************************************
// ************ vvvv Original license and comments below vvvv *************
// ************************************************************************
(*
* Delphi Chromium Embedded 3
*
* Usage allowed under the restrictions of the Lesser GNU General Public License
* or alternatively the restrictions of the Mozilla Public License 1.1
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
* the specific language governing rights and limitations under the License.
*
* Unit owner : Henri Gourvest <hgourvest@gmail.com>
* Web site : http://www.progdigy.com
* Repository : http://code.google.com/p/delphichromiumembedded/
* Group : http://groups.google.com/group/delphichromiumembedded
*
* Embarcadero Technologies, Inc is not permitted to use or redistribute
* this source code without explicit permission.
*
*)
program FMXExternalPumpBrowser;
uses
{$IFDEF DELPHI17_UP}
System.StartUpCopy,
{$ENDIF}
FMX.Forms,
{$IFDEF MSWINDOWS}
WinApi.Windows,
{$ENDIF}
System.SysUtils,
uCEFApplication,
uFMXWorkScheduler,
uFMXExternalPumpBrowser in 'uFMXExternalPumpBrowser.pas' {FMXExternalPumpBrowserFrm},
uFMXApplicationService in 'uFMXApplicationService.pas';
{$R *.res}
{$IFDEF MSWINDOWS}
// CEF3 needs to set the LARGEADDRESSAWARE flag which allows 32-bit processes to use up to 3GB of RAM.
{$SetPEFlags IMAGE_FILE_LARGE_ADDRESS_AWARE}
{$ENDIF}
begin
// TCEFWorkScheduler will call cef_do_message_loop_work when
// it's told in the GlobalCEFApp.OnScheduleMessagePumpWork event.
// GlobalCEFWorkScheduler needs to be created before the
// GlobalCEFApp.StartMainProcess call.
GlobalCEFWorkScheduler := TFMXWorkScheduler.Create(nil);
GlobalCEFApp := TCefApplication.Create;
GlobalCEFApp.WindowlessRenderingEnabled := True;
GlobalCEFApp.EnableHighDPISupport := True;
GlobalCEFApp.FastUnload := True;
GlobalCEFApp.FlashEnabled := False;
GlobalCEFApp.ExternalMessagePump := True;
GlobalCEFApp.MultiThreadedMessageLoop := False;
GlobalCEFApp.SitePerProcess := False;
GlobalCEFApp.OnScheduleMessagePumpWork := GlobalCEFApp_OnScheduleMessagePumpWork;
if GlobalCEFApp.StartMainProcess then
begin
Application.Initialize;
Application.CreateForm(TFMXExternalPumpBrowserFrm, FMXExternalPumpBrowserFrm);
Application.Run;
// The form needs to be destroyed *BEFORE* stopping the scheduler.
FMXExternalPumpBrowserFrm.Free;
GlobalCEFWorkScheduler.StopScheduler;
end;
FreeAndNil(GlobalCEFApp);
FreeAndNil(GlobalCEFWorkScheduler);
end.

View File

@ -0,0 +1,617 @@
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ProjectGuid>{BE24D13B-2634-4064-8746-AB331419C5FA}</ProjectGuid>
<ProjectVersion>18.2</ProjectVersion>
<FrameworkType>FMX</FrameworkType>
<MainSource>FMXExternalPumpBrowser.dpr</MainSource>
<Base>True</Base>
<Config Condition="'$(Config)'==''">Debug</Config>
<Platform Condition="'$(Platform)'==''">Win32</Platform>
<TargetedPlatforms>1</TargetedPlatforms>
<AppType>Application</AppType>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''">
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Base)'=='true') or '$(Base_Win32)'!=''">
<Base_Win32>true</Base_Win32>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Win64' and '$(Base)'=='true') or '$(Base_Win64)'!=''">
<Base_Win64>true</Base_Win64>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Debug' or '$(Cfg_1)'!=''">
<Cfg_1>true</Cfg_1>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Cfg_1)'=='true') or '$(Cfg_1_Win32)'!=''">
<Cfg_1_Win32>true</Cfg_1_Win32>
<CfgParent>Cfg_1</CfgParent>
<Cfg_1>true</Cfg_1>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Win64' and '$(Cfg_1)'=='true') or '$(Cfg_1_Win64)'!=''">
<Cfg_1_Win64>true</Cfg_1_Win64>
<CfgParent>Cfg_1</CfgParent>
<Cfg_1>true</Cfg_1>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Release' or '$(Cfg_2)'!=''">
<Cfg_2>true</Cfg_2>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Cfg_2)'=='true') or '$(Cfg_2_Win32)'!=''">
<Cfg_2_Win32>true</Cfg_2_Win32>
<CfgParent>Cfg_2</CfgParent>
<Cfg_2>true</Cfg_2>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Win64' and '$(Cfg_2)'=='true') or '$(Cfg_2_Win64)'!=''">
<Cfg_2_Win64>true</Cfg_2_Win64>
<CfgParent>Cfg_2</CfgParent>
<Cfg_2>true</Cfg_2>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Base)'!=''">
<DCC_DcuOutput>.\$(Platform)\$(Config)</DCC_DcuOutput>
<DCC_ExeOutput>..\..\bin</DCC_ExeOutput>
<DCC_E>false</DCC_E>
<DCC_N>false</DCC_N>
<DCC_S>false</DCC_S>
<DCC_F>false</DCC_F>
<DCC_K>false</DCC_K>
<DCC_UsePackage>RESTComponents;emsclientfiredac;FireDAC;FireDACSqliteDriver;soaprtl;FireDACIBDriver;soapmidas;FireDACCommon;emsclient;RESTBackendComponents;soapserver;FireDACCommonDriver;CloudService;inet;$(DCC_UsePackage)</DCC_UsePackage>
<DCC_Namespace>System;Xml;Data;Datasnap;Web;Soap;$(DCC_Namespace)</DCC_Namespace>
<Icon_MainIcon>$(BDS)\bin\delphi_PROJECTICON.ico</Icon_MainIcon>
<Icns_MainIcns>$(BDS)\bin\delphi_PROJECTICNS.icns</Icns_MainIcns>
<SanitizedProjectName>FMXExternalPumpBrowser</SanitizedProjectName>
<VerInfo_Locale>3082</VerInfo_Locale>
<VerInfo_Keys>CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=</VerInfo_Keys>
</PropertyGroup>
<PropertyGroup Condition="'$(Base_Win32)'!=''">
<DCC_UsePackage>DBXSqliteDriver;bindcompdbx;fmxase;DBXDb2Driver;DBXInterBaseDriver;vcl;DBXSybaseASEDriver;vclactnband;vclFireDAC;FireDACDb2Driver;DataSnapFireDAC;svnui;tethering;dsnapcon;FireDACADSDriver;FireDACMSAccDriver;fmxFireDAC;DBXMSSQLDriver;vclimg;FireDACInfxDriver;DatasnapConnectorsFreePascal;FireDACMSSQLDriver;vcltouch;Componentes_UI;vcldb;bindcompfmx;svn;FireDACPgDriver;DBXOracleDriver;inetdb;FireDACASADriver;DBXOdbcDriver;FireDACTDataDriver;CEF4Delphi;DbxCommonDriver;IndyProtocols240;IndySystem240;fmx;DataSnapServer;xmlrtl;DataSnapNativeClient;fmxobj;fmxdae;vclwinx;rtl;FireDACDSDriver;DbxClientDriver;IndyCore240;DBXSybaseASADriver;CustomIPTransport;vcldsnap;dbexpress;FireDACDBXDriver;vclx;bindcomp;appanalytics;dsnap;DataSnapCommon;DBXInformixDriver;bindcompvcl;DataSnapConnectors;VCLRESTComponents;dbxcds;VclSmp;adortl;FireDACODBCDriver;DataSnapIndy10ServerTransport;vclie;bindengine;DBXMySQLDriver;FireDACOracleDriver;dsnapxml;FireDACMySQLDriver;dbrtl;inetdbxpress;DBXFirebirdDriver;DataSnapProviderClient;FireDACMongoDBDriver;FireDACCommonODBC;DataSnapClient;DataSnapServerMidas;$(DCC_UsePackage)</DCC_UsePackage>
<DCC_Namespace>Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)</DCC_Namespace>
<BT_BuildType>Debug</BT_BuildType>
<VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
<VerInfo_Keys>CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=</VerInfo_Keys>
<VerInfo_Locale>1033</VerInfo_Locale>
<Manifest_File>$(BDS)\bin\default_app.manifest</Manifest_File>
<UWP_DelphiLogo44>$(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png</UWP_DelphiLogo44>
<UWP_DelphiLogo150>$(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png</UWP_DelphiLogo150>
</PropertyGroup>
<PropertyGroup Condition="'$(Base_Win64)'!=''">
<DCC_UsePackage>DBXSqliteDriver;bindcompdbx;fmxase;DBXDb2Driver;DBXInterBaseDriver;vcl;DBXSybaseASEDriver;vclactnband;vclFireDAC;FireDACDb2Driver;DataSnapFireDAC;tethering;dsnapcon;FireDACADSDriver;FireDACMSAccDriver;fmxFireDAC;DBXMSSQLDriver;vclimg;FireDACInfxDriver;DatasnapConnectorsFreePascal;FireDACMSSQLDriver;vcltouch;vcldb;bindcompfmx;FireDACPgDriver;DBXOracleDriver;inetdb;FireDACASADriver;DBXOdbcDriver;FireDACTDataDriver;DbxCommonDriver;IndyProtocols240;IndySystem240;fmx;DataSnapServer;xmlrtl;DataSnapNativeClient;fmxobj;fmxdae;vclwinx;rtl;FireDACDSDriver;DbxClientDriver;IndyCore240;DBXSybaseASADriver;CustomIPTransport;vcldsnap;dbexpress;FireDACDBXDriver;vclx;bindcomp;appanalytics;dsnap;DataSnapCommon;DBXInformixDriver;bindcompvcl;DataSnapConnectors;VCLRESTComponents;dbxcds;VclSmp;adortl;FireDACODBCDriver;DataSnapIndy10ServerTransport;vclie;bindengine;DBXMySQLDriver;FireDACOracleDriver;dsnapxml;FireDACMySQLDriver;dbrtl;inetdbxpress;DBXFirebirdDriver;DataSnapProviderClient;FireDACMongoDBDriver;FireDACCommonODBC;DataSnapClient;DataSnapServerMidas;$(DCC_UsePackage)</DCC_UsePackage>
<DCC_Namespace>Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace)</DCC_Namespace>
<BT_BuildType>Debug</BT_BuildType>
<VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
<VerInfo_Keys>CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=</VerInfo_Keys>
<VerInfo_Locale>1033</VerInfo_Locale>
<Manifest_File>$(BDS)\bin\default_app.manifest</Manifest_File>
<UWP_DelphiLogo44>$(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png</UWP_DelphiLogo44>
<UWP_DelphiLogo150>$(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png</UWP_DelphiLogo150>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_1)'!=''">
<DCC_Define>DEBUG;$(DCC_Define)</DCC_Define>
<DCC_DebugDCUs>true</DCC_DebugDCUs>
<DCC_Optimize>false</DCC_Optimize>
<DCC_GenerateStackFrames>true</DCC_GenerateStackFrames>
<DCC_DebugInfoInExe>true</DCC_DebugInfoInExe>
<DCC_RemoteDebug>true</DCC_RemoteDebug>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_1_Win32)'!=''">
<DCC_RemoteDebug>false</DCC_RemoteDebug>
<AppEnableRuntimeThemes>true</AppEnableRuntimeThemes>
<AppEnableHighDPI>true</AppEnableHighDPI>
<VerInfo_Locale>1033</VerInfo_Locale>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_1_Win64)'!=''">
<AppEnableRuntimeThemes>true</AppEnableRuntimeThemes>
<AppEnableHighDPI>true</AppEnableHighDPI>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_2)'!=''">
<DCC_LocalDebugSymbols>false</DCC_LocalDebugSymbols>
<DCC_Define>RELEASE;$(DCC_Define)</DCC_Define>
<DCC_SymbolReferenceInfo>0</DCC_SymbolReferenceInfo>
<DCC_DebugInformation>0</DCC_DebugInformation>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_2_Win32)'!=''">
<AppEnableRuntimeThemes>true</AppEnableRuntimeThemes>
<AppEnableHighDPI>true</AppEnableHighDPI>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_2_Win64)'!=''">
<AppEnableRuntimeThemes>true</AppEnableRuntimeThemes>
<AppEnableHighDPI>true</AppEnableHighDPI>
</PropertyGroup>
<ItemGroup>
<DelphiCompile Include="$(MainSource)">
<MainSource>MainSource</MainSource>
</DelphiCompile>
<DCCReference Include="uFMXExternalPumpBrowser.pas">
<Form>FMXExternalPumpBrowserFrm</Form>
</DCCReference>
<DCCReference Include="uFMXApplicationService.pas"/>
<BuildConfiguration Include="Release">
<Key>Cfg_2</Key>
<CfgParent>Base</CfgParent>
</BuildConfiguration>
<BuildConfiguration Include="Base">
<Key>Base</Key>
</BuildConfiguration>
<BuildConfiguration Include="Debug">
<Key>Cfg_1</Key>
<CfgParent>Base</CfgParent>
</BuildConfiguration>
</ItemGroup>
<ProjectExtensions>
<Borland.Personality>Delphi.Personality.12</Borland.Personality>
<Borland.ProjectType>Application</Borland.ProjectType>
<BorlandProject>
<Delphi.Personality>
<Source>
<Source Name="MainSource">FMXExternalPumpBrowser.dpr</Source>
</Source>
<Excluded_Packages>
<Excluded_Packages Name="$(BDSBIN)\dclIPIndyImpl250.bpl">IP Abstraction Indy Implementation Design Time</Excluded_Packages>
<Excluded_Packages Name="$(BDSBIN)\dcloffice2k250.bpl">Microsoft Office 2000 Sample Automation Server Wrapper Components</Excluded_Packages>
<Excluded_Packages Name="$(BDSBIN)\dclofficexp250.bpl">Microsoft Office XP Sample Automation Server Wrapper Components</Excluded_Packages>
</Excluded_Packages>
</Delphi.Personality>
<Deployment Version="3">
<DeployFile LocalName="$(BDS)\Redist\osx32\libcgunwind.1.0.dylib" Class="DependencyModule">
<Platform Name="OSX32">
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
<DeployFile LocalName="$(BDS)\Redist\iossimulator\libcgunwind.1.0.dylib" Class="DependencyModule">
<Platform Name="iOSSimulator">
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
<DeployFile LocalName="$(BDS)\Redist\iossimulator\libPCRE.dylib" Class="DependencyModule">
<Platform Name="iOSSimulator">
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
<DeployFile LocalName="$(BDS)\Redist\osx32\libcgsqlite3.dylib" Class="DependencyModule">
<Platform Name="OSX32">
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
<DeployFile LocalName="..\..\bin\FMXExternalPumpBrowser.exe" Configuration="Debug" Class="ProjectOutput">
<Platform Name="Win32">
<RemoteName>FMXExternalPumpBrowser.exe</RemoteName>
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
<DeployClass Name="AdditionalDebugSymbols">
<Platform Name="iOSSimulator">
<Operation>1</Operation>
</Platform>
<Platform Name="OSX32">
<RemoteDir>Contents\MacOS</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Win32">
<RemoteDir>Contents\MacOS</RemoteDir>
<Operation>0</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidClassesDexFile">
<Platform Name="Android">
<RemoteDir>classes</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidGDBServer">
<Platform Name="Android">
<RemoteDir>library\lib\armeabi-v7a</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidLibnativeArmeabiFile">
<Platform Name="Android">
<RemoteDir>library\lib\armeabi</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidLibnativeMipsFile">
<Platform Name="Android">
<RemoteDir>library\lib\mips</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidServiceOutput">
<Platform Name="Android">
<RemoteDir>library\lib\armeabi-v7a</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidSplashImageDef">
<Platform Name="Android">
<RemoteDir>res\drawable</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidSplashStyles">
<Platform Name="Android">
<RemoteDir>res\values</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_DefaultAppIcon">
<Platform Name="Android">
<RemoteDir>res\drawable</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_LauncherIcon144">
<Platform Name="Android">
<RemoteDir>res\drawable-xxhdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_LauncherIcon36">
<Platform Name="Android">
<RemoteDir>res\drawable-ldpi</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_LauncherIcon48">
<Platform Name="Android">
<RemoteDir>res\drawable-mdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_LauncherIcon72">
<Platform Name="Android">
<RemoteDir>res\drawable-hdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_LauncherIcon96">
<Platform Name="Android">
<RemoteDir>res\drawable-xhdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_SplashImage426">
<Platform Name="Android">
<RemoteDir>res\drawable-small</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_SplashImage470">
<Platform Name="Android">
<RemoteDir>res\drawable-normal</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_SplashImage640">
<Platform Name="Android">
<RemoteDir>res\drawable-large</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_SplashImage960">
<Platform Name="Android">
<RemoteDir>res\drawable-xlarge</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="DebugSymbols">
<Platform Name="iOSSimulator">
<Operation>1</Operation>
</Platform>
<Platform Name="OSX32">
<RemoteDir>Contents\MacOS</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Win32">
<Operation>0</Operation>
</Platform>
</DeployClass>
<DeployClass Name="DependencyFramework">
<Platform Name="OSX32">
<RemoteDir>Contents\MacOS</RemoteDir>
<Operation>1</Operation>
<Extensions>.framework</Extensions>
</Platform>
<Platform Name="Win32">
<Operation>0</Operation>
</Platform>
</DeployClass>
<DeployClass Name="DependencyModule">
<Platform Name="iOSDevice32">
<Operation>1</Operation>
<Extensions>.dylib</Extensions>
</Platform>
<Platform Name="iOSDevice64">
<Operation>1</Operation>
<Extensions>.dylib</Extensions>
</Platform>
<Platform Name="iOSSimulator">
<Operation>1</Operation>
<Extensions>.dylib</Extensions>
</Platform>
<Platform Name="OSX32">
<RemoteDir>Contents\MacOS</RemoteDir>
<Operation>1</Operation>
<Extensions>.dylib</Extensions>
</Platform>
<Platform Name="Win32">
<Operation>0</Operation>
<Extensions>.dll;.bpl</Extensions>
</Platform>
</DeployClass>
<DeployClass Required="true" Name="DependencyPackage">
<Platform Name="iOSDevice32">
<Operation>1</Operation>
<Extensions>.dylib</Extensions>
</Platform>
<Platform Name="iOSDevice64">
<Operation>1</Operation>
<Extensions>.dylib</Extensions>
</Platform>
<Platform Name="iOSSimulator">
<Operation>1</Operation>
<Extensions>.dylib</Extensions>
</Platform>
<Platform Name="OSX32">
<RemoteDir>Contents\MacOS</RemoteDir>
<Operation>1</Operation>
<Extensions>.dylib</Extensions>
</Platform>
<Platform Name="Win32">
<Operation>0</Operation>
<Extensions>.bpl</Extensions>
</Platform>
</DeployClass>
<DeployClass Name="File">
<Platform Name="Android">
<Operation>0</Operation>
</Platform>
<Platform Name="iOSDevice32">
<Operation>0</Operation>
</Platform>
<Platform Name="iOSDevice64">
<Operation>0</Operation>
</Platform>
<Platform Name="iOSSimulator">
<Operation>0</Operation>
</Platform>
<Platform Name="OSX32">
<RemoteDir>Contents\Resources\StartUp\</RemoteDir>
<Operation>0</Operation>
</Platform>
<Platform Name="Win32">
<Operation>0</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPad_Launch1024">
<Platform Name="iOSDevice32">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice64">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPad_Launch1536">
<Platform Name="iOSDevice32">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice64">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPad_Launch2048">
<Platform Name="iOSDevice32">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice64">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPad_Launch768">
<Platform Name="iOSDevice32">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice64">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPhone_Launch320">
<Platform Name="iOSDevice32">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice64">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPhone_Launch640">
<Platform Name="iOSDevice32">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice64">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPhone_Launch640x1136">
<Platform Name="iOSDevice32">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice64">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectAndroidManifest">
<Platform Name="Android">
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectiOSDeviceDebug">
<Platform Name="iOSDevice32">
<RemoteDir>..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectiOSDeviceResourceRules">
<Platform Name="iOSDevice32">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice64">
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectiOSEntitlements">
<Platform Name="iOSDevice32">
<RemoteDir>..\</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice64">
<RemoteDir>..\</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectiOSInfoPList">
<Platform Name="iOSDevice32">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice64">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectiOSResource">
<Platform Name="iOSDevice32">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice64">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectOSXEntitlements">
<Platform Name="OSX32">
<RemoteDir>..\</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectOSXInfoPList">
<Platform Name="OSX32">
<RemoteDir>Contents</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectOSXResource">
<Platform Name="OSX32">
<RemoteDir>Contents\Resources</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Required="true" Name="ProjectOutput">
<Platform Name="Android">
<RemoteDir>library\lib\armeabi-v7a</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice32">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice64">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<Operation>1</Operation>
</Platform>
<Platform Name="Linux64">
<Operation>1</Operation>
</Platform>
<Platform Name="OSX32">
<RemoteDir>Contents\MacOS</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Win32">
<Operation>0</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectUWPManifest">
<Platform Name="Win32">
<Operation>1</Operation>
</Platform>
<Platform Name="Win64">
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="UWP_DelphiLogo150">
<Platform Name="Win32">
<RemoteDir>Assets</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Win64">
<RemoteDir>Assets</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="UWP_DelphiLogo44">
<Platform Name="Win32">
<RemoteDir>Assets</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Win64">
<RemoteDir>Assets</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<ProjectRoot Platform="iOSDevice64" Name="$(PROJECTNAME).app"/>
<ProjectRoot Platform="Win64" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="iOSDevice32" Name="$(PROJECTNAME).app"/>
<ProjectRoot Platform="Linux64" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="Win32" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="OSX32" Name="$(PROJECTNAME).app"/>
<ProjectRoot Platform="Android" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="iOSSimulator" Name="$(PROJECTNAME).app"/>
</Deployment>
<Platforms>
<Platform value="Win32">True</Platform>
<Platform value="Win64">False</Platform>
</Platforms>
</BorlandProject>
<ProjectFileVersion>12</ProjectFileVersion>
</ProjectExtensions>
<Import Project="$(BDS)\Bin\CodeGear.Delphi.Targets" Condition="Exists('$(BDS)\Bin\CodeGear.Delphi.Targets')"/>
<Import Project="$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj" Condition="Exists('$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj')"/>
<Import Project="$(MSBuildProjectName).deployproj" Condition="Exists('$(MSBuildProjectName).deployproj')"/>
</Project>

View File

@ -0,0 +1,384 @@
// ************************************************************************
// ***************************** CEF4Delphi *******************************
// ************************************************************************
//
// CEF4Delphi is based on DCEF3 which uses CEF3 to embed a chromium-based
// browser in Delphi applications.
//
// The original license of DCEF3 still applies to CEF4Delphi.
//
// For more information about CEF4Delphi visit :
// https://www.briskbard.com/index.php?lang=en&pageid=cef
//
// Copyright © 2017 Salvador Díaz Fau. All rights reserved.
//
// ************************************************************************
// ************ vvvv Original license and comments below vvvv *************
// ************************************************************************
(*
* Delphi Chromium Embedded 3
*
* Usage allowed under the restrictions of the Lesser GNU General Public License
* or alternatively the restrictions of the Mozilla Public License 1.1
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
* the specific language governing rights and limitations under the License.
*
* Unit owner : Henri Gourvest <hgourvest@gmail.com>
* Web site : http://www.progdigy.com
* Repository : http://code.google.com/p/delphichromiumembedded/
* Group : http://groups.google.com/group/delphichromiumembedded
*
* Embarcadero Technologies, Inc is not permitted to use or redistribute
* this source code without explicit permission.
*
*)
// The complete list of compiler versions is here :
// http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Compiler_Versions
{$DEFINE DELPHI_VERSION_UNKNOW}
{$IFDEF FPC}
{$DEFINE CEF_MULTI_THREADED_MESSAGE_LOOP}
{$DEFINE SUPPORTS_INLINE}
{$ENDIF}
// Delphi 5
{$IFDEF VER130}
{$UNDEF DELPHI_VERSION_UNKNOW}
{$DEFINE DELPHI5_UP}
{$ENDIF}
// Delphi 6
{$IFDEF VER140}
{$UNDEF DELPHI_VERSION_UNKNOW}
{$DEFINE DELPHI5_UP}
{$DEFINE DELPHI6_UP}
{$ENDIF}
// Delphi 7
{$IFDEF VER150}
{$UNDEF DELPHI_VERSION_UNKNOW}
{$DEFINE DELPHI5_UP}
{$DEFINE DELPHI6_UP}
{$DEFINE DELPHI7_UP}
{$ENDIF}
// Delphi 8
{$IFDEF VER160}
{$UNDEF DELPHI_VERSION_UNKNOW}
{$DEFINE DELPHI5_UP}
{$DEFINE DELPHI6_UP}
{$DEFINE DELPHI7_UP}
{$DEFINE DELPHI8_UP}
{$ENDIF}
// Delphi 2005
{$IFDEF VER170}
{$UNDEF DELPHI_VERSION_UNKNOW}
{$DEFINE DELPHI5_UP}
{$DEFINE DELPHI6_UP}
{$DEFINE DELPHI7_UP}
{$DEFINE DELPHI8_UP}
{$DEFINE DELPHI9_UP}
{$ENDIF}
{$IFDEF VER180}
{$UNDEF DELPHI_VERSION_UNKNOW}
// Delphi 2007
{$IFDEF VER185}
{$DEFINE DELPHI5_UP}
{$DEFINE DELPHI6_UP}
{$DEFINE DELPHI7_UP}
{$DEFINE DELPHI8_UP}
{$DEFINE DELPHI9_UP}
{$DEFINE DELPHI10_UP}
{$DEFINE DELPHI11_UP}
// Delphi 2006
{$ELSE}
{$DEFINE DELPHI5_UP}
{$DEFINE DELPHI6_UP}
{$DEFINE DELPHI7_UP}
{$DEFINE DELPHI8_UP}
{$DEFINE DELPHI9_UP}
{$DEFINE DELPHI10_UP}
{$ENDIF}
{$ENDIF}
// Delphi 2009
{$IFDEF VER200}
{$UNDEF DELPHI_VERSION_UNKNOW}
{$DEFINE DELPHI5_UP}
{$DEFINE DELPHI6_UP}
{$DEFINE DELPHI7_UP}
{$DEFINE DELPHI8_UP}
{$DEFINE DELPHI9_UP}
{$DEFINE DELPHI10_UP}
{$DEFINE DELPHI11_UP}
{$DEFINE DELPHI12_UP}
{$ENDIF}
//Delphi 2010
{$IFDEF VER210}
{$UNDEF DELPHI_VERSION_UNKNOW}
{$DEFINE DELPHI5_UP}
{$DEFINE DELPHI6_UP}
{$DEFINE DELPHI7_UP}
{$DEFINE DELPHI8_UP}
{$DEFINE DELPHI9_UP}
{$DEFINE DELPHI10_UP}
{$DEFINE DELPHI11_UP}
{$DEFINE DELPHI12_UP}
{$DEFINE DELPHI14_UP}
{$ENDIF}
// Delphi XE
{$IFDEF VER220}
{$UNDEF DELPHI_VERSION_UNKNOW}
{$DEFINE DELPHI5_UP}
{$DEFINE DELPHI6_UP}
{$DEFINE DELPHI7_UP}
{$DEFINE DELPHI8_UP}
{$DEFINE DELPHI9_UP}
{$DEFINE DELPHI10_UP}
{$DEFINE DELPHI11_UP}
{$DEFINE DELPHI12_UP}
{$DEFINE DELPHI14_UP}
{$DEFINE DELPHI15_UP}
{$ENDIF}
// Delphi XE2
{$IFDEF VER230}
{$UNDEF DELPHI_VERSION_UNKNOW}
{$DEFINE DELPHI5_UP}
{$DEFINE DELPHI6_UP}
{$DEFINE DELPHI7_UP}
{$DEFINE DELPHI8_UP}
{$DEFINE DELPHI9_UP}
{$DEFINE DELPHI10_UP}
{$DEFINE DELPHI11_UP}
{$DEFINE DELPHI12_UP}
{$DEFINE DELPHI14_UP}
{$DEFINE DELPHI15_UP}
{$DEFINE DELPHI16_UP}
{$ENDIF}
// Delphi XE3
{$IFDEF VER240}
{$UNDEF DELPHI_VERSION_UNKNOW}
{$DEFINE DELPHI5_UP}
{$DEFINE DELPHI6_UP}
{$DEFINE DELPHI7_UP}
{$DEFINE DELPHI8_UP}
{$DEFINE DELPHI9_UP}
{$DEFINE DELPHI10_UP}
{$DEFINE DELPHI11_UP}
{$DEFINE DELPHI12_UP}
{$DEFINE DELPHI14_UP}
{$DEFINE DELPHI15_UP}
{$DEFINE DELPHI16_UP}
{$DEFINE DELPHI17_UP}
{$ENDIF}
// Delphi XE4
{$IFDEF VER250}
{$UNDEF DELPHI_VERSION_UNKNOW}
{$DEFINE DELPHI5_UP}
{$DEFINE DELPHI6_UP}
{$DEFINE DELPHI7_UP}
{$DEFINE DELPHI8_UP}
{$DEFINE DELPHI9_UP}
{$DEFINE DELPHI10_UP}
{$DEFINE DELPHI11_UP}
{$DEFINE DELPHI12_UP}
{$DEFINE DELPHI14_UP}
{$DEFINE DELPHI15_UP}
{$DEFINE DELPHI16_UP}
{$DEFINE DELPHI17_UP}
{$DEFINE DELPHI18_UP}
{$ENDIF}
// Delphi XE5
{$IFDEF VER260}
{$UNDEF DELPHI_VERSION_UNKNOW}
{$DEFINE DELPHI5_UP}
{$DEFINE DELPHI6_UP}
{$DEFINE DELPHI7_UP}
{$DEFINE DELPHI8_UP}
{$DEFINE DELPHI9_UP}
{$DEFINE DELPHI10_UP}
{$DEFINE DELPHI11_UP}
{$DEFINE DELPHI12_UP}
{$DEFINE DELPHI14_UP}
{$DEFINE DELPHI15_UP}
{$DEFINE DELPHI16_UP}
{$DEFINE DELPHI17_UP}
{$DEFINE DELPHI18_UP}
{$DEFINE DELPHI19_UP}
{$ENDIF}
// Delphi XE6
{$IFDEF VER270}
{$UNDEF DELPHI_VERSION_UNKNOW}
{$DEFINE DELPHI5_UP}
{$DEFINE DELPHI6_UP}
{$DEFINE DELPHI7_UP}
{$DEFINE DELPHI8_UP}
{$DEFINE DELPHI9_UP}
{$DEFINE DELPHI10_UP}
{$DEFINE DELPHI11_UP}
{$DEFINE DELPHI12_UP}
{$DEFINE DELPHI14_UP}
{$DEFINE DELPHI15_UP}
{$DEFINE DELPHI16_UP}
{$DEFINE DELPHI17_UP}
{$DEFINE DELPHI18_UP}
{$DEFINE DELPHI19_UP}
{$DEFINE DELPHI20_UP}
{$ENDIF}
// Delphi XE7
{$IFDEF VER280}
{$UNDEF DELPHI_VERSION_UNKNOW}
{$DEFINE DELPHI5_UP}
{$DEFINE DELPHI6_UP}
{$DEFINE DELPHI7_UP}
{$DEFINE DELPHI8_UP}
{$DEFINE DELPHI9_UP}
{$DEFINE DELPHI10_UP}
{$DEFINE DELPHI11_UP}
{$DEFINE DELPHI12_UP}
{$DEFINE DELPHI14_UP}
{$DEFINE DELPHI15_UP}
{$DEFINE DELPHI16_UP}
{$DEFINE DELPHI17_UP}
{$DEFINE DELPHI18_UP}
{$DEFINE DELPHI19_UP}
{$DEFINE DELPHI20_UP}
{$DEFINE DELPHI21_UP}
{$ENDIF}
// Delphi XE8
{$IFDEF VER290}
{$UNDEF DELPHI_VERSION_UNKNOW}
{$DEFINE DELPHI5_UP}
{$DEFINE DELPHI6_UP}
{$DEFINE DELPHI7_UP}
{$DEFINE DELPHI8_UP}
{$DEFINE DELPHI9_UP}
{$DEFINE DELPHI10_UP}
{$DEFINE DELPHI11_UP}
{$DEFINE DELPHI12_UP}
{$DEFINE DELPHI14_UP}
{$DEFINE DELPHI15_UP}
{$DEFINE DELPHI16_UP}
{$DEFINE DELPHI17_UP}
{$DEFINE DELPHI18_UP}
{$DEFINE DELPHI19_UP}
{$DEFINE DELPHI20_UP}
{$DEFINE DELPHI21_UP}
{$DEFINE DELPHI22_UP}
{$ENDIF VER290}
// Rad Studio 10 - Delphi Seattle
{$IFDEF VER300}
{$UNDEF DELPHI_VERSION_UNKNOW}
{$DEFINE DELPHI5_UP}
{$DEFINE DELPHI6_UP}
{$DEFINE DELPHI7_UP}
{$DEFINE DELPHI8_UP}
{$DEFINE DELPHI9_UP}
{$DEFINE DELPHI10_UP}
{$DEFINE DELPHI11_UP}
{$DEFINE DELPHI12_UP}
{$DEFINE DELPHI14_UP}
{$DEFINE DELPHI15_UP}
{$DEFINE DELPHI16_UP}
{$DEFINE DELPHI17_UP}
{$DEFINE DELPHI18_UP}
{$DEFINE DELPHI19_UP}
{$DEFINE DELPHI20_UP}
{$DEFINE DELPHI21_UP}
{$DEFINE DELPHI22_UP}
{$DEFINE DELPHI23_UP}
{$ENDIF}
// Rad Studio 10.1 - Delphi Berlin
{$IFDEF VER310}
{$UNDEF DELPHI_VERSION_UNKNOW}
{$DEFINE DELPHI5_UP}
{$DEFINE DELPHI6_UP}
{$DEFINE DELPHI7_UP}
{$DEFINE DELPHI8_UP}
{$DEFINE DELPHI9_UP}
{$DEFINE DELPHI10_UP}
{$DEFINE DELPHI11_UP}
{$DEFINE DELPHI12_UP}
{$DEFINE DELPHI14_UP}
{$DEFINE DELPHI15_UP}
{$DEFINE DELPHI16_UP}
{$DEFINE DELPHI17_UP}
{$DEFINE DELPHI18_UP}
{$DEFINE DELPHI19_UP}
{$DEFINE DELPHI20_UP}
{$DEFINE DELPHI21_UP}
{$DEFINE DELPHI22_UP}
{$DEFINE DELPHI23_UP}
{$DEFINE DELPHI24_UP}
{$ENDIF}
// Rad Studio 10.2 - Delphi Tokyo
{$IFDEF VER320}
{$UNDEF DELPHI_VERSION_UNKNOW}
{$DEFINE DELPHI5_UP}
{$DEFINE DELPHI6_UP}
{$DEFINE DELPHI7_UP}
{$DEFINE DELPHI8_UP}
{$DEFINE DELPHI9_UP}
{$DEFINE DELPHI10_UP}
{$DEFINE DELPHI11_UP}
{$DEFINE DELPHI12_UP}
{$DEFINE DELPHI14_UP}
{$DEFINE DELPHI15_UP}
{$DEFINE DELPHI16_UP}
{$DEFINE DELPHI17_UP}
{$DEFINE DELPHI18_UP}
{$DEFINE DELPHI19_UP}
{$DEFINE DELPHI20_UP}
{$DEFINE DELPHI21_UP}
{$DEFINE DELPHI22_UP}
{$DEFINE DELPHI23_UP}
{$DEFINE DELPHI24_UP}
{$DEFINE DELPHI25_UP}
{$ENDIF}
{$IFDEF DELPHI_VERSION_UNKNOW}
{$DEFINE DELPHI5_UP}
{$DEFINE DELPHI6_UP}
{$DEFINE DELPHI7_UP}
{$DEFINE DELPHI8_UP}
{$DEFINE DELPHI9_UP}
{$DEFINE DELPHI10_UP}
{$DEFINE DELPHI11_UP}
{$DEFINE DELPHI12_UP}
{$DEFINE DELPHI14_UP}
{$DEFINE DELPHI15_UP}
{$DEFINE DELPHI16_UP}
{$DEFINE DELPHI17_UP}
{$DEFINE DELPHI18_UP}
{$DEFINE DELPHI19_UP}
{$DEFINE DELPHI20_UP}
{$DEFINE DELPHI21_UP}
{$DEFINE DELPHI22_UP}
{$DEFINE DELPHI23_UP}
{$DEFINE DELPHI24_UP}
{$DEFINE DELPHI25_UP}
{$ENDIF}
{$IFDEF DELPHI9_UP}
{$DEFINE SUPPORTS_INLINE}
{$ENDIF}

View File

@ -0,0 +1,204 @@
// ************************************************************************
// ***************************** CEF4Delphi *******************************
// ************************************************************************
//
// CEF4Delphi is based on DCEF3 which uses CEF3 to embed a chromium-based
// browser in Delphi applications.
//
// The original license of DCEF3 still applies to CEF4Delphi.
//
// 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.
//
// ************************************************************************
// ************ vvvv Original license and comments below vvvv *************
// ************************************************************************
(*
* Delphi Chromium Embedded 3
*
* Usage allowed under the restrictions of the Lesser GNU General Public License
* or alternatively the restrictions of the Mozilla Public License 1.1
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
* the specific language governing rights and limitations under the License.
*
* Unit owner : Henri Gourvest <hgourvest@gmail.com>
* Web site : http://www.progdigy.com
* Repository : http://code.google.com/p/delphichromiumembedded/
* Group : http://groups.google.com/group/delphichromiumembedded
*
* Embarcadero Technologies, Inc is not permitted to use or redistribute
* this source code without explicit permission.
*
*)
unit uFMXApplicationService;
{$I cef.inc}
// This unit is based in the TFMXApplicationService class created by Takashi Yamamoto
// https://www.gesource.jp/weblog/?p=7367
interface
uses
FMX.Platform;
type
TFMXApplicationService = class(TInterfacedObject, IFMXApplicationService)
protected
class var OldFMXApplicationService: IFMXApplicationService;
class var NewFMXApplicationService: IFMXApplicationService;
public
procedure Run;
function HandleMessage: Boolean;
procedure WaitMessage;
function GetDefaultTitle: string;
function GetTitle: string;
procedure SetTitle(const Value: string);
function GetVersionString: string;
procedure Terminate;
function Terminating: Boolean;
function Running: Boolean;
class procedure AddPlatformService;
property DefaultTitle : string read GetDefaultTitle;
property Title : string read GetTitle write SetTitle;
property AppVersion : string read GetVersionString;
end;
implementation
uses
FMX.Forms,
uFMXExternalPumpBrowser,
{$IFDEF MSWINDOWS}
Winapi.Messages, Winapi.Windows,
{$ENDIF}
uCEFConstants;
class procedure TFMXApplicationService.AddPlatformService;
begin
if TPlatformServices.Current.SupportsPlatformService(IFMXApplicationService, IInterface(OldFMXApplicationService)) then
begin
TPlatformServices.Current.RemovePlatformService(IFMXApplicationService);
NewFMXApplicationService := TFMXApplicationService.Create;
TPlatformServices.Current.AddPlatformService(IFMXApplicationService, NewFMXApplicationService);
end;
end;
function TFMXApplicationService.GetDefaultTitle: string;
begin
Result := OldFMXApplicationService.GetDefaultTitle;
end;
function TFMXApplicationService.GetTitle: string;
begin
Result := OldFMXApplicationService.GetTitle;
end;
function TFMXApplicationService.GetVersionString: string;
begin
Result := OldFMXApplicationService.GetVersionString;
end;
procedure TFMXApplicationService.Run;
begin
OldFMXApplicationService.Run;
end;
procedure TFMXApplicationService.SetTitle(const Value: string);
begin
OldFMXApplicationService.SetTitle(Value);
end;
procedure TFMXApplicationService.Terminate;
begin
OldFMXApplicationService.Terminate;
end;
function TFMXApplicationService.Terminating: Boolean;
begin
Result := OldFMXApplicationService.Terminating;
end;
procedure TFMXApplicationService.WaitMessage;
begin
OldFMXApplicationService.WaitMessage;
end;
function TFMXApplicationService.Running: Boolean;
begin
Result := OldFMXApplicationService.Running;
end;
function TFMXApplicationService.HandleMessage: Boolean;
{$IFDEF MSWINDOWS}
var
TempMsg : TMsg;
{$ENDIF}
begin
{$IFDEF MSWINDOWS}
if PeekMessage(TempMsg, 0, 0, 0, PM_NOREMOVE) then
case TempMsg.Message of
WM_MOVE,
WM_MOVING :
if not(Application.Terminated) and
(Application.MainForm <> nil) and
(Application.MainForm is TFMXExternalPumpBrowserFrm) then
TFMXExternalPumpBrowserFrm(Application.MainForm).NotifyMoveOrResizeStarted;
WM_CAPTURECHANGED,
WM_CANCELMODE :
if not(Application.Terminated) and
(Application.MainForm <> nil) and
(Application.MainForm is TFMXExternalPumpBrowserFrm) then
TFMXExternalPumpBrowserFrm(Application.MainForm).SendCaptureLostEvent;
WM_SYSCHAR :
if not(Application.Terminated) and
(Application.MainForm <> nil) and
(Application.MainForm is TFMXExternalPumpBrowserFrm) then
TFMXExternalPumpBrowserFrm(Application.MainForm).HandleSYSCHAR(TempMsg);
WM_SYSKEYDOWN :
if not(Application.Terminated) and
(Application.MainForm <> nil) and
(Application.MainForm is TFMXExternalPumpBrowserFrm) then
TFMXExternalPumpBrowserFrm(Application.MainForm).HandleSYSKEYDOWN(TempMsg);
WM_SYSKEYUP :
if not(Application.Terminated) and
(Application.MainForm <> nil) and
(Application.MainForm is TFMXExternalPumpBrowserFrm) then
TFMXExternalPumpBrowserFrm(Application.MainForm).HandleSYSKEYUP(TempMsg);
CEF_AFTERCREATED :
if not(Application.Terminated) and
(Application.MainForm <> nil) and
(Application.MainForm is TFMXExternalPumpBrowserFrm) then
TFMXExternalPumpBrowserFrm(Application.MainForm).DoBrowserCreated;
CEF_PENDINGRESIZE :
if not(Application.Terminated) and
(Application.MainForm <> nil) and
(Application.MainForm is TFMXExternalPumpBrowserFrm) then
TFMXExternalPumpBrowserFrm(Application.MainForm).DoResize;
CEF_PUMPHAVEWORK :
if not(Application.Terminated) and
(GlobalCEFWorkScheduler <> nil) then
GlobalCEFWorkScheduler.ScheduleWork(TempMsg.lParam);
end;
{$ENDIF}
Result := OldFMXApplicationService.HandleMessage;
end;
end.

View File

@ -0,0 +1,91 @@
object FMXExternalPumpBrowserFrm: TFMXExternalPumpBrowserFrm
Left = 0
Top = 0
Caption = 'Initializing browser. Please wait...'
ClientHeight = 534
ClientWidth = 800
Position = ScreenCenter
FormFactor.Width = 320
FormFactor.Height = 480
FormFactor.Devices = [Desktop]
OnCreate = FormCreate
OnCloseQuery = FormCloseQuery
OnDestroy = FormDestroy
OnShow = FormShow
OnHide = FormHide
DesignerMasterStyle = 0
object AddressPnl: TPanel
Align = Top
Padding.Left = 5.000000000000000000
Padding.Top = 5.000000000000000000
Padding.Right = 5.000000000000000000
Padding.Bottom = 5.000000000000000000
Size.Width = 800.000000000000000000
Size.Height = 33.000000000000000000
Size.PlatformDefault = False
TabOrder = 1
object GoBtn: TButton
Align = Right
Position.X = 759.000000000000000000
Position.Y = 5.000000000000000000
Size.Width = 36.000000000000000000
Size.Height = 23.000000000000000000
Size.PlatformDefault = False
TabOrder = 1
Text = 'Go'
OnClick = GoBtnClick
OnEnter = GoBtnEnter
end
object AddressEdt: TEdit
Touch.InteractiveGestures = [LongTap, DoubleTap]
Align = Client
TabOrder = 0
Text = 'https://www.google.com'
Size.Width = 754.000000000000000000
Size.Height = 23.000000000000000000
Size.PlatformDefault = False
OnEnter = AddressEdtEnter
end
end
object Panel1: TFMXBufferPanel
Align = Client
TabOrder = 0
Color = claTomato
CanFocus = True
Size.Width = 800.000000000000000000
Size.Height = 501.000000000000000000
Size.PlatformDefault = False
OnEnter = Panel1Enter
OnExit = Panel1Exit
OnResize = Panel1Resize
OnClick = Panel1Click
OnMouseDown = Panel1MouseDown
OnMouseMove = Panel1MouseMove
OnMouseUp = Panel1MouseUp
OnMouseLeave = Panel1MouseLeave
OnMouseWheel = Panel1MouseWheel
OnKeyUp = Panel1KeyUp
OnKeyDown = Panel1KeyDown
end
object Timer1: TTimer
Enabled = False
Interval = 300
OnTimer = Timer1Timer
Left = 384
Top = 313
end
object chrmosr: TFMXChromium
OnAfterCreated = chrmosrAfterCreated
OnBeforeClose = chrmosrBeforeClose
OnClose = chrmosrClose
OnGetViewRect = chrmosrGetViewRect
OnGetScreenPoint = chrmosrGetScreenPoint
OnGetScreenInfo = chrmosrGetScreenInfo
OnPopupShow = chrmosrPopupShow
OnPopupSize = chrmosrPopupSize
OnPaint = chrmosrPaint
OnCursorChange = chrmosrCursorChange
Left = 272
Top = 313
end
end

View File

@ -0,0 +1,806 @@
// ************************************************************************
// ***************************** CEF4Delphi *******************************
// ************************************************************************
//
// CEF4Delphi is based on DCEF3 which uses CEF3 to embed a chromium-based
// browser in Delphi applications.
//
// The original license of DCEF3 still applies to CEF4Delphi.
//
// 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.
//
// ************************************************************************
// ************ vvvv Original license and comments below vvvv *************
// ************************************************************************
(*
* Delphi Chromium Embedded 3
*
* Usage allowed under the restrictions of the Lesser GNU General Public License
* or alternatively the restrictions of the Mozilla Public License 1.1
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
* the specific language governing rights and limitations under the License.
*
* Unit owner : Henri Gourvest <hgourvest@gmail.com>
* Web site : http://www.progdigy.com
* Repository : http://code.google.com/p/delphichromiumembedded/
* Group : http://groups.google.com/group/delphichromiumembedded
*
* Embarcadero Technologies, Inc is not permitted to use or redistribute
* this source code without explicit permission.
*
*)
unit uFMXExternalPumpBrowser;
{$I cef.inc}
interface
uses
{$IFDEF MSWINDOWS}
Winapi.Messages, Winapi.Windows,
{$ENDIF}
System.Types, System.UITypes, System.Classes, System.SyncObjs,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Dialogs,
FMX.Edit, FMX.StdCtrls, FMX.Controls.Presentation,
{$IFDEF DELPHI17_UP}
FMX.Graphics,
{$ENDIF}
uFMXChromium, uFMXBufferPanel, uFMXWorkScheduler,
uCEFInterfaces, uCEFTypes, uCEFConstants;
type
TFMXExternalPumpBrowserFrm = class(TForm)
AddressPnl: TPanel;
AddressEdt: TEdit;
GoBtn: TButton;
Panel1: TFMXBufferPanel;
chrmosr: TFMXChromium;
Timer1: TTimer;
procedure GoBtnClick(Sender: TObject);
procedure GoBtnEnter(Sender: TObject);
procedure Panel1Enter(Sender: TObject);
procedure Panel1Exit(Sender: TObject);
procedure Panel1Resize(Sender: TObject);
procedure Panel1Click(Sender: TObject);
procedure Panel1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Single);
procedure Panel1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Single);
procedure Panel1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Single);
procedure Panel1MouseLeave(Sender: TObject);
procedure Panel1MouseWheel(Sender: TObject; Shift: TShiftState; WheelDelta: Integer; var Handled: Boolean);
procedure Panel1KeyUp(Sender: TObject; var Key: Word; var KeyChar: Char; Shift: TShiftState);
procedure Panel1KeyDown(Sender: TObject; var Key: Word; var KeyChar: Char; Shift: TShiftState);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure FormHide(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure chrmosrPaint(Sender: TObject; const browser: ICefBrowser; kind: TCefPaintElementType; dirtyRectsCount: NativeUInt; const dirtyRects: PCefRectArray; const buffer: Pointer; width, height: Integer);
procedure chrmosrCursorChange(Sender: TObject; const browser: ICefBrowser; cursor: HICON; cursorType: TCefCursorType; const customCursorInfo: PCefCursorInfo);
procedure chrmosrGetViewRect(Sender: TObject; const browser: ICefBrowser; var rect: TCefRect; out Result: Boolean);
procedure chrmosrGetScreenPoint(Sender: TObject; const browser: ICefBrowser; viewX, viewY: Integer; var screenX, screenY: Integer; out Result: Boolean);
procedure chrmosrGetScreenInfo(Sender: TObject; const browser: ICefBrowser; var screenInfo: TCefScreenInfo; out Result: Boolean);
procedure chrmosrPopupShow(Sender: TObject; const browser: ICefBrowser; show: Boolean);
procedure chrmosrPopupSize(Sender: TObject; const browser: ICefBrowser; const rect: PCefRect);
procedure chrmosrAfterCreated(Sender: TObject; const browser: ICefBrowser);
procedure chrmosrClose(Sender: TObject; const browser: ICefBrowser; out Result: Boolean);
procedure chrmosrBeforeClose(Sender: TObject; const browser: ICefBrowser);
procedure Timer1Timer(Sender: TObject);
procedure AddressEdtEnter(Sender: TObject);
protected
FPopUpBitmap : TBitmap;
FPopUpRect : TRect;
FShowPopUp : boolean;
FResizing : boolean;
FPendingResize : boolean;
FCanClose : boolean;
FClosing : boolean;
FResizeCS : TCriticalSection;
{$IFDEF DELPHI17_UP}
FMouseWheelService : IFMXMouseService;
{$ENDIF}
procedure LoadURL;
function getModifiers(Shift: TShiftState): TCefEventFlags;
function GetButton(Button: TMouseButton): TCefMouseButtonType;
function SendCompMessage(aMsg : cardinal; wParam : cardinal = 0; lParam : integer = 0) : boolean;
public
procedure DoResize;
procedure DoBrowserCreated;
procedure NotifyMoveOrResizeStarted;
procedure SendCaptureLostEvent;
procedure HandleSYSCHAR(const aMessage : TMsg);
procedure HandleSYSKEYDOWN(const aMessage : TMsg);
procedure HandleSYSKEYUP(const aMessage : TMsg);
end;
var
FMXExternalPumpBrowserFrm : TFMXExternalPumpBrowserFrm;
GlobalCEFWorkScheduler : TFMXWorkScheduler = nil;
// This is a simple browser using FireMonkey components in OSR mode (off-screen rendering)
// and a external message pump.
// It's recomemded to understand the code in the SimpleOSRBrowser and OSRExternalPumpBrowser demos before
// reading the code in this demo.
// Due to the Firemonkey code structure, this demo uses a IFMXApplicationService interface implemented in
// uFMXApplicationService.pas to intercept some windows messages needed to make a CEF browser work.
// The TFMXApplicationService.HandleMessages function receives many of the messages that the
// OSRExternalPumpBrowser demo hadled in the main form or in the GlobalCEFWorkScheduler.
// It was necessary to destroy the browser following the destruction sequence described in
// the MDIBrowser demo but in OSR mode there are some modifications.
// This is the destruction sequence in OSR mode :
// 1- FormCloseQuery sets CanClose to the initial FCanClose value (False) and calls chrmosr.CloseBrowser(True).
// 2- chrmosr.CloseBrowser(True) will trigger chrmosr.OnClose and we have to
// set "Result" to false and CEF3 will destroy the internal browser immediately.
// 3- chrmosr.OnBeforeClose is triggered because the internal browser was destroyed.
// Now we set FCanClose to True and send WM_CLOSE to the form.
procedure GlobalCEFApp_OnScheduleMessagePumpWork(const aDelayMS : int64);
implementation
{$R *.fmx}
uses
System.SysUtils, System.Math, FMX.Platform, FMX.Platform.Win,
uCEFMiscFunctions, uCEFApplication, uFMXApplicationService;
procedure GlobalCEFApp_OnScheduleMessagePumpWork(const aDelayMS : int64);
begin
if (GlobalCEFWorkScheduler <> nil) then GlobalCEFWorkScheduler.ScheduleMessagePumpWork(aDelayMS);
end;
procedure TFMXExternalPumpBrowserFrm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
CanClose := FCanClose;
if not(FClosing) then
begin
FClosing := True;
Visible := False;
AddressPnl.Enabled := False;
chrmosr.CloseBrowser(True);
end;
end;
procedure TFMXExternalPumpBrowserFrm.FormCreate(Sender: TObject);
begin
TFMXApplicationService.AddPlatformService;
FPopUpBitmap := nil;
FPopUpRect := rect(0, 0, 0, 0);
FShowPopUp := False;
FResizing := False;
FPendingResize := False;
FCanClose := False;
FClosing := False;
FResizeCS := TCriticalSection.Create;
{$IFDEF DELPHI17_UP}
if TPlatformServices.Current.SupportsPlatformService(IFMXMouseService) then
FMouseWheelService := TPlatformServices.Current.GetPlatformService(IFMXMouseService) as IFMXMouseService;
{$ENDIF}
end;
procedure TFMXExternalPumpBrowserFrm.FormDestroy(Sender: TObject);
begin
if (FPopUpBitmap <> nil) then FreeAndNil(FPopUpBitmap);
end;
procedure TFMXExternalPumpBrowserFrm.FormHide(Sender: TObject);
begin
chrmosr.SendFocusEvent(False);
chrmosr.WasHidden(True);
end;
procedure TFMXExternalPumpBrowserFrm.FormShow(Sender: TObject);
begin
if chrmosr.Initialized then
begin
chrmosr.WasHidden(False);
chrmosr.SendFocusEvent(True);
end
else
begin
// opaque white background color
chrmosr.Options.BackgroundColor := CefColorSetARGB($FF, $FF, $FF, $FF);
if not(chrmosr.CreateBrowser) then Timer1.Enabled := True;
end;
end;
procedure TFMXExternalPumpBrowserFrm.GoBtnClick(Sender: TObject);
begin
LoadURL;
end;
procedure TFMXExternalPumpBrowserFrm.LoadURL;
begin
FResizeCS.Acquire;
FResizing := False;
FPendingResize := False;
FResizeCS.Release;
chrmosr.LoadURL(AddressEdt.Text);
end;
procedure TFMXExternalPumpBrowserFrm.GoBtnEnter(Sender: TObject);
begin
chrmosr.SendFocusEvent(False);
end;
procedure TFMXExternalPumpBrowserFrm.Panel1Click(Sender: TObject);
begin
Panel1.SetFocus;
end;
procedure TFMXExternalPumpBrowserFrm.Panel1Enter(Sender: TObject);
begin
chrmosr.SendFocusEvent(True);
end;
procedure TFMXExternalPumpBrowserFrm.Panel1Exit(Sender: TObject);
begin
chrmosr.SendFocusEvent(False);
end;
procedure TFMXExternalPumpBrowserFrm.Panel1KeyDown(Sender : TObject;
var Key : Word;
var KeyChar : Char;
Shift : TShiftState);
var
TempKeyEvent : TCefKeyEvent;
begin
if not(Panel1.IsFocused) or (chrmosr = nil) then exit;
if (Key in [VK_BACK..VK_HELP]) and (KeyChar = #0) then
begin
TempKeyEvent.kind := KEYEVENT_RAWKEYDOWN;
TempKeyEvent.modifiers := getModifiers(Shift);
TempKeyEvent.windows_key_code := Key;
TempKeyEvent.native_key_code := 0;
TempKeyEvent.is_system_key := ord(False);
TempKeyEvent.character := #0;
TempKeyEvent.unmodified_character := #0;
TempKeyEvent.focus_on_editable_field := ord(False);
chrmosr.SendKeyEvent(@TempKeyEvent);
end;
end;
procedure TFMXExternalPumpBrowserFrm.Panel1KeyUp(Sender : TObject;
var Key : Word;
var KeyChar : Char;
Shift : TShiftState);
var
TempKeyEvent : TCefKeyEvent;
begin
if not(Panel1.IsFocused) or (chrmosr = nil) then exit;
if (Key = 0) and (KeyChar <> #0) then
begin
TempKeyEvent.kind := KEYEVENT_CHAR;
TempKeyEvent.modifiers := getModifiers(Shift);
TempKeyEvent.windows_key_code := ord(KeyChar);
TempKeyEvent.native_key_code := 0;
TempKeyEvent.is_system_key := ord(False);
TempKeyEvent.character := #0;
TempKeyEvent.unmodified_character := #0;
TempKeyEvent.focus_on_editable_field := ord(False);
chrmosr.SendKeyEvent(@TempKeyEvent);
end
else
if (Key in [VK_BACK..VK_HELP]) and (KeyChar = #0) then
begin
TempKeyEvent.kind := KEYEVENT_KEYUP;
TempKeyEvent.modifiers := getModifiers(Shift);
TempKeyEvent.windows_key_code := Key;
TempKeyEvent.native_key_code := 0;
TempKeyEvent.is_system_key := ord(False);
TempKeyEvent.character := #0;
TempKeyEvent.unmodified_character := #0;
TempKeyEvent.focus_on_editable_field := ord(False);
chrmosr.SendKeyEvent(@TempKeyEvent);
end;
end;
procedure TFMXExternalPumpBrowserFrm.Panel1MouseDown(Sender : TObject;
Button : TMouseButton;
Shift : TShiftState;
X, Y : Single);
var
TempEvent : TCefMouseEvent;
begin
if (GlobalCEFApp <> nil) and (chrmosr <> nil) then
begin
Panel1.SetFocus;
TempEvent.x := round(X);
TempEvent.y := round(Y);
TempEvent.modifiers := getModifiers(Shift);
chrmosr.SendMouseClickEvent(@TempEvent, GetButton(Button), False, 1);
end;
end;
procedure TFMXExternalPumpBrowserFrm.Panel1MouseLeave(Sender: TObject);
var
TempEvent : TCefMouseEvent;
TempPoint : TPoint;
begin
if (GlobalCEFApp <> nil) and (chrmosr <> nil) then
begin
GetCursorPos(TempPoint);
TempPoint := Panel1.ScreenToclient(TempPoint);
TempEvent.x := TempPoint.x;
TempEvent.y := TempPoint.y;
TempEvent.modifiers := GetCefMouseModifiers;
chrmosr.SendMouseMoveEvent(@TempEvent, True);
end;
end;
procedure TFMXExternalPumpBrowserFrm.Panel1MouseMove(Sender : TObject;
Shift : TShiftState;
X, Y : Single);
var
TempEvent : TCefMouseEvent;
begin
if (GlobalCEFApp <> nil) and (chrmosr <> nil) then
begin
TempEvent.x := round(X);
TempEvent.y := round(Y);
TempEvent.modifiers := getModifiers(Shift);
chrmosr.SendMouseMoveEvent(@TempEvent, False);
end;
end;
procedure TFMXExternalPumpBrowserFrm.Panel1MouseUp(Sender : TObject;
Button : TMouseButton;
Shift : TShiftState;
X, Y : Single);
var
TempEvent : TCefMouseEvent;
begin
if (GlobalCEFApp <> nil) and (chrmosr <> nil) then
begin
TempEvent.x := round(X);
TempEvent.y := round(Y);
TempEvent.modifiers := getModifiers(Shift);
chrmosr.SendMouseClickEvent(@TempEvent, GetButton(Button), True, 1);
end;
end;
procedure TFMXExternalPumpBrowserFrm.Panel1MouseWheel(Sender : TObject;
Shift : TShiftState;
WheelDelta : Integer;
var Handled : Boolean);
var
TempEvent : TCefMouseEvent;
TempPointF : TPointF;
begin
if Panel1.IsFocused and (GlobalCEFApp <> nil) and (chrmosr <> nil) then
begin
{$IFDEF DELPHI17_UP}
if (FMouseWheelService <> nil) then
TempPointF := FMouseWheelService.GetMousePos
else
exit;
{$ELSE}
TempPointF := Platform.GetMousePos;
{$ENDIF}
TempEvent.x := round(TempPointF.x);
TempEvent.y := round(TempPointF.y);
TempEvent.modifiers := getModifiers(Shift);
chrmosr.SendMouseWheelEvent(@TempEvent, 0, WheelDelta);
end;
end;
procedure TFMXExternalPumpBrowserFrm.Panel1Resize(Sender: TObject);
begin
DoResize;
end;
procedure TFMXExternalPumpBrowserFrm.Timer1Timer(Sender: TObject);
begin
Timer1.Enabled := False;
if not(chrmosr.CreateBrowser) and not(chrmosr.Initialized) then Timer1.Enabled := True;
end;
procedure TFMXExternalPumpBrowserFrm.AddressEdtEnter(Sender: TObject);
begin
chrmosr.SendFocusEvent(False);
end;
procedure TFMXExternalPumpBrowserFrm.chrmosrAfterCreated(Sender: TObject; const browser: ICefBrowser);
begin
SendCompMessage(CEF_AFTERCREATED);
end;
procedure TFMXExternalPumpBrowserFrm.chrmosrBeforeClose(Sender: TObject; const browser: ICefBrowser);
begin
FCanClose := True;
SendCompMessage(WM_CLOSE);
end;
procedure TFMXExternalPumpBrowserFrm.chrmosrClose(Sender: TObject; const browser: ICefBrowser; out Result: Boolean);
begin
Result := False;
end;
procedure TFMXExternalPumpBrowserFrm.chrmosrCursorChange(Sender : TObject;
const browser : ICefBrowser;
cursor : HICON;
cursorType : TCefCursorType;
const customCursorInfo : PCefCursorInfo);
begin
Panel1.Cursor := GefCursorToWindowsCursor(cursorType);
end;
procedure TFMXExternalPumpBrowserFrm.chrmosrGetScreenInfo(Sender : TObject;
const browser : ICefBrowser;
var screenInfo : TCefScreenInfo;
out Result : Boolean);
var
TempRect : TCEFRect;
begin
if (GlobalCEFApp <> nil) then
begin
TempRect.x := 0;
TempRect.y := 0;
TempRect.width := round(Panel1.Width);
TempRect.height := round(Panel1.Height);
screenInfo.device_scale_factor := GlobalCEFApp.DeviceScaleFactor;
screenInfo.depth := 0;
screenInfo.depth_per_component := 0;
screenInfo.is_monochrome := Ord(False);
screenInfo.rect := TempRect;
screenInfo.available_rect := TempRect;
Result := True;
end
else
Result := False;
end;
procedure TFMXExternalPumpBrowserFrm.chrmosrGetScreenPoint(Sender : TObject;
const browser : ICefBrowser;
viewX : Integer;
viewY : Integer;
var screenX : Integer;
var screenY : Integer;
out Result : Boolean);
var
TempScreenPt, TempViewPt : TPoint;
begin
if (GlobalCEFApp <> nil) then
begin
TempViewPt.x := LogicalToDevice(viewX, GlobalCEFApp.DeviceScaleFactor);
TempViewPt.y := LogicalToDevice(viewY, GlobalCEFApp.DeviceScaleFactor);
TempScreenPt := Panel1.ClientToScreen(TempViewPt);
screenX := TempScreenPt.x;
screenY := TempScreenPt.y;
Result := True;
end
else
Result := False;
end;
procedure TFMXExternalPumpBrowserFrm.chrmosrGetViewRect(Sender : TObject;
const browser : ICefBrowser;
var rect : TCefRect;
out Result : Boolean);
begin
if (GlobalCEFApp <> nil) then
begin
rect.x := 0;
rect.y := 0;
rect.width := round(Panel1.Width);
rect.height := round(Panel1.Height);
Result := True;
end
else
Result := False;
end;
procedure TFMXExternalPumpBrowserFrm.chrmosrPaint(Sender : TObject;
const browser : ICefBrowser;
kind : TCefPaintElementType;
dirtyRectsCount : NativeUInt;
const dirtyRects : PCefRectArray;
const buffer : Pointer;
width : Integer;
height : Integer);
var
src, dst: PByte;
i, j, TempLineSize, TempSrcOffset, TempDstOffset, SrcStride, DstStride : Integer;
n : NativeUInt;
TempWidth, TempHeight, TempScanlineSize : integer;
TempBufferBits : Pointer;
TempForcedResize : boolean;
TempBitmapData : TBitmapData;
TempBitmap : TBitmap;
begin
try
FResizeCS.Acquire;
TempForcedResize := False;
if Panel1.BeginBufferDraw then
try
if (kind = PET_POPUP) then
begin
if (FPopUpBitmap = nil) or
(width <> FPopUpBitmap.Width) or
(height <> FPopUpBitmap.Height) then
begin
if (FPopUpBitmap <> nil) then FPopUpBitmap.Free;
FPopUpBitmap := TBitmap.Create(width, height);
{$IFDEF DELPHI17_UP}
FPopUpBitmap.BitmapScale := Panel1.ScreenScale;
{$ENDIF}
end;
TempWidth := FPopUpBitmap.Width;
TempHeight := FPopUpBitmap.Height;
TempScanlineSize := FPopUpBitmap.BytesPerLine;
TempBitmap := FPopUpBitmap;
end
else
begin
TempForcedResize := Panel1.UpdateBufferDimensions(Width, Height) or not(Panel1.BufferIsResized(False));
TempWidth := Panel1.BufferWidth;
TempHeight := Panel1.BufferHeight;
TempScanlineSize := Panel1.ScanlineSize;
TempBitmap := Panel1.Buffer;
end;
if (TempBitmap <> nil) {$IFDEF DELPHI17_UP}and TempBitmap.Map(TMapAccess.ReadWrite, TempBitmapData){$ENDIF} then
begin
try
{$IFDEF DELPHI17_UP}
TempBufferBits := TempBitmapData.Data;
{$ELSE}
TempBufferBits := TempBitmapData.StartLine;
{$ENDIF}
SrcStride := Width * SizeOf(TRGBQuad);
DstStride := TempScanlineSize;
n := 0;
while (n < dirtyRectsCount) do
begin
if (dirtyRects[n].x >= 0) and (dirtyRects[n].y >= 0) then
begin
TempLineSize := min(dirtyRects[n].width, TempWidth - dirtyRects[n].x) * SizeOf(TRGBQuad);
if (TempLineSize > 0) then
begin
TempSrcOffset := ((dirtyRects[n].y * Width) + dirtyRects[n].x) * SizeOf(TRGBQuad);
TempDstOffset := (dirtyRects[n].y * TempScanlineSize) + (dirtyRects[n].x * SizeOf(TRGBQuad));
src := @PByte(buffer)[TempSrcOffset];
dst := @PByte(TempBufferBits)[TempDstOffset];
i := 0;
j := min(dirtyRects[n].height, TempHeight - dirtyRects[n].y);
while (i < j) do
begin
Move(src^, dst^, TempLineSize);
inc(dst, DstStride);
inc(src, SrcStride);
inc(i);
end;
end;
end;
inc(n);
end;
Panel1.InvalidatePanel;
finally
{$IFDEF DELPHI17_UP}
TempBitmap.Unmap(TempBitmapData);
{$ENDIF}
end;
if FShowPopup and (FPopUpBitmap <> nil) then
Panel1.BufferDraw(FPopUpRect.Left, FPopUpRect.Top, FPopUpBitmap);
end;
if (kind = PET_VIEW) then
begin
if TempForcedResize or FPendingResize then SendCompMessage(CEF_PENDINGRESIZE);
FResizing := False;
FPendingResize := False;
end;
finally
Panel1.EndBufferDraw;
end;
finally
FResizeCS.Release;
end;
end;
procedure TFMXExternalPumpBrowserFrm.chrmosrPopupShow(Sender: TObject; const browser: ICefBrowser; show: Boolean);
begin
if show then
FShowPopUp := True
else
begin
FShowPopUp := False;
FPopUpRect := rect(0, 0, 0, 0);
if (chrmosr <> nil) then chrmosr.Invalidate(PET_VIEW);
end;
end;
procedure TFMXExternalPumpBrowserFrm.chrmosrPopupSize(Sender: TObject; const browser: ICefBrowser; const rect: PCefRect);
begin
if (GlobalCEFApp <> nil) then
begin
FPopUpRect.Left := rect.x;
FPopUpRect.Top := rect.y;
FPopUpRect.Right := rect.x + LogicalToDevice(rect.width, GlobalCEFApp.DeviceScaleFactor) - 1;
FPopUpRect.Bottom := rect.y + LogicalToDevice(rect.height, GlobalCEFApp.DeviceScaleFactor) - 1;
end;
end;
procedure TFMXExternalPumpBrowserFrm.DoResize;
begin
try
if (FResizeCS <> nil) then
begin
FResizeCS.Acquire;
if FResizing then
FPendingResize := True
else
if Panel1.BufferIsResized then
chrmosr.Invalidate(PET_VIEW)
else
begin
FResizing := True;
chrmosr.WasResized;
end;
end;
finally
if (FResizeCS <> nil) then FResizeCS.Release;
end;
end;
procedure TFMXExternalPumpBrowserFrm.NotifyMoveOrResizeStarted;
begin
if (chrmosr <> nil) then chrmosr.NotifyMoveOrResizeStarted;
end;
procedure TFMXExternalPumpBrowserFrm.SendCaptureLostEvent;
begin
if (chrmosr <> nil) then chrmosr.SendCaptureLostEvent;
end;
procedure TFMXExternalPumpBrowserFrm.HandleSYSCHAR(const aMessage : TMsg);
var
TempKeyEvent : TCefKeyEvent;
begin
if Panel1.IsFocused and (aMessage.wParam in [VK_BACK..VK_HELP]) then
begin
TempKeyEvent.kind := KEYEVENT_CHAR;
TempKeyEvent.modifiers := GetCefKeyboardModifiers(aMessage.wParam, aMessage.lParam);
TempKeyEvent.windows_key_code := aMessage.wParam;
TempKeyEvent.native_key_code := aMessage.lParam;
TempKeyEvent.is_system_key := ord(True);
TempKeyEvent.character := #0;
TempKeyEvent.unmodified_character := #0;
TempKeyEvent.focus_on_editable_field := ord(False);
chrmosr.SendKeyEvent(@TempKeyEvent);
end;
end;
procedure TFMXExternalPumpBrowserFrm.HandleSYSKEYDOWN(const aMessage : TMsg);
var
TempKeyEvent : TCefKeyEvent;
begin
if Panel1.IsFocused and (aMessage.wParam in [VK_BACK..VK_HELP]) then
begin
TempKeyEvent.kind := KEYEVENT_RAWKEYDOWN;
TempKeyEvent.modifiers := GetCefKeyboardModifiers(aMessage.wParam, aMessage.lParam);
TempKeyEvent.windows_key_code := aMessage.wParam;
TempKeyEvent.native_key_code := aMessage.lParam;
TempKeyEvent.is_system_key := ord(True);
TempKeyEvent.character := #0;
TempKeyEvent.unmodified_character := #0;
TempKeyEvent.focus_on_editable_field := ord(False);
chrmosr.SendKeyEvent(@TempKeyEvent);
end;
end;
procedure TFMXExternalPumpBrowserFrm.HandleSYSKEYUP(const aMessage : TMsg);
var
TempKeyEvent : TCefKeyEvent;
begin
if Panel1.IsFocused and (aMessage.wParam in [VK_BACK..VK_HELP]) then
begin
TempKeyEvent.kind := KEYEVENT_KEYUP;
TempKeyEvent.modifiers := GetCefKeyboardModifiers(aMessage.wParam, aMessage.lParam);
TempKeyEvent.windows_key_code := aMessage.wParam;
TempKeyEvent.native_key_code := aMessage.lParam;
TempKeyEvent.is_system_key := ord(True);
TempKeyEvent.character := #0;
TempKeyEvent.unmodified_character := #0;
TempKeyEvent.focus_on_editable_field := ord(False);
chrmosr.SendKeyEvent(@TempKeyEvent);
end;
end;
procedure TFMXExternalPumpBrowserFrm.DoBrowserCreated;
begin
Caption := 'FMX External Pump Browser';
AddressPnl.Enabled := True;
Panel1.SetFocus;
LoadURL;
end;
function TFMXExternalPumpBrowserFrm.getModifiers(Shift: TShiftState): TCefEventFlags;
begin
Result := EVENTFLAG_NONE;
if (ssShift in Shift) then Result := Result or EVENTFLAG_SHIFT_DOWN;
if (ssAlt in Shift) then Result := Result or EVENTFLAG_ALT_DOWN;
if (ssCtrl in Shift) then Result := Result or EVENTFLAG_CONTROL_DOWN;
if (ssLeft in Shift) then Result := Result or EVENTFLAG_LEFT_MOUSE_BUTTON;
if (ssRight in Shift) then Result := Result or EVENTFLAG_RIGHT_MOUSE_BUTTON;
if (ssMiddle in Shift) then Result := Result or EVENTFLAG_MIDDLE_MOUSE_BUTTON;
end;
function TFMXExternalPumpBrowserFrm.GetButton(Button: TMouseButton): TCefMouseButtonType;
begin
case Button of
TMouseButton.mbRight : Result := MBT_RIGHT;
TMouseButton.mbMiddle : Result := MBT_MIDDLE;
else Result := MBT_LEFT;
end;
end;
function TFMXExternalPumpBrowserFrm.SendCompMessage(aMsg, wParam : cardinal; lParam : integer) : boolean;
{$IFDEF MSWINDOWS}
var
TempHandle : TWinWindowHandle;
{$ENDIF}
begin
{$IFDEF MSWINDOWS}
TempHandle := WindowHandleToPlatform(Handle);
Result := WinApi.Windows.PostMessage(TempHandle.Wnd, aMsg, wParam, lParam);
{$ELSE}
Result := False;
{$ENDIF}
end;
end.

View File

@ -72,6 +72,7 @@ begin
GlobalCEFApp.FlashEnabled := False;
GlobalCEFApp.ExternalMessagePump := True;
GlobalCEFApp.MultiThreadedMessageLoop := False;
GlobalCEFApp.SitePerProcess := False;
GlobalCEFApp.OnScheduleMessagePumpWork := GlobalCEFApp_OnScheduleMessagePumpWork;
if GlobalCEFApp.StartMainProcess then

View File

@ -59,6 +59,7 @@ begin
GlobalCEFApp.WindowlessRenderingEnabled := True;
GlobalCEFApp.EnableHighDPISupport := True;
GlobalCEFApp.FastUnload := True;
GlobalCEFApp.SitePerProcess := False;
if GlobalCEFApp.StartMainProcess then
begin

View File

@ -2,7 +2,7 @@ object Form1: TForm1
Left = 0
Top = 0
Caption = 'Simple OSR Browser - Initializing browser. Please wait...'
ClientHeight = 510
ClientHeight = 530
ClientWidth = 800
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
@ -105,7 +105,7 @@ object Form1: TForm1
Left = 0
Top = 30
Width = 800
Height = 480
Height = 500
Align = alClient
Caption = 'Panel1'
TabOrder = 1

View File

@ -633,7 +633,7 @@ procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton; Shift: T
var
TempEvent : TCefMouseEvent;
begin
if (GlobalCEFApp <> nil) then
if (GlobalCEFApp <> nil) and (chrmosr <> nil) then
begin
Panel1.SetFocus;
@ -650,7 +650,7 @@ var
TempEvent : TCefMouseEvent;
TempPoint : TPoint;
begin
if (GlobalCEFApp <> nil) then
if (GlobalCEFApp <> nil) and (chrmosr <> nil) then
begin
GetCursorPos(TempPoint);
TempPoint := Panel1.ScreenToclient(TempPoint);
@ -666,7 +666,7 @@ procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Inte
var
TempEvent : TCefMouseEvent;
begin
if (GlobalCEFApp <> nil) then
if (GlobalCEFApp <> nil) and (chrmosr <> nil) then
begin
TempEvent.x := X;
TempEvent.y := Y;
@ -680,7 +680,7 @@ procedure TForm1.Panel1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TSh
var
TempEvent : TCefMouseEvent;
begin
if (GlobalCEFApp <> nil) then
if (GlobalCEFApp <> nil) and (chrmosr <> nil) then
begin
TempEvent.x := X;
TempEvent.y := Y;

View File

@ -0,0 +1,13 @@
del /s /q *.dcu
del /s /q *.exe
del /s /q *.log
del /s /q *.dsk
del /s /q *.identcache
del /s /q *.stat
del /s /q *.local
del /s /q *.~*
rmdir Win32\Debug
rmdir Win32\Release
rmdir Win32
rmdir __history
rmdir __recovery

170
packages/CEF4Delphi.dpk Normal file
View File

@ -0,0 +1,170 @@
package CEF4Delphi;
{$R *.res}
{$IFDEF IMPLICITBUILDING This IFDEF should not be used by users}
{$ALIGN 8}
{$ASSERTIONS ON}
{$BOOLEVAL OFF}
{$DEBUGINFO OFF}
{$EXTENDEDSYNTAX ON}
{$IMPORTEDDATA ON}
{$IOCHECKS ON}
{$LOCALSYMBOLS ON}
{$LONGSTRINGS ON}
{$OPENSTRINGS ON}
{$OPTIMIZATION OFF}
{$OVERFLOWCHECKS OFF}
{$RANGECHECKS OFF}
{$REFERENCEINFO ON}
{$SAFEDIVIDE OFF}
{$STACKFRAMES ON}
{$TYPEDADDRESS OFF}
{$VARSTRINGCHECKS ON}
{$WRITEABLECONST OFF}
{$MINENUMSIZE 1}
{$IMAGEBASE $400000}
{$DEFINE DEBUG}
{$ENDIF IMPLICITBUILDING}
{$DESCRIPTION 'CEF4Delphi'}
{$IMPLICITBUILD OFF}
requires
rtl,
vcl;
contains
CEF4Delphi_Register in 'CEF4Delphi_Register.pas',
uCEFFindHandler in '..\source\uCEFFindHandler.pas',
uCEFConstants in '..\source\uCEFConstants.pas',
uCEFTypes in '..\source\uCEFTypes.pas',
uCEFInterfaces in '..\source\uCEFInterfaces.pas',
uCEFMiscFunctions in '..\source\uCEFMiscFunctions.pas',
uCEFLibFunctions in '..\source\uCEFLibFunctions.pas',
uCEFApplication in '..\source\uCEFApplication.pas',
uCEFSchemeRegistrar in '..\source\uCEFSchemeRegistrar.pas',
uCEFCommandLine in '..\source\uCEFCommandLine.pas',
uCEFClient in '..\source\uCEFClient.pas',
uCEFProcessMessage in '..\source\uCEFProcessMessage.pas',
uCEFBrowser in '..\source\uCEFBrowser.pas',
uCEFListValue in '..\source\uCEFListValue.pas',
uCEFBinaryValue in '..\source\uCEFBinaryValue.pas',
uCEFValue in '..\source\uCEFValue.pas',
uCEFDictionaryValue in '..\source\uCEFDictionaryValue.pas',
uCEFDownloadImageCallBack in '..\source\uCEFDownloadImageCallBack.pas',
uCEFFrame in '..\source\uCEFFrame.pas',
uCEFPDFPrintCallback in '..\source\uCEFPDFPrintCallback.pas',
uCEFRunFileDialogCallback in '..\source\uCEFRunFileDialogCallback.pas',
uCEFRequestContext in '..\source\uCEFRequestContext.pas',
uCEFNavigationEntryVisitor in '..\source\uCEFNavigationEntryVisitor.pas',
uCEFStringVisitor in '..\source\uCEFStringVisitor.pas',
uCEFv8Context in '..\source\uCEFv8Context.pas',
uCEFDomVisitor in '..\source\uCEFDomVisitor.pas',
uCEFNavigationEntry in '..\source\uCEFNavigationEntry.pas',
uCEFCookieManager in '..\source\uCEFCookieManager.pas',
uCEFCompletionCallback in '..\source\uCEFCompletionCallback.pas',
uCEFRequestContextHandler in '..\source\uCEFRequestContextHandler.pas',
uCEFWebPluginInfo in '..\source\uCEFWebPluginInfo.pas',
uCEFDomDocument in '..\source\uCEFDomDocument.pas',
uCEFDomNode in '..\source\uCEFDomNode.pas',
uCEFv8Value in '..\source\uCEFv8Value.pas',
uCEFv8Accessor in '..\source\uCEFv8Accessor.pas',
uCEFLoadHandler in '..\source\uCEFLoadHandler.pas',
uCEFFocusHandler in '..\source\uCEFFocusHandler.pas',
uCEFContextMenuHandler in '..\source\uCEFContextMenuHandler.pas',
uCEFDialogHandler in '..\source\uCEFDialogHandler.pas',
uCEFKeyboardHandler in '..\source\uCEFKeyboardHandler.pas',
uCEFDisplayHandler in '..\source\uCEFDisplayHandler.pas',
uCEFDownloadHandler in '..\source\uCEFDownloadHandler.pas',
uCEFGeolocationHandler in '..\source\uCEFGeolocationHandler.pas',
uCEFJsDialogHandler in '..\source\uCEFJsDialogHandler.pas',
uCEFLifeSpanHandler in '..\source\uCEFLifeSpanHandler.pas',
uCEFRequestHandler in '..\source\uCEFRequestHandler.pas',
uCEFRenderHandler in '..\source\uCEFRenderHandler.pas',
uCEFDragHandler in '..\source\uCEFDragHandler.pas',
uCEFPostData in '..\source\uCEFPostData.pas',
uCEFPostDataElement in '..\source\uCEFPostDataElement.pas',
uCEFRequest in '..\source\uCEFRequest.pas',
uCEFStreamReader in '..\source\uCEFStreamReader.pas',
uCEFWriteHandler in '..\source\uCEFWriteHandler.pas',
uCEFStreamWriter in '..\source\uCEFStreamWriter.pas',
uCEFv8StackFrame in '..\source\uCEFv8StackFrame.pas',
uCEFv8StackTrace in '..\source\uCEFv8StackTrace.pas',
uCEFv8Handler in '..\source\uCEFv8Handler.pas',
uCEFRequestCallback in '..\source\uCEFRequestCallback.pas',
uCEFCustomStreamReader in '..\source\uCEFCustomStreamReader.pas',
uCEFCallback in '..\source\uCEFCallback.pas',
uCEFResourceHandler in '..\source\uCEFResourceHandler.pas',
uCEFSchemeHandlerFactory in '..\source\uCEFSchemeHandlerFactory.pas',
uCEFTask in '..\source\uCEFTask.pas',
uCEFTaskRunner in '..\source\uCEFTaskRunner.pas',
uCEFStringMap in '..\source\uCEFStringMap.pas',
uCEFStringMultimap in '..\source\uCEFStringMultimap.pas',
uCEFXmlReader in '..\source\uCEFXmlReader.pas',
uCEFZipReader in '..\source\uCEFZipReader.pas',
uCEFResponse in '..\source\uCEFResponse.pas',
uCEFCookieVisitor in '..\source\uCEFCookieVisitor.pas',
uCEFV8Exception in '..\source\uCEFV8Exception.pas',
uCEFResourceBundleHandler in '..\source\uCEFResourceBundleHandler.pas',
uCEFSetCookieCallback in '..\source\uCEFSetCookieCallback.pas',
uCEFDeleteCookiesCallback in '..\source\uCEFDeleteCookiesCallback.pas',
uCEFDownLoadItem in '..\source\uCEFDownLoadItem.pas',
uCEFBeforeDownloadCallback in '..\source\uCEFBeforeDownloadCallback.pas',
uCEFDownloadItemCallback in '..\source\uCEFDownloadItemCallback.pas',
uCEFAuthCallback in '..\source\uCEFAuthCallback.pas',
uCEFJsDialogCallback in '..\source\uCEFJsDialogCallback.pas',
uCEFGeolocationCallback in '..\source\uCEFGeolocationCallback.pas',
uCEFContextMenuParams in '..\source\uCEFContextMenuParams.pas',
uCEFMenuModel in '..\source\uCEFMenuModel.pas',
uCEFBrowserProcessHandler in '..\source\uCEFBrowserProcessHandler.pas',
uCEFRenderProcessHandler in '..\source\uCEFRenderProcessHandler.pas',
uCEFUrlrequestClient in '..\source\uCEFUrlrequestClient.pas',
uCEFUrlRequest in '..\source\uCEFUrlRequest.pas',
uCEFWebPluginInfoVisitor in '..\source\uCEFWebPluginInfoVisitor.pas',
uCEFWebPluginUnstableCallback in '..\source\uCEFWebPluginUnstableCallback.pas',
uCEFEndTracingCallback in '..\source\uCEFEndTracingCallback.pas',
uCEFGetGeolocationCallback in '..\source\uCEFGetGeolocationCallback.pas',
uCEFFileDialogCallback in '..\source\uCEFFileDialogCallback.pas',
uCEFDragData in '..\source\uCEFDragData.pas',
uCEFResolveCallback in '..\source\uCEFResolveCallback.pas',
uCEFPrintSettings in '..\source\uCEFPrintSettings.pas',
uCEFSslInfo in '..\source\uCEFSslInfo.pas',
uCEFRunContextMenuCallback in '..\source\uCEFRunContextMenuCallback.pas',
uCEFResourceBundle in '..\source\uCEFResourceBundle.pas',
uCEFResponseFilter in '..\source\uCEFResponseFilter.pas',
uCEFImage in '..\source\uCEFImage.pas',
uCEFMenuModelDelegate in '..\source\uCEFMenuModelDelegate.pas',
uCEFv8Types in '..\source\uCEFv8Types.pas',
uCEFWindowParent in '..\source\uCEFWindowParent.pas',
uCEFChromium in '..\source\uCEFChromium.pas',
uCEFChromiumEvents in '..\source\uCEFChromiumEvents.pas',
uCEFChromiumOptions in '..\source\uCEFChromiumOptions.pas',
uCEFChromiumFontOptions in '..\source\uCEFChromiumFontOptions.pas',
uCEFPDFPrintOptions in '..\source\uCEFPDFPrintOptions.pas',
uCEFRegisterCDMCallback in '..\source\uCEFRegisterCDMCallback.pas',
uCEFThread in '..\source\uCEFThread.pas',
uCEFv8Interceptor in '..\source\uCEFv8Interceptor.pas',
uCEFWaitableEvent in '..\source\uCEFWaitableEvent.pas',
uCEFX509CertPrincipal in '..\source\uCEFX509CertPrincipal.pas',
uCEFX509Certificate in '..\source\uCEFX509Certificate.pas',
uCEFSSLStatus in '..\source\uCEFSSLStatus.pas',
uCEFSelectClientCertificateCallback in '..\source\uCEFSelectClientCertificateCallback.pas',
uCEFChromiumWindow in '..\source\uCEFChromiumWindow.pas',
uCEFBaseRefCounted in '..\source\uCEFBaseRefCounted.pas',
uCEFBaseScopedWrapper in '..\source\uCEFBaseScopedWrapper.pas',
uCEFAccessibilityHandler in '..\source\uCEFAccessibilityHandler.pas',
uOLEDragAndDrop in '..\source\uOLEDragAndDrop.pas',
uCEFDragAndDropMgr in '..\source\uCEFDragAndDropMgr.pas',
uCEFGetExtensionResourceCallback in '..\source\uCEFGetExtensionResourceCallback.pas',
uCEFExtension in '..\source\uCEFExtension.pas',
uCEFExtensionHandler in '..\source\uCEFExtensionHandler.pas',
uBufferPanel in '..\source\uBufferPanel.pas',
uCEFApp in '..\source\uCEFApp.pas',
uCEFWorkScheduler in '..\source\uCEFWorkScheduler.pas',
uCEFWorkSchedulerThread in '..\source\uCEFWorkSchedulerThread.pas',
uCEFServer in '..\source\uCEFServer.pas',
uCEFServerHandler in '..\source\uCEFServerHandler.pas',
uCEFServerEvents in '..\source\uCEFServerEvents.pas',
uCEFServerComponent in '..\source\uCEFServerComponent.pas';
end.

View File

@ -72,14 +72,14 @@
<DCC_K>false</DCC_K>
</PropertyGroup>
<PropertyGroup Condition="'$(Base_Win32)'!=''">
<DCC_UsePackage>rtl;vcl;$(DCC_UsePackage)</DCC_UsePackage>
<DCC_UsePackage>rtl;vcl;fmx;$(DCC_UsePackage)</DCC_UsePackage>
<VerInfo_Locale>1033</VerInfo_Locale>
<DCC_Namespace>Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)</DCC_Namespace>
<VerInfo_Keys>CompanyName=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName);FileDescription=$(MSBuildProjectName);ProductName=$(MSBuildProjectName)</VerInfo_Keys>
<VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
</PropertyGroup>
<PropertyGroup Condition="'$(Base_Win64)'!=''">
<DCC_UsePackage>rtl;vcl;$(DCC_UsePackage)</DCC_UsePackage>
<DCC_UsePackage>rtl;vcl;fmx;$(DCC_UsePackage)</DCC_UsePackage>
<DCC_Namespace>Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace)</DCC_Namespace>
<BT_BuildType>Debug</BT_BuildType>
<VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
@ -124,137 +124,138 @@
</DelphiCompile>
<DCCReference Include="rtl.dcp"/>
<DCCReference Include="vcl.dcp"/>
<DCCReference Include="uCEFRegisterComponents.pas"/>
<DCCReference Include="uCEFFindHandler.pas"/>
<DCCReference Include="uCEFConstants.pas"/>
<DCCReference Include="uCEFTypes.pas"/>
<DCCReference Include="uCEFInterfaces.pas"/>
<DCCReference Include="uCEFMiscFunctions.pas"/>
<DCCReference Include="uCEFLibFunctions.pas"/>
<DCCReference Include="uCEFApplication.pas"/>
<DCCReference Include="uCEFSchemeRegistrar.pas"/>
<DCCReference Include="uCEFCommandLine.pas"/>
<DCCReference Include="uCEFClient.pas"/>
<DCCReference Include="uCEFProcessMessage.pas"/>
<DCCReference Include="uCEFBrowser.pas"/>
<DCCReference Include="uCEFListValue.pas"/>
<DCCReference Include="uCEFBinaryValue.pas"/>
<DCCReference Include="uCEFValue.pas"/>
<DCCReference Include="uCEFDictionaryValue.pas"/>
<DCCReference Include="uCEFDownloadImageCallBack.pas"/>
<DCCReference Include="uCEFFrame.pas"/>
<DCCReference Include="uCEFPDFPrintCallback.pas"/>
<DCCReference Include="uCEFRunFileDialogCallback.pas"/>
<DCCReference Include="uCEFRequestContext.pas"/>
<DCCReference Include="uCEFNavigationEntryVisitor.pas"/>
<DCCReference Include="uCEFStringVisitor.pas"/>
<DCCReference Include="uCEFv8Context.pas"/>
<DCCReference Include="uCEFDomVisitor.pas"/>
<DCCReference Include="uCEFNavigationEntry.pas"/>
<DCCReference Include="uCEFCookieManager.pas"/>
<DCCReference Include="uCEFCompletionCallback.pas"/>
<DCCReference Include="uCEFRequestContextHandler.pas"/>
<DCCReference Include="uCEFWebPluginInfo.pas"/>
<DCCReference Include="uCEFDomDocument.pas"/>
<DCCReference Include="uCEFDomNode.pas"/>
<DCCReference Include="uCEFv8Value.pas"/>
<DCCReference Include="uCEFv8Accessor.pas"/>
<DCCReference Include="uCEFLoadHandler.pas"/>
<DCCReference Include="uCEFFocusHandler.pas"/>
<DCCReference Include="uCEFContextMenuHandler.pas"/>
<DCCReference Include="uCEFDialogHandler.pas"/>
<DCCReference Include="uCEFKeyboardHandler.pas"/>
<DCCReference Include="uCEFDisplayHandler.pas"/>
<DCCReference Include="uCEFDownloadHandler.pas"/>
<DCCReference Include="uCEFGeolocationHandler.pas"/>
<DCCReference Include="uCEFJsDialogHandler.pas"/>
<DCCReference Include="uCEFLifeSpanHandler.pas"/>
<DCCReference Include="uCEFRequestHandler.pas"/>
<DCCReference Include="uCEFRenderHandler.pas"/>
<DCCReference Include="uCEFDragHandler.pas"/>
<DCCReference Include="uCEFPostData.pas"/>
<DCCReference Include="uCEFPostDataElement.pas"/>
<DCCReference Include="uCEFRequest.pas"/>
<DCCReference Include="uCEFStreamReader.pas"/>
<DCCReference Include="uCEFWriteHandler.pas"/>
<DCCReference Include="uCEFStreamWriter.pas"/>
<DCCReference Include="uCEFv8StackFrame.pas"/>
<DCCReference Include="uCEFv8StackTrace.pas"/>
<DCCReference Include="uCEFv8Handler.pas"/>
<DCCReference Include="uCEFRequestCallback.pas"/>
<DCCReference Include="uCEFCustomStreamReader.pas"/>
<DCCReference Include="uCEFCallback.pas"/>
<DCCReference Include="uCEFResourceHandler.pas"/>
<DCCReference Include="uCEFSchemeHandlerFactory.pas"/>
<DCCReference Include="uCEFTask.pas"/>
<DCCReference Include="uCEFTaskRunner.pas"/>
<DCCReference Include="uCEFStringMap.pas"/>
<DCCReference Include="uCEFStringMultimap.pas"/>
<DCCReference Include="uCEFXmlReader.pas"/>
<DCCReference Include="uCEFZipReader.pas"/>
<DCCReference Include="uCEFResponse.pas"/>
<DCCReference Include="uCEFCookieVisitor.pas"/>
<DCCReference Include="uCEFV8Exception.pas"/>
<DCCReference Include="uCEFResourceBundleHandler.pas"/>
<DCCReference Include="uCEFSetCookieCallback.pas"/>
<DCCReference Include="uCEFDeleteCookiesCallback.pas"/>
<DCCReference Include="uCEFDownLoadItem.pas"/>
<DCCReference Include="uCEFBeforeDownloadCallback.pas"/>
<DCCReference Include="uCEFDownloadItemCallback.pas"/>
<DCCReference Include="uCEFAuthCallback.pas"/>
<DCCReference Include="uCEFJsDialogCallback.pas"/>
<DCCReference Include="uCEFGeolocationCallback.pas"/>
<DCCReference Include="uCEFContextMenuParams.pas"/>
<DCCReference Include="uCEFMenuModel.pas"/>
<DCCReference Include="uCEFBrowserProcessHandler.pas"/>
<DCCReference Include="uCEFRenderProcessHandler.pas"/>
<DCCReference Include="uCEFUrlrequestClient.pas"/>
<DCCReference Include="uCEFUrlRequest.pas"/>
<DCCReference Include="uCEFWebPluginInfoVisitor.pas"/>
<DCCReference Include="uCEFWebPluginUnstableCallback.pas"/>
<DCCReference Include="uCEFEndTracingCallback.pas"/>
<DCCReference Include="uCEFGetGeolocationCallback.pas"/>
<DCCReference Include="uCEFFileDialogCallback.pas"/>
<DCCReference Include="uCEFDragData.pas"/>
<DCCReference Include="uCEFResolveCallback.pas"/>
<DCCReference Include="uCEFPrintSettings.pas"/>
<DCCReference Include="uCEFSslInfo.pas"/>
<DCCReference Include="uCEFRunContextMenuCallback.pas"/>
<DCCReference Include="uCEFResourceBundle.pas"/>
<DCCReference Include="uCEFResponseFilter.pas"/>
<DCCReference Include="uCEFImage.pas"/>
<DCCReference Include="uCEFMenuModelDelegate.pas"/>
<DCCReference Include="uCEFv8Types.pas"/>
<DCCReference Include="uCEFWindowParent.pas"/>
<DCCReference Include="uCEFChromium.pas"/>
<DCCReference Include="uCEFChromiumEvents.pas"/>
<DCCReference Include="uCEFChromiumOptions.pas"/>
<DCCReference Include="uCEFChromiumFontOptions.pas"/>
<DCCReference Include="uCEFPDFPrintOptions.pas"/>
<DCCReference Include="uCEFRegisterCDMCallback.pas"/>
<DCCReference Include="uCEFThread.pas"/>
<DCCReference Include="uCEFv8Interceptor.pas"/>
<DCCReference Include="uCEFWaitableEvent.pas"/>
<DCCReference Include="uCEFX509CertPrincipal.pas"/>
<DCCReference Include="uCEFX509Certificate.pas"/>
<DCCReference Include="uCEFSSLStatus.pas"/>
<DCCReference Include="uCEFSelectClientCertificateCallback.pas"/>
<DCCReference Include="uCEFChromiumWindow.pas"/>
<DCCReference Include="uCEFBaseRefCounted.pas"/>
<DCCReference Include="uCEFBaseScopedWrapper.pas"/>
<DCCReference Include="uCEFAccessibilityHandler.pas"/>
<DCCReference Include="uOLEDragAndDrop.pas"/>
<DCCReference Include="uCEFDragAndDropMgr.pas"/>
<DCCReference Include="uCEFGetExtensionResourceCallback.pas"/>
<DCCReference Include="uCEFExtension.pas"/>
<DCCReference Include="uCEFExtensionHandler.pas"/>
<DCCReference Include="uBufferPanel.pas"/>
<DCCReference Include="uCEFApp.pas"/>
<DCCReference Include="uCEFWorkScheduler.pas"/>
<DCCReference Include="uCEFServer.pas"/>
<DCCReference Include="uCEFServerHandler.pas"/>
<DCCReference Include="uCEFServerEvents.pas"/>
<DCCReference Include="uCEFServerComponent.pas"/>
<DCCReference Include="CEF4Delphi_Register.pas"/>
<DCCReference Include="..\source\uCEFFindHandler.pas"/>
<DCCReference Include="..\source\uCEFConstants.pas"/>
<DCCReference Include="..\source\uCEFTypes.pas"/>
<DCCReference Include="..\source\uCEFInterfaces.pas"/>
<DCCReference Include="..\source\uCEFMiscFunctions.pas"/>
<DCCReference Include="..\source\uCEFLibFunctions.pas"/>
<DCCReference Include="..\source\uCEFApplication.pas"/>
<DCCReference Include="..\source\uCEFSchemeRegistrar.pas"/>
<DCCReference Include="..\source\uCEFCommandLine.pas"/>
<DCCReference Include="..\source\uCEFClient.pas"/>
<DCCReference Include="..\source\uCEFProcessMessage.pas"/>
<DCCReference Include="..\source\uCEFBrowser.pas"/>
<DCCReference Include="..\source\uCEFListValue.pas"/>
<DCCReference Include="..\source\uCEFBinaryValue.pas"/>
<DCCReference Include="..\source\uCEFValue.pas"/>
<DCCReference Include="..\source\uCEFDictionaryValue.pas"/>
<DCCReference Include="..\source\uCEFDownloadImageCallBack.pas"/>
<DCCReference Include="..\source\uCEFFrame.pas"/>
<DCCReference Include="..\source\uCEFPDFPrintCallback.pas"/>
<DCCReference Include="..\source\uCEFRunFileDialogCallback.pas"/>
<DCCReference Include="..\source\uCEFRequestContext.pas"/>
<DCCReference Include="..\source\uCEFNavigationEntryVisitor.pas"/>
<DCCReference Include="..\source\uCEFStringVisitor.pas"/>
<DCCReference Include="..\source\uCEFv8Context.pas"/>
<DCCReference Include="..\source\uCEFDomVisitor.pas"/>
<DCCReference Include="..\source\uCEFNavigationEntry.pas"/>
<DCCReference Include="..\source\uCEFCookieManager.pas"/>
<DCCReference Include="..\source\uCEFCompletionCallback.pas"/>
<DCCReference Include="..\source\uCEFRequestContextHandler.pas"/>
<DCCReference Include="..\source\uCEFWebPluginInfo.pas"/>
<DCCReference Include="..\source\uCEFDomDocument.pas"/>
<DCCReference Include="..\source\uCEFDomNode.pas"/>
<DCCReference Include="..\source\uCEFv8Value.pas"/>
<DCCReference Include="..\source\uCEFv8Accessor.pas"/>
<DCCReference Include="..\source\uCEFLoadHandler.pas"/>
<DCCReference Include="..\source\uCEFFocusHandler.pas"/>
<DCCReference Include="..\source\uCEFContextMenuHandler.pas"/>
<DCCReference Include="..\source\uCEFDialogHandler.pas"/>
<DCCReference Include="..\source\uCEFKeyboardHandler.pas"/>
<DCCReference Include="..\source\uCEFDisplayHandler.pas"/>
<DCCReference Include="..\source\uCEFDownloadHandler.pas"/>
<DCCReference Include="..\source\uCEFGeolocationHandler.pas"/>
<DCCReference Include="..\source\uCEFJsDialogHandler.pas"/>
<DCCReference Include="..\source\uCEFLifeSpanHandler.pas"/>
<DCCReference Include="..\source\uCEFRequestHandler.pas"/>
<DCCReference Include="..\source\uCEFRenderHandler.pas"/>
<DCCReference Include="..\source\uCEFDragHandler.pas"/>
<DCCReference Include="..\source\uCEFPostData.pas"/>
<DCCReference Include="..\source\uCEFPostDataElement.pas"/>
<DCCReference Include="..\source\uCEFRequest.pas"/>
<DCCReference Include="..\source\uCEFStreamReader.pas"/>
<DCCReference Include="..\source\uCEFWriteHandler.pas"/>
<DCCReference Include="..\source\uCEFStreamWriter.pas"/>
<DCCReference Include="..\source\uCEFv8StackFrame.pas"/>
<DCCReference Include="..\source\uCEFv8StackTrace.pas"/>
<DCCReference Include="..\source\uCEFv8Handler.pas"/>
<DCCReference Include="..\source\uCEFRequestCallback.pas"/>
<DCCReference Include="..\source\uCEFCustomStreamReader.pas"/>
<DCCReference Include="..\source\uCEFCallback.pas"/>
<DCCReference Include="..\source\uCEFResourceHandler.pas"/>
<DCCReference Include="..\source\uCEFSchemeHandlerFactory.pas"/>
<DCCReference Include="..\source\uCEFTask.pas"/>
<DCCReference Include="..\source\uCEFTaskRunner.pas"/>
<DCCReference Include="..\source\uCEFStringMap.pas"/>
<DCCReference Include="..\source\uCEFStringMultimap.pas"/>
<DCCReference Include="..\source\uCEFXmlReader.pas"/>
<DCCReference Include="..\source\uCEFZipReader.pas"/>
<DCCReference Include="..\source\uCEFResponse.pas"/>
<DCCReference Include="..\source\uCEFCookieVisitor.pas"/>
<DCCReference Include="..\source\uCEFV8Exception.pas"/>
<DCCReference Include="..\source\uCEFResourceBundleHandler.pas"/>
<DCCReference Include="..\source\uCEFSetCookieCallback.pas"/>
<DCCReference Include="..\source\uCEFDeleteCookiesCallback.pas"/>
<DCCReference Include="..\source\uCEFDownLoadItem.pas"/>
<DCCReference Include="..\source\uCEFBeforeDownloadCallback.pas"/>
<DCCReference Include="..\source\uCEFDownloadItemCallback.pas"/>
<DCCReference Include="..\source\uCEFAuthCallback.pas"/>
<DCCReference Include="..\source\uCEFJsDialogCallback.pas"/>
<DCCReference Include="..\source\uCEFGeolocationCallback.pas"/>
<DCCReference Include="..\source\uCEFContextMenuParams.pas"/>
<DCCReference Include="..\source\uCEFMenuModel.pas"/>
<DCCReference Include="..\source\uCEFBrowserProcessHandler.pas"/>
<DCCReference Include="..\source\uCEFRenderProcessHandler.pas"/>
<DCCReference Include="..\source\uCEFUrlrequestClient.pas"/>
<DCCReference Include="..\source\uCEFUrlRequest.pas"/>
<DCCReference Include="..\source\uCEFWebPluginInfoVisitor.pas"/>
<DCCReference Include="..\source\uCEFWebPluginUnstableCallback.pas"/>
<DCCReference Include="..\source\uCEFEndTracingCallback.pas"/>
<DCCReference Include="..\source\uCEFGetGeolocationCallback.pas"/>
<DCCReference Include="..\source\uCEFFileDialogCallback.pas"/>
<DCCReference Include="..\source\uCEFDragData.pas"/>
<DCCReference Include="..\source\uCEFResolveCallback.pas"/>
<DCCReference Include="..\source\uCEFPrintSettings.pas"/>
<DCCReference Include="..\source\uCEFSslInfo.pas"/>
<DCCReference Include="..\source\uCEFRunContextMenuCallback.pas"/>
<DCCReference Include="..\source\uCEFResourceBundle.pas"/>
<DCCReference Include="..\source\uCEFResponseFilter.pas"/>
<DCCReference Include="..\source\uCEFImage.pas"/>
<DCCReference Include="..\source\uCEFMenuModelDelegate.pas"/>
<DCCReference Include="..\source\uCEFv8Types.pas"/>
<DCCReference Include="..\source\uCEFWindowParent.pas"/>
<DCCReference Include="..\source\uCEFChromium.pas"/>
<DCCReference Include="..\source\uCEFChromiumEvents.pas"/>
<DCCReference Include="..\source\uCEFChromiumOptions.pas"/>
<DCCReference Include="..\source\uCEFChromiumFontOptions.pas"/>
<DCCReference Include="..\source\uCEFPDFPrintOptions.pas"/>
<DCCReference Include="..\source\uCEFRegisterCDMCallback.pas"/>
<DCCReference Include="..\source\uCEFThread.pas"/>
<DCCReference Include="..\source\uCEFv8Interceptor.pas"/>
<DCCReference Include="..\source\uCEFWaitableEvent.pas"/>
<DCCReference Include="..\source\uCEFX509CertPrincipal.pas"/>
<DCCReference Include="..\source\uCEFX509Certificate.pas"/>
<DCCReference Include="..\source\uCEFSSLStatus.pas"/>
<DCCReference Include="..\source\uCEFSelectClientCertificateCallback.pas"/>
<DCCReference Include="..\source\uCEFChromiumWindow.pas"/>
<DCCReference Include="..\source\uCEFBaseRefCounted.pas"/>
<DCCReference Include="..\source\uCEFBaseScopedWrapper.pas"/>
<DCCReference Include="..\source\uCEFAccessibilityHandler.pas"/>
<DCCReference Include="..\source\uOLEDragAndDrop.pas"/>
<DCCReference Include="..\source\uCEFDragAndDropMgr.pas"/>
<DCCReference Include="..\source\uCEFGetExtensionResourceCallback.pas"/>
<DCCReference Include="..\source\uCEFExtension.pas"/>
<DCCReference Include="..\source\uCEFExtensionHandler.pas"/>
<DCCReference Include="..\source\uBufferPanel.pas"/>
<DCCReference Include="..\source\uCEFApp.pas"/>
<DCCReference Include="..\source\uCEFWorkScheduler.pas"/>
<DCCReference Include="..\source\uCEFWorkSchedulerThread.pas"/>
<DCCReference Include="..\source\uCEFServer.pas"/>
<DCCReference Include="..\source\uCEFServerHandler.pas"/>
<DCCReference Include="..\source\uCEFServerEvents.pas"/>
<DCCReference Include="..\source\uCEFServerComponent.pas"/>
<BuildConfiguration Include="Base">
<Key>Base</Key>
</BuildConfiguration>

166
packages/CEF4Delphi_D7.dpk Normal file
View File

@ -0,0 +1,166 @@
package CEF4Delphi_D7;
{$R *.res}
{$ALIGN 8}
{$ASSERTIONS ON}
{$BOOLEVAL OFF}
{$DEBUGINFO OFF}
{$EXTENDEDSYNTAX ON}
{$IMPORTEDDATA ON}
{$IOCHECKS ON}
{$LOCALSYMBOLS ON}
{$LONGSTRINGS ON}
{$OPENSTRINGS ON}
{$OPTIMIZATION OFF}
{$OVERFLOWCHECKS OFF}
{$RANGECHECKS OFF}
{$REFERENCEINFO ON}
{$SAFEDIVIDE OFF}
{$STACKFRAMES ON}
{$TYPEDADDRESS OFF}
{$VARSTRINGCHECKS ON}
{$WRITEABLECONST OFF}
{$MINENUMSIZE 1}
{$IMAGEBASE $400000}
{$DESCRIPTION 'CEF4Delphi'}
{$IMPLICITBUILD OFF}
{$DEFINE DEBUG}
requires
rtl,
vcl;
contains
CEF4Delphi_D7_Register in 'CEF4Delphi_D7_Register.pas',
uCEFFindHandler in '..\source\uCEFFindHandler.pas',
uCEFConstants in '..\source\uCEFConstants.pas',
uCEFTypes in '..\source\uCEFTypes.pas',
uCEFInterfaces in '..\source\uCEFInterfaces.pas',
uCEFMiscFunctions in '..\source\uCEFMiscFunctions.pas',
uCEFLibFunctions in '..\source\uCEFLibFunctions.pas',
uCEFApplication in '..\source\uCEFApplication.pas',
uCEFSchemeRegistrar in '..\source\uCEFSchemeRegistrar.pas',
uCEFCommandLine in '..\source\uCEFCommandLine.pas',
uCEFClient in '..\source\uCEFClient.pas',
uCEFProcessMessage in '..\source\uCEFProcessMessage.pas',
uCEFBrowser in '..\source\uCEFBrowser.pas',
uCEFListValue in '..\source\uCEFListValue.pas',
uCEFBinaryValue in '..\source\uCEFBinaryValue.pas',
uCEFValue in '..\source\uCEFValue.pas',
uCEFDictionaryValue in '..\source\uCEFDictionaryValue.pas',
uCEFDownloadImageCallBack in '..\source\uCEFDownloadImageCallBack.pas',
uCEFFrame in '..\source\uCEFFrame.pas',
uCEFPDFPrintCallback in '..\source\uCEFPDFPrintCallback.pas',
uCEFRunFileDialogCallback in '..\source\uCEFRunFileDialogCallback.pas',
uCEFRequestContext in '..\source\uCEFRequestContext.pas',
uCEFNavigationEntryVisitor in '..\source\uCEFNavigationEntryVisitor.pas',
uCEFStringVisitor in '..\source\uCEFStringVisitor.pas',
uCEFv8Context in '..\source\uCEFv8Context.pas',
uCEFDomVisitor in '..\source\uCEFDomVisitor.pas',
uCEFNavigationEntry in '..\source\uCEFNavigationEntry.pas',
uCEFCookieManager in '..\source\uCEFCookieManager.pas',
uCEFCompletionCallback in '..\source\uCEFCompletionCallback.pas',
uCEFRequestContextHandler in '..\source\uCEFRequestContextHandler.pas',
uCEFWebPluginInfo in '..\source\uCEFWebPluginInfo.pas',
uCEFDomDocument in '..\source\uCEFDomDocument.pas',
uCEFDomNode in '..\source\uCEFDomNode.pas',
uCEFv8Value in '..\source\uCEFv8Value.pas',
uCEFv8Accessor in '..\source\uCEFv8Accessor.pas',
uCEFLoadHandler in '..\source\uCEFLoadHandler.pas',
uCEFFocusHandler in '..\source\uCEFFocusHandler.pas',
uCEFContextMenuHandler in '..\source\uCEFContextMenuHandler.pas',
uCEFDialogHandler in '..\source\uCEFDialogHandler.pas',
uCEFKeyboardHandler in '..\source\uCEFKeyboardHandler.pas',
uCEFDisplayHandler in '..\source\uCEFDisplayHandler.pas',
uCEFDownloadHandler in '..\source\uCEFDownloadHandler.pas',
uCEFGeolocationHandler in '..\source\uCEFGeolocationHandler.pas',
uCEFJsDialogHandler in '..\source\uCEFJsDialogHandler.pas',
uCEFLifeSpanHandler in '..\source\uCEFLifeSpanHandler.pas',
uCEFRequestHandler in '..\source\uCEFRequestHandler.pas',
uCEFRenderHandler in '..\source\uCEFRenderHandler.pas',
uCEFDragHandler in '..\source\uCEFDragHandler.pas',
uCEFPostData in '..\source\uCEFPostData.pas',
uCEFPostDataElement in '..\source\uCEFPostDataElement.pas',
uCEFRequest in '..\source\uCEFRequest.pas',
uCEFStreamReader in '..\source\uCEFStreamReader.pas',
uCEFWriteHandler in '..\source\uCEFWriteHandler.pas',
uCEFStreamWriter in '..\source\uCEFStreamWriter.pas',
uCEFv8StackFrame in '..\source\uCEFv8StackFrame.pas',
uCEFv8StackTrace in '..\source\uCEFv8StackTrace.pas',
uCEFv8Handler in '..\source\uCEFv8Handler.pas',
uCEFRequestCallback in '..\source\uCEFRequestCallback.pas',
uCEFCustomStreamReader in '..\source\uCEFCustomStreamReader.pas',
uCEFCallback in '..\source\uCEFCallback.pas',
uCEFResourceHandler in '..\source\uCEFResourceHandler.pas',
uCEFSchemeHandlerFactory in '..\source\uCEFSchemeHandlerFactory.pas',
uCEFTask in '..\source\uCEFTask.pas',
uCEFTaskRunner in '..\source\uCEFTaskRunner.pas',
uCEFStringMap in '..\source\uCEFStringMap.pas',
uCEFStringMultimap in '..\source\uCEFStringMultimap.pas',
uCEFXmlReader in '..\source\uCEFXmlReader.pas',
uCEFZipReader in '..\source\uCEFZipReader.pas',
uCEFResponse in '..\source\uCEFResponse.pas',
uCEFCookieVisitor in '..\source\uCEFCookieVisitor.pas',
uCEFV8Exception in '..\source\uCEFV8Exception.pas',
uCEFResourceBundleHandler in '..\source\uCEFResourceBundleHandler.pas',
uCEFSetCookieCallback in '..\source\uCEFSetCookieCallback.pas',
uCEFDeleteCookiesCallback in '..\source\uCEFDeleteCookiesCallback.pas',
uCEFDownLoadItem in '..\source\uCEFDownLoadItem.pas',
uCEFBeforeDownloadCallback in '..\source\uCEFBeforeDownloadCallback.pas',
uCEFDownloadItemCallback in '..\source\uCEFDownloadItemCallback.pas',
uCEFAuthCallback in '..\source\uCEFAuthCallback.pas',
uCEFJsDialogCallback in '..\source\uCEFJsDialogCallback.pas',
uCEFGeolocationCallback in '..\source\uCEFGeolocationCallback.pas',
uCEFContextMenuParams in '..\source\uCEFContextMenuParams.pas',
uCEFMenuModel in '..\source\uCEFMenuModel.pas',
uCEFBrowserProcessHandler in '..\source\uCEFBrowserProcessHandler.pas',
uCEFRenderProcessHandler in '..\source\uCEFRenderProcessHandler.pas',
uCEFUrlrequestClient in '..\source\uCEFUrlrequestClient.pas',
uCEFUrlRequest in '..\source\uCEFUrlRequest.pas',
uCEFWebPluginInfoVisitor in '..\source\uCEFWebPluginInfoVisitor.pas',
uCEFWebPluginUnstableCallback in '..\source\uCEFWebPluginUnstableCallback.pas',
uCEFEndTracingCallback in '..\source\uCEFEndTracingCallback.pas',
uCEFGetGeolocationCallback in '..\source\uCEFGetGeolocationCallback.pas',
uCEFFileDialogCallback in '..\source\uCEFFileDialogCallback.pas',
uCEFDragData in '..\source\uCEFDragData.pas',
uCEFResolveCallback in '..\source\uCEFResolveCallback.pas',
uCEFPrintSettings in '..\source\uCEFPrintSettings.pas',
uCEFSslInfo in '..\source\uCEFSslInfo.pas',
uCEFRunContextMenuCallback in '..\source\uCEFRunContextMenuCallback.pas',
uCEFResourceBundle in '..\source\uCEFResourceBundle.pas',
uCEFResponseFilter in '..\source\uCEFResponseFilter.pas',
uCEFImage in '..\source\uCEFImage.pas',
uCEFMenuModelDelegate in '..\source\uCEFMenuModelDelegate.pas',
uCEFv8Types in '..\source\uCEFv8Types.pas',
uCEFWindowParent in '..\source\uCEFWindowParent.pas',
uCEFChromium in '..\source\uCEFChromium.pas',
uCEFChromiumEvents in '..\source\uCEFChromiumEvents.pas',
uCEFChromiumOptions in '..\source\uCEFChromiumOptions.pas',
uCEFChromiumFontOptions in '..\source\uCEFChromiumFontOptions.pas',
uCEFPDFPrintOptions in '..\source\uCEFPDFPrintOptions.pas',
uCEFRegisterCDMCallback in '..\source\uCEFRegisterCDMCallback.pas',
uCEFThread in '..\source\uCEFThread.pas',
uCEFv8Interceptor in '..\source\uCEFv8Interceptor.pas',
uCEFWaitableEvent in '..\source\uCEFWaitableEvent.pas',
uCEFX509CertPrincipal in '..\source\uCEFX509CertPrincipal.pas',
uCEFX509Certificate in '..\source\uCEFX509Certificate.pas',
uCEFSSLStatus in '..\source\uCEFSSLStatus.pas',
uCEFSelectClientCertificateCallback in '..\source\uCEFSelectClientCertificateCallback.pas',
uCEFChromiumWindow in '..\source\uCEFChromiumWindow.pas',
uCEFBaseRefCounted in '..\source\uCEFBaseRefCounted.pas',
uCEFBaseScopedWrapper in '..\source\uCEFBaseScopedWrapper.pas',
uCEFDragAndDropMgr in '..\source\uCEFDragAndDropMgr.pas',
uOLEDragAndDrop in '..\source\uOLEDragAndDrop.pas',
uCEFGetExtensionResourceCallback in '..\source\uCEFGetExtensionResourceCallback.pas',
uCEFExtension in '..\source\uCEFExtension.pas',
uCEFExtensionHandler in '..\source\uCEFExtensionHandler.pas',
uBufferPanel in '..\source\uBufferPanel.pas',
uCEFApp in '..\source\uCEFApp.pas',
uCEFWorkScheduler in '..\source\uCEFWorkScheduler.pas',
uCEFWorkSchedulerThread in '..\source\uCEFWorkSchedulerThread.pas',
uCEFServer in '..\source\uCEFServer.pas',
uCEFServerHandler in '..\source\uCEFServerHandler.pas',
uCEFServerEvents in '..\source\uCEFServerEvents.pas',
uCEFServerComponent in '..\source\uCEFServerComponent.pas';
end.

View File

@ -0,0 +1,60 @@
// ************************************************************************
// ***************************** CEF4Delphi *******************************
// ************************************************************************
//
// CEF4Delphi is based on DCEF3 which uses CEF3 to embed a chromium-based
// browser in Delphi applications.
//
// The original license of DCEF3 still applies to CEF4Delphi.
//
// 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.
//
// ************************************************************************
// ************ vvvv Original license and comments below vvvv *************
// ************************************************************************
(*
* Delphi Chromium Embedded 3
*
* Usage allowed under the restrictions of the Lesser GNU General Public License
* or alternatively the restrictions of the Mozilla Public License 1.1
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
* the specific language governing rights and limitations under the License.
*
* Unit owner : Henri Gourvest <hgourvest@gmail.com>
* Web site : http://www.progdigy.com
* Repository : http://code.google.com/p/delphichromiumembedded/
* Group : http://groups.google.com/group/delphichromiumembedded
*
* Embarcadero Technologies, Inc is not permitted to use or redistribute
* this source code without explicit permission.
*
*)
unit CEF4Delphi_D7_Register;
{$R chromium.dcr}
{$I cef.inc}
interface
procedure Register;
implementation
uses
Classes,
uCEFChromium, uCEFWindowParent, uCEFChromiumWindow, uBufferPanel, uCEFWorkScheduler, uCEFServerComponent;
procedure Register;
begin
RegisterComponents('Chromium', [TChromium, TCEFWindowParent, TChromiumWindow, TBufferPanel,
TCEFWorkScheduler, TCEFServerComponent]);
end;
end.

174
packages/CEF4Delphi_FMX.dpk Normal file
View File

@ -0,0 +1,174 @@
package CEF4Delphi_FMX;
{$R *.res}
{$IFDEF IMPLICITBUILDING This IFDEF should not be used by users}
{$ALIGN 8}
{$ASSERTIONS ON}
{$BOOLEVAL OFF}
{$DEBUGINFO OFF}
{$EXTENDEDSYNTAX ON}
{$IMPORTEDDATA ON}
{$IOCHECKS ON}
{$LOCALSYMBOLS ON}
{$LONGSTRINGS ON}
{$OPENSTRINGS ON}
{$OPTIMIZATION OFF}
{$OVERFLOWCHECKS OFF}
{$RANGECHECKS OFF}
{$REFERENCEINFO ON}
{$SAFEDIVIDE OFF}
{$STACKFRAMES ON}
{$TYPEDADDRESS OFF}
{$VARSTRINGCHECKS ON}
{$WRITEABLECONST OFF}
{$MINENUMSIZE 1}
{$IMAGEBASE $400000}
{$DEFINE DEBUG}
{$ENDIF IMPLICITBUILDING}
{$DESCRIPTION 'CEF4Delphi'}
{$IMPLICITBUILD OFF}
requires
rtl,
vcl,
fmx;
contains
CEF4Delphi_FMX_Register in 'CEF4Delphi_FMX_Register.pas',
uCEFFindHandler in '..\source\uCEFFindHandler.pas',
uCEFConstants in '..\source\uCEFConstants.pas',
uCEFTypes in '..\source\uCEFTypes.pas',
uCEFInterfaces in '..\source\uCEFInterfaces.pas',
uCEFMiscFunctions in '..\source\uCEFMiscFunctions.pas',
uCEFLibFunctions in '..\source\uCEFLibFunctions.pas',
uCEFApplication in '..\source\uCEFApplication.pas',
uCEFSchemeRegistrar in '..\source\uCEFSchemeRegistrar.pas',
uCEFCommandLine in '..\source\uCEFCommandLine.pas',
uCEFClient in '..\source\uCEFClient.pas',
uCEFProcessMessage in '..\source\uCEFProcessMessage.pas',
uCEFBrowser in '..\source\uCEFBrowser.pas',
uCEFListValue in '..\source\uCEFListValue.pas',
uCEFBinaryValue in '..\source\uCEFBinaryValue.pas',
uCEFValue in '..\source\uCEFValue.pas',
uCEFDictionaryValue in '..\source\uCEFDictionaryValue.pas',
uCEFDownloadImageCallBack in '..\source\uCEFDownloadImageCallBack.pas',
uCEFFrame in '..\source\uCEFFrame.pas',
uCEFPDFPrintCallback in '..\source\uCEFPDFPrintCallback.pas',
uCEFRunFileDialogCallback in '..\source\uCEFRunFileDialogCallback.pas',
uCEFRequestContext in '..\source\uCEFRequestContext.pas',
uCEFNavigationEntryVisitor in '..\source\uCEFNavigationEntryVisitor.pas',
uCEFStringVisitor in '..\source\uCEFStringVisitor.pas',
uCEFv8Context in '..\source\uCEFv8Context.pas',
uCEFDomVisitor in '..\source\uCEFDomVisitor.pas',
uCEFNavigationEntry in '..\source\uCEFNavigationEntry.pas',
uCEFCookieManager in '..\source\uCEFCookieManager.pas',
uCEFCompletionCallback in '..\source\uCEFCompletionCallback.pas',
uCEFRequestContextHandler in '..\source\uCEFRequestContextHandler.pas',
uCEFWebPluginInfo in '..\source\uCEFWebPluginInfo.pas',
uCEFDomDocument in '..\source\uCEFDomDocument.pas',
uCEFDomNode in '..\source\uCEFDomNode.pas',
uCEFv8Value in '..\source\uCEFv8Value.pas',
uCEFv8Accessor in '..\source\uCEFv8Accessor.pas',
uCEFLoadHandler in '..\source\uCEFLoadHandler.pas',
uCEFFocusHandler in '..\source\uCEFFocusHandler.pas',
uCEFContextMenuHandler in '..\source\uCEFContextMenuHandler.pas',
uCEFDialogHandler in '..\source\uCEFDialogHandler.pas',
uCEFKeyboardHandler in '..\source\uCEFKeyboardHandler.pas',
uCEFDisplayHandler in '..\source\uCEFDisplayHandler.pas',
uCEFDownloadHandler in '..\source\uCEFDownloadHandler.pas',
uCEFGeolocationHandler in '..\source\uCEFGeolocationHandler.pas',
uCEFJsDialogHandler in '..\source\uCEFJsDialogHandler.pas',
uCEFLifeSpanHandler in '..\source\uCEFLifeSpanHandler.pas',
uCEFRequestHandler in '..\source\uCEFRequestHandler.pas',
uCEFRenderHandler in '..\source\uCEFRenderHandler.pas',
uCEFDragHandler in '..\source\uCEFDragHandler.pas',
uCEFPostData in '..\source\uCEFPostData.pas',
uCEFPostDataElement in '..\source\uCEFPostDataElement.pas',
uCEFRequest in '..\source\uCEFRequest.pas',
uCEFStreamReader in '..\source\uCEFStreamReader.pas',
uCEFWriteHandler in '..\source\uCEFWriteHandler.pas',
uCEFStreamWriter in '..\source\uCEFStreamWriter.pas',
uCEFv8StackFrame in '..\source\uCEFv8StackFrame.pas',
uCEFv8StackTrace in '..\source\uCEFv8StackTrace.pas',
uCEFv8Handler in '..\source\uCEFv8Handler.pas',
uCEFRequestCallback in '..\source\uCEFRequestCallback.pas',
uCEFCustomStreamReader in '..\source\uCEFCustomStreamReader.pas',
uCEFCallback in '..\source\uCEFCallback.pas',
uCEFResourceHandler in '..\source\uCEFResourceHandler.pas',
uCEFSchemeHandlerFactory in '..\source\uCEFSchemeHandlerFactory.pas',
uCEFTask in '..\source\uCEFTask.pas',
uCEFTaskRunner in '..\source\uCEFTaskRunner.pas',
uCEFStringMap in '..\source\uCEFStringMap.pas',
uCEFStringMultimap in '..\source\uCEFStringMultimap.pas',
uCEFXmlReader in '..\source\uCEFXmlReader.pas',
uCEFZipReader in '..\source\uCEFZipReader.pas',
uCEFResponse in '..\source\uCEFResponse.pas',
uCEFCookieVisitor in '..\source\uCEFCookieVisitor.pas',
uCEFV8Exception in '..\source\uCEFV8Exception.pas',
uCEFResourceBundleHandler in '..\source\uCEFResourceBundleHandler.pas',
uCEFSetCookieCallback in '..\source\uCEFSetCookieCallback.pas',
uCEFDeleteCookiesCallback in '..\source\uCEFDeleteCookiesCallback.pas',
uCEFDownLoadItem in '..\source\uCEFDownLoadItem.pas',
uCEFBeforeDownloadCallback in '..\source\uCEFBeforeDownloadCallback.pas',
uCEFDownloadItemCallback in '..\source\uCEFDownloadItemCallback.pas',
uCEFAuthCallback in '..\source\uCEFAuthCallback.pas',
uCEFJsDialogCallback in '..\source\uCEFJsDialogCallback.pas',
uCEFGeolocationCallback in '..\source\uCEFGeolocationCallback.pas',
uCEFContextMenuParams in '..\source\uCEFContextMenuParams.pas',
uCEFMenuModel in '..\source\uCEFMenuModel.pas',
uCEFBrowserProcessHandler in '..\source\uCEFBrowserProcessHandler.pas',
uCEFRenderProcessHandler in '..\source\uCEFRenderProcessHandler.pas',
uCEFUrlrequestClient in '..\source\uCEFUrlrequestClient.pas',
uCEFUrlRequest in '..\source\uCEFUrlRequest.pas',
uCEFWebPluginInfoVisitor in '..\source\uCEFWebPluginInfoVisitor.pas',
uCEFWebPluginUnstableCallback in '..\source\uCEFWebPluginUnstableCallback.pas',
uCEFEndTracingCallback in '..\source\uCEFEndTracingCallback.pas',
uCEFGetGeolocationCallback in '..\source\uCEFGetGeolocationCallback.pas',
uCEFFileDialogCallback in '..\source\uCEFFileDialogCallback.pas',
uCEFDragData in '..\source\uCEFDragData.pas',
uCEFResolveCallback in '..\source\uCEFResolveCallback.pas',
uCEFPrintSettings in '..\source\uCEFPrintSettings.pas',
uCEFSslInfo in '..\source\uCEFSslInfo.pas',
uCEFRunContextMenuCallback in '..\source\uCEFRunContextMenuCallback.pas',
uCEFResourceBundle in '..\source\uCEFResourceBundle.pas',
uCEFResponseFilter in '..\source\uCEFResponseFilter.pas',
uCEFImage in '..\source\uCEFImage.pas',
uCEFMenuModelDelegate in '..\source\uCEFMenuModelDelegate.pas',
uCEFv8Types in '..\source\uCEFv8Types.pas',
uCEFWindowParent in '..\source\uCEFWindowParent.pas',
uCEFChromium in '..\source\uCEFChromium.pas',
uCEFChromiumEvents in '..\source\uCEFChromiumEvents.pas',
uCEFChromiumOptions in '..\source\uCEFChromiumOptions.pas',
uCEFChromiumFontOptions in '..\source\uCEFChromiumFontOptions.pas',
uCEFPDFPrintOptions in '..\source\uCEFPDFPrintOptions.pas',
uCEFRegisterCDMCallback in '..\source\uCEFRegisterCDMCallback.pas',
uCEFThread in '..\source\uCEFThread.pas',
uCEFv8Interceptor in '..\source\uCEFv8Interceptor.pas',
uCEFWaitableEvent in '..\source\uCEFWaitableEvent.pas',
uCEFX509CertPrincipal in '..\source\uCEFX509CertPrincipal.pas',
uCEFX509Certificate in '..\source\uCEFX509Certificate.pas',
uCEFSSLStatus in '..\source\uCEFSSLStatus.pas',
uCEFSelectClientCertificateCallback in '..\source\uCEFSelectClientCertificateCallback.pas',
uCEFChromiumWindow in '..\source\uCEFChromiumWindow.pas',
uCEFBaseRefCounted in '..\source\uCEFBaseRefCounted.pas',
uCEFBaseScopedWrapper in '..\source\uCEFBaseScopedWrapper.pas',
uCEFAccessibilityHandler in '..\source\uCEFAccessibilityHandler.pas',
uOLEDragAndDrop in '..\source\uOLEDragAndDrop.pas',
uCEFDragAndDropMgr in '..\source\uCEFDragAndDropMgr.pas',
uCEFGetExtensionResourceCallback in '..\source\uCEFGetExtensionResourceCallback.pas',
uCEFExtension in '..\source\uCEFExtension.pas',
uCEFExtensionHandler in '..\source\uCEFExtensionHandler.pas',
uBufferPanel in '..\source\uBufferPanel.pas',
uCEFApp in '..\source\uCEFApp.pas',
uCEFWorkScheduler in '..\source\uCEFWorkScheduler.pas',
uCEFWorkSchedulerThread in '..\source\uCEFWorkSchedulerThread.pas',
uCEFServer in '..\source\uCEFServer.pas',
uCEFServerHandler in '..\source\uCEFServerHandler.pas',
uCEFServerEvents in '..\source\uCEFServerEvents.pas',
uCEFServerComponent in '..\source\uCEFServerComponent.pas',
uFMXBufferPanel in '..\source\uFMXBufferPanel.pas',
uFMXChromium in '..\source\uFMXChromium.pas',
uFMXWorkScheduler in '..\source\uFMXWorkScheduler.pas';
end.

View File

@ -0,0 +1,672 @@
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ProjectGuid>{2F51F1BD-0529-4B4A-BFD2-86FE96910A62}</ProjectGuid>
<MainSource>CEF4Delphi_FMX.dpk</MainSource>
<ProjectVersion>18.2</ProjectVersion>
<FrameworkType>VCL</FrameworkType>
<Base>True</Base>
<Config Condition="'$(Config)'==''">Debug</Config>
<Platform Condition="'$(Platform)'==''">Win32</Platform>
<TargetedPlatforms>1</TargetedPlatforms>
<AppType>Package</AppType>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''">
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Base)'=='true') or '$(Base_Win32)'!=''">
<Base_Win32>true</Base_Win32>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Win64' and '$(Base)'=='true') or '$(Base_Win64)'!=''">
<Base_Win64>true</Base_Win64>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Debug' or '$(Cfg_1)'!=''">
<Cfg_1>true</Cfg_1>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Cfg_1)'=='true') or '$(Cfg_1_Win32)'!=''">
<Cfg_1_Win32>true</Cfg_1_Win32>
<CfgParent>Cfg_1</CfgParent>
<Cfg_1>true</Cfg_1>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Release' or '$(Cfg_2)'!=''">
<Cfg_2>true</Cfg_2>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Cfg_2)'=='true') or '$(Cfg_2_Win32)'!=''">
<Cfg_2_Win32>true</Cfg_2_Win32>
<CfgParent>Cfg_2</CfgParent>
<Cfg_2>true</Cfg_2>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Debug with optimization' or '$(Cfg_3)'!=''">
<Cfg_3>true</Cfg_3>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Cfg_3)'=='true') or '$(Cfg_3_Win32)'!=''">
<Cfg_3_Win32>true</Cfg_3_Win32>
<CfgParent>Cfg_3</CfgParent>
<Cfg_3>true</Cfg_3>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Base)'!=''">
<DCC_CBuilderOutput>All</DCC_CBuilderOutput>
<GenPackage>true</GenPackage>
<DCC_Namespace>System;Xml;Data;Datasnap;Web;Soap;Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;$(DCC_Namespace)</DCC_Namespace>
<SanitizedProjectName>CEF4Delphi_FMX</SanitizedProjectName>
<GenDll>true</GenDll>
<DCC_OutputNeverBuildDcps>true</DCC_OutputNeverBuildDcps>
<DCC_DcuOutput>.\$(Platform)\$(Config)</DCC_DcuOutput>
<DCC_ExeOutput>.\$(Platform)\$(Config)</DCC_ExeOutput>
<DCC_E>false</DCC_E>
<DCC_N>false</DCC_N>
<DCC_S>false</DCC_S>
<DCC_F>false</DCC_F>
<DCC_K>false</DCC_K>
</PropertyGroup>
<PropertyGroup Condition="'$(Base_Win32)'!=''">
<DCC_UsePackage>rtl;vcl;fmx;$(DCC_UsePackage)</DCC_UsePackage>
<VerInfo_Locale>1033</VerInfo_Locale>
<DCC_Namespace>Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)</DCC_Namespace>
<VerInfo_Keys>CompanyName=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName);FileDescription=$(MSBuildProjectName);ProductName=$(MSBuildProjectName)</VerInfo_Keys>
<VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
</PropertyGroup>
<PropertyGroup Condition="'$(Base_Win64)'!=''">
<DCC_UsePackage>rtl;vcl;fmx;$(DCC_UsePackage)</DCC_UsePackage>
<DCC_Namespace>Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace)</DCC_Namespace>
<BT_BuildType>Debug</BT_BuildType>
<VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
<VerInfo_Keys>CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=</VerInfo_Keys>
<VerInfo_Locale>1033</VerInfo_Locale>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_1)'!=''">
<DCC_Define>DEBUG;$(DCC_Define)</DCC_Define>
<DCC_DebugDCUs>true</DCC_DebugDCUs>
<DCC_Optimize>false</DCC_Optimize>
<DCC_GenerateStackFrames>true</DCC_GenerateStackFrames>
<DCC_DebugInfoInExe>true</DCC_DebugInfoInExe>
<DCC_RemoteDebug>true</DCC_RemoteDebug>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_1_Win32)'!=''">
<VerInfo_Keys>CompanyName=;FileVersion=1.0.0.0;InternalName=CEF4Delphi;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=CEF4Delphi;ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName);FileDescription=$(MSBuildProjectName)</VerInfo_Keys>
<DCC_Description>CEF4Delphi</DCC_Description>
<VerInfo_Locale>1033</VerInfo_Locale>
<VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
<DCC_RemoteDebug>false</DCC_RemoteDebug>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_2)'!=''">
<DCC_LocalDebugSymbols>false</DCC_LocalDebugSymbols>
<DCC_Define>RELEASE;$(DCC_Define)</DCC_Define>
<DCC_SymbolReferenceInfo>0</DCC_SymbolReferenceInfo>
<DCC_DebugInformation>0</DCC_DebugInformation>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_2_Win32)'!=''">
<VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
<VerInfo_Locale>1033</VerInfo_Locale>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_3_Win32)'!=''">
<DCC_GenerateStackFrames>true</DCC_GenerateStackFrames>
<VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
<VerInfo_Locale>1033</VerInfo_Locale>
<DCC_DebugDCUs>true</DCC_DebugDCUs>
<DCC_DebugInfoInExe>true</DCC_DebugInfoInExe>
</PropertyGroup>
<ItemGroup>
<DelphiCompile Include="$(MainSource)">
<MainSource>MainSource</MainSource>
</DelphiCompile>
<DCCReference Include="rtl.dcp"/>
<DCCReference Include="vcl.dcp"/>
<DCCReference Include="fmx.dcp"/>
<DCCReference Include="CEF4Delphi_FMX_Register.pas"/>
<DCCReference Include="..\source\uCEFFindHandler.pas"/>
<DCCReference Include="..\source\uCEFConstants.pas"/>
<DCCReference Include="..\source\uCEFTypes.pas"/>
<DCCReference Include="..\source\uCEFInterfaces.pas"/>
<DCCReference Include="..\source\uCEFMiscFunctions.pas"/>
<DCCReference Include="..\source\uCEFLibFunctions.pas"/>
<DCCReference Include="..\source\uCEFApplication.pas"/>
<DCCReference Include="..\source\uCEFSchemeRegistrar.pas"/>
<DCCReference Include="..\source\uCEFCommandLine.pas"/>
<DCCReference Include="..\source\uCEFClient.pas"/>
<DCCReference Include="..\source\uCEFProcessMessage.pas"/>
<DCCReference Include="..\source\uCEFBrowser.pas"/>
<DCCReference Include="..\source\uCEFListValue.pas"/>
<DCCReference Include="..\source\uCEFBinaryValue.pas"/>
<DCCReference Include="..\source\uCEFValue.pas"/>
<DCCReference Include="..\source\uCEFDictionaryValue.pas"/>
<DCCReference Include="..\source\uCEFDownloadImageCallBack.pas"/>
<DCCReference Include="..\source\uCEFFrame.pas"/>
<DCCReference Include="..\source\uCEFPDFPrintCallback.pas"/>
<DCCReference Include="..\source\uCEFRunFileDialogCallback.pas"/>
<DCCReference Include="..\source\uCEFRequestContext.pas"/>
<DCCReference Include="..\source\uCEFNavigationEntryVisitor.pas"/>
<DCCReference Include="..\source\uCEFStringVisitor.pas"/>
<DCCReference Include="..\source\uCEFv8Context.pas"/>
<DCCReference Include="..\source\uCEFDomVisitor.pas"/>
<DCCReference Include="..\source\uCEFNavigationEntry.pas"/>
<DCCReference Include="..\source\uCEFCookieManager.pas"/>
<DCCReference Include="..\source\uCEFCompletionCallback.pas"/>
<DCCReference Include="..\source\uCEFRequestContextHandler.pas"/>
<DCCReference Include="..\source\uCEFWebPluginInfo.pas"/>
<DCCReference Include="..\source\uCEFDomDocument.pas"/>
<DCCReference Include="..\source\uCEFDomNode.pas"/>
<DCCReference Include="..\source\uCEFv8Value.pas"/>
<DCCReference Include="..\source\uCEFv8Accessor.pas"/>
<DCCReference Include="..\source\uCEFLoadHandler.pas"/>
<DCCReference Include="..\source\uCEFFocusHandler.pas"/>
<DCCReference Include="..\source\uCEFContextMenuHandler.pas"/>
<DCCReference Include="..\source\uCEFDialogHandler.pas"/>
<DCCReference Include="..\source\uCEFKeyboardHandler.pas"/>
<DCCReference Include="..\source\uCEFDisplayHandler.pas"/>
<DCCReference Include="..\source\uCEFDownloadHandler.pas"/>
<DCCReference Include="..\source\uCEFGeolocationHandler.pas"/>
<DCCReference Include="..\source\uCEFJsDialogHandler.pas"/>
<DCCReference Include="..\source\uCEFLifeSpanHandler.pas"/>
<DCCReference Include="..\source\uCEFRequestHandler.pas"/>
<DCCReference Include="..\source\uCEFRenderHandler.pas"/>
<DCCReference Include="..\source\uCEFDragHandler.pas"/>
<DCCReference Include="..\source\uCEFPostData.pas"/>
<DCCReference Include="..\source\uCEFPostDataElement.pas"/>
<DCCReference Include="..\source\uCEFRequest.pas"/>
<DCCReference Include="..\source\uCEFStreamReader.pas"/>
<DCCReference Include="..\source\uCEFWriteHandler.pas"/>
<DCCReference Include="..\source\uCEFStreamWriter.pas"/>
<DCCReference Include="..\source\uCEFv8StackFrame.pas"/>
<DCCReference Include="..\source\uCEFv8StackTrace.pas"/>
<DCCReference Include="..\source\uCEFv8Handler.pas"/>
<DCCReference Include="..\source\uCEFRequestCallback.pas"/>
<DCCReference Include="..\source\uCEFCustomStreamReader.pas"/>
<DCCReference Include="..\source\uCEFCallback.pas"/>
<DCCReference Include="..\source\uCEFResourceHandler.pas"/>
<DCCReference Include="..\source\uCEFSchemeHandlerFactory.pas"/>
<DCCReference Include="..\source\uCEFTask.pas"/>
<DCCReference Include="..\source\uCEFTaskRunner.pas"/>
<DCCReference Include="..\source\uCEFStringMap.pas"/>
<DCCReference Include="..\source\uCEFStringMultimap.pas"/>
<DCCReference Include="..\source\uCEFXmlReader.pas"/>
<DCCReference Include="..\source\uCEFZipReader.pas"/>
<DCCReference Include="..\source\uCEFResponse.pas"/>
<DCCReference Include="..\source\uCEFCookieVisitor.pas"/>
<DCCReference Include="..\source\uCEFV8Exception.pas"/>
<DCCReference Include="..\source\uCEFResourceBundleHandler.pas"/>
<DCCReference Include="..\source\uCEFSetCookieCallback.pas"/>
<DCCReference Include="..\source\uCEFDeleteCookiesCallback.pas"/>
<DCCReference Include="..\source\uCEFDownLoadItem.pas"/>
<DCCReference Include="..\source\uCEFBeforeDownloadCallback.pas"/>
<DCCReference Include="..\source\uCEFDownloadItemCallback.pas"/>
<DCCReference Include="..\source\uCEFAuthCallback.pas"/>
<DCCReference Include="..\source\uCEFJsDialogCallback.pas"/>
<DCCReference Include="..\source\uCEFGeolocationCallback.pas"/>
<DCCReference Include="..\source\uCEFContextMenuParams.pas"/>
<DCCReference Include="..\source\uCEFMenuModel.pas"/>
<DCCReference Include="..\source\uCEFBrowserProcessHandler.pas"/>
<DCCReference Include="..\source\uCEFRenderProcessHandler.pas"/>
<DCCReference Include="..\source\uCEFUrlrequestClient.pas"/>
<DCCReference Include="..\source\uCEFUrlRequest.pas"/>
<DCCReference Include="..\source\uCEFWebPluginInfoVisitor.pas"/>
<DCCReference Include="..\source\uCEFWebPluginUnstableCallback.pas"/>
<DCCReference Include="..\source\uCEFEndTracingCallback.pas"/>
<DCCReference Include="..\source\uCEFGetGeolocationCallback.pas"/>
<DCCReference Include="..\source\uCEFFileDialogCallback.pas"/>
<DCCReference Include="..\source\uCEFDragData.pas"/>
<DCCReference Include="..\source\uCEFResolveCallback.pas"/>
<DCCReference Include="..\source\uCEFPrintSettings.pas"/>
<DCCReference Include="..\source\uCEFSslInfo.pas"/>
<DCCReference Include="..\source\uCEFRunContextMenuCallback.pas"/>
<DCCReference Include="..\source\uCEFResourceBundle.pas"/>
<DCCReference Include="..\source\uCEFResponseFilter.pas"/>
<DCCReference Include="..\source\uCEFImage.pas"/>
<DCCReference Include="..\source\uCEFMenuModelDelegate.pas"/>
<DCCReference Include="..\source\uCEFv8Types.pas"/>
<DCCReference Include="..\source\uCEFWindowParent.pas"/>
<DCCReference Include="..\source\uCEFChromium.pas"/>
<DCCReference Include="..\source\uCEFChromiumEvents.pas"/>
<DCCReference Include="..\source\uCEFChromiumOptions.pas"/>
<DCCReference Include="..\source\uCEFChromiumFontOptions.pas"/>
<DCCReference Include="..\source\uCEFPDFPrintOptions.pas"/>
<DCCReference Include="..\source\uCEFRegisterCDMCallback.pas"/>
<DCCReference Include="..\source\uCEFThread.pas"/>
<DCCReference Include="..\source\uCEFv8Interceptor.pas"/>
<DCCReference Include="..\source\uCEFWaitableEvent.pas"/>
<DCCReference Include="..\source\uCEFX509CertPrincipal.pas"/>
<DCCReference Include="..\source\uCEFX509Certificate.pas"/>
<DCCReference Include="..\source\uCEFSSLStatus.pas"/>
<DCCReference Include="..\source\uCEFSelectClientCertificateCallback.pas"/>
<DCCReference Include="..\source\uCEFChromiumWindow.pas"/>
<DCCReference Include="..\source\uCEFBaseRefCounted.pas"/>
<DCCReference Include="..\source\uCEFBaseScopedWrapper.pas"/>
<DCCReference Include="..\source\uCEFAccessibilityHandler.pas"/>
<DCCReference Include="..\source\uOLEDragAndDrop.pas"/>
<DCCReference Include="..\source\uCEFDragAndDropMgr.pas"/>
<DCCReference Include="..\source\uCEFGetExtensionResourceCallback.pas"/>
<DCCReference Include="..\source\uCEFExtension.pas"/>
<DCCReference Include="..\source\uCEFExtensionHandler.pas"/>
<DCCReference Include="..\source\uBufferPanel.pas"/>
<DCCReference Include="..\source\uCEFApp.pas"/>
<DCCReference Include="..\source\uCEFWorkScheduler.pas"/>
<DCCReference Include="..\source\uCEFWorkSchedulerThread.pas"/>
<DCCReference Include="..\source\uCEFServer.pas"/>
<DCCReference Include="..\source\uCEFServerHandler.pas"/>
<DCCReference Include="..\source\uCEFServerEvents.pas"/>
<DCCReference Include="..\source\uCEFServerComponent.pas"/>
<DCCReference Include="..\source\uFMXBufferPanel.pas"/>
<DCCReference Include="..\source\uFMXChromium.pas"/>
<DCCReference Include="..\source\uFMXWorkScheduler.pas"/>
<BuildConfiguration Include="Base">
<Key>Base</Key>
</BuildConfiguration>
<BuildConfiguration Include="Release">
<Key>Cfg_2</Key>
<CfgParent>Base</CfgParent>
</BuildConfiguration>
<BuildConfiguration Include="Debug">
<Key>Cfg_1</Key>
<CfgParent>Base</CfgParent>
</BuildConfiguration>
<BuildConfiguration Include="Debug with optimization">
<Key>Cfg_3</Key>
<CfgParent>Base</CfgParent>
</BuildConfiguration>
</ItemGroup>
<ProjectExtensions>
<Borland.Personality>Delphi.Personality.12</Borland.Personality>
<Borland.ProjectType>Package</Borland.ProjectType>
<BorlandProject>
<Delphi.Personality>
<Source>
<Source Name="MainSource">CEF4Delphi_FMX.dpk</Source>
</Source>
<Excluded_Packages>
<Excluded_Packages Name="$(BDSBIN)\dclIPIndyImpl250.bpl">IP Abstraction Indy Implementation Design Time</Excluded_Packages>
<Excluded_Packages Name="$(BDSBIN)\dcloffice2k250.bpl">Microsoft Office 2000 Sample Automation Server Wrapper Components</Excluded_Packages>
<Excluded_Packages Name="$(BDSBIN)\dclofficexp250.bpl">Microsoft Office XP Sample Automation Server Wrapper Components</Excluded_Packages>
</Excluded_Packages>
</Delphi.Personality>
<Deployment Version="3">
<DeployFile LocalName="$(BDS)\Redist\iossimulator\libcgunwind.1.0.dylib" Class="DependencyModule"/>
<DeployFile LocalName="..\..\..\..\..\..\..\Public\Documents\Embarcadero\Studio\17.0\Bpl\CEF4Delphi.bpl" Configuration="Debug" Class="ProjectOutput"/>
<DeployFile LocalName="$(BDS)\Redist\iossimulator\libPCRE.dylib" Class="DependencyModule"/>
<DeployFile LocalName="..\..\..\..\..\..\..\Public\Documents\Embarcadero\Studio\19.0\Bpl\CEF4Delphi.bpl" Configuration="Debug" Class="ProjectOutput">
<Platform Name="Win32">
<RemoteName>CEF4Delphi.bpl</RemoteName>
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
<DeployFile LocalName="$(BDS)\Redist\osx32\libcgunwind.1.0.dylib" Class="DependencyModule"/>
<DeployClass Name="AdditionalDebugSymbols">
<Platform Name="OSX32">
<Operation>1</Operation>
</Platform>
<Platform Name="Win32">
<RemoteDir>Contents\MacOS</RemoteDir>
<Operation>0</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidClassesDexFile">
<Platform Name="Android">
<RemoteDir>classes</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidGDBServer">
<Platform Name="Android">
<RemoteDir>library\lib\armeabi-v7a</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidLibnativeArmeabiFile">
<Platform Name="Android">
<RemoteDir>library\lib\armeabi</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidLibnativeMipsFile">
<Platform Name="Android">
<RemoteDir>library\lib\mips</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidServiceOutput">
<Platform Name="Android">
<RemoteDir>library\lib\armeabi-v7a</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidSplashImageDef">
<Platform Name="Android">
<RemoteDir>res\drawable</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidSplashStyles">
<Platform Name="Android">
<RemoteDir>res\values</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_DefaultAppIcon">
<Platform Name="Android">
<RemoteDir>res\drawable</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_LauncherIcon144">
<Platform Name="Android">
<RemoteDir>res\drawable-xxhdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_LauncherIcon36">
<Platform Name="Android">
<RemoteDir>res\drawable-ldpi</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_LauncherIcon48">
<Platform Name="Android">
<RemoteDir>res\drawable-mdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_LauncherIcon72">
<Platform Name="Android">
<RemoteDir>res\drawable-hdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_LauncherIcon96">
<Platform Name="Android">
<RemoteDir>res\drawable-xhdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_SplashImage426">
<Platform Name="Android">
<RemoteDir>res\drawable-small</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_SplashImage470">
<Platform Name="Android">
<RemoteDir>res\drawable-normal</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_SplashImage640">
<Platform Name="Android">
<RemoteDir>res\drawable-large</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_SplashImage960">
<Platform Name="Android">
<RemoteDir>res\drawable-xlarge</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="DebugSymbols">
<Platform Name="iOSSimulator">
<Operation>1</Operation>
</Platform>
<Platform Name="OSX32">
<Operation>1</Operation>
</Platform>
<Platform Name="Win32">
<Operation>0</Operation>
</Platform>
</DeployClass>
<DeployClass Name="DependencyFramework">
<Platform Name="OSX32">
<Operation>1</Operation>
<Extensions>.framework</Extensions>
</Platform>
<Platform Name="Win32">
<Operation>0</Operation>
</Platform>
</DeployClass>
<DeployClass Name="DependencyModule">
<Platform Name="OSX32">
<Operation>1</Operation>
<Extensions>.dylib</Extensions>
</Platform>
<Platform Name="Win32">
<Operation>0</Operation>
<Extensions>.dll;.bpl</Extensions>
</Platform>
</DeployClass>
<DeployClass Required="true" Name="DependencyPackage">
<Platform Name="iOSDevice32">
<Operation>1</Operation>
<Extensions>.dylib</Extensions>
</Platform>
<Platform Name="iOSDevice64">
<Operation>1</Operation>
<Extensions>.dylib</Extensions>
</Platform>
<Platform Name="iOSSimulator">
<Operation>1</Operation>
<Extensions>.dylib</Extensions>
</Platform>
<Platform Name="OSX32">
<Operation>1</Operation>
<Extensions>.dylib</Extensions>
</Platform>
<Platform Name="Win32">
<Operation>0</Operation>
<Extensions>.bpl</Extensions>
</Platform>
</DeployClass>
<DeployClass Name="File">
<Platform Name="Android">
<Operation>0</Operation>
</Platform>
<Platform Name="iOSDevice32">
<Operation>0</Operation>
</Platform>
<Platform Name="iOSDevice64">
<Operation>0</Operation>
</Platform>
<Platform Name="iOSSimulator">
<Operation>0</Operation>
</Platform>
<Platform Name="OSX32">
<Operation>0</Operation>
</Platform>
<Platform Name="Win32">
<Operation>0</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPad_Launch1024">
<Platform Name="iOSDevice32">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice64">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPad_Launch1536">
<Platform Name="iOSDevice32">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice64">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPad_Launch2048">
<Platform Name="iOSDevice32">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice64">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPad_Launch768">
<Platform Name="iOSDevice32">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice64">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPhone_Launch320">
<Platform Name="iOSDevice32">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice64">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPhone_Launch640">
<Platform Name="iOSDevice32">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice64">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPhone_Launch640x1136">
<Platform Name="iOSDevice32">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice64">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectAndroidManifest">
<Platform Name="Android">
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectiOSDeviceDebug">
<Platform Name="iOSDevice32">
<RemoteDir>..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectiOSDeviceResourceRules"/>
<DeployClass Name="ProjectiOSEntitlements"/>
<DeployClass Name="ProjectiOSInfoPList"/>
<DeployClass Name="ProjectiOSResource">
<Platform Name="iOSDevice32">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice64">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectOSXEntitlements"/>
<DeployClass Name="ProjectOSXInfoPList"/>
<DeployClass Name="ProjectOSXResource">
<Platform Name="OSX32">
<RemoteDir>Contents\Resources</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Required="true" Name="ProjectOutput">
<Platform Name="Android">
<RemoteDir>library\lib\armeabi-v7a</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice32">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice64">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<Operation>1</Operation>
</Platform>
<Platform Name="Linux64">
<Operation>1</Operation>
</Platform>
<Platform Name="OSX32">
<Operation>1</Operation>
</Platform>
<Platform Name="Win32">
<Operation>0</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectUWPManifest">
<Platform Name="Win32">
<Operation>1</Operation>
</Platform>
<Platform Name="Win64">
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="UWP_DelphiLogo150">
<Platform Name="Win32">
<RemoteDir>Assets</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Win64">
<RemoteDir>Assets</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="UWP_DelphiLogo44">
<Platform Name="Win32">
<RemoteDir>Assets</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Win64">
<RemoteDir>Assets</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<ProjectRoot Platform="iOSDevice64" Name="$(PROJECTNAME).app"/>
<ProjectRoot Platform="Win64" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="iOSDevice32" Name="$(PROJECTNAME).app"/>
<ProjectRoot Platform="Win32" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="Linux64" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="OSX32" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="Android" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="iOSSimulator" Name="$(PROJECTNAME).app"/>
</Deployment>
<Platforms>
<Platform value="Win32">True</Platform>
<Platform value="Win64">False</Platform>
</Platforms>
</BorlandProject>
<ProjectFileVersion>12</ProjectFileVersion>
</ProjectExtensions>
<Import Project="$(BDS)\Bin\CodeGear.Delphi.Targets" Condition="Exists('$(BDS)\Bin\CodeGear.Delphi.Targets')"/>
<Import Project="$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj" Condition="Exists('$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj')"/>
<Import Project="$(MSBuildProjectName).deployproj" Condition="Exists('$(MSBuildProjectName).deployproj')"/>
</Project>

BIN
packages/CEF4Delphi_FMX.res Normal file

Binary file not shown.

View File

@ -0,0 +1,62 @@
// ************************************************************************
// ***************************** CEF4Delphi *******************************
// ************************************************************************
//
// CEF4Delphi is based on DCEF3 which uses CEF3 to embed a chromium-based
// browser in Delphi applications.
//
// The original license of DCEF3 still applies to CEF4Delphi.
//
// 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.
//
// ************************************************************************
// ************ vvvv Original license and comments below vvvv *************
// ************************************************************************
(*
* Delphi Chromium Embedded 3
*
* Usage allowed under the restrictions of the Lesser GNU General Public License
* or alternatively the restrictions of the Mozilla Public License 1.1
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
* the specific language governing rights and limitations under the License.
*
* Unit owner : Henri Gourvest <hgourvest@gmail.com>
* Web site : http://www.progdigy.com
* Repository : http://code.google.com/p/delphichromiumembedded/
* Group : http://groups.google.com/group/delphichromiumembedded
*
* Embarcadero Technologies, Inc is not permitted to use or redistribute
* this source code without explicit permission.
*
*)
unit CEF4Delphi_FMX_Register;
{$R chromium.dcr}
{$I cef.inc}
interface
procedure Register;
implementation
uses
System.Classes,
uCEFChromium, uCEFWindowParent, uCEFChromiumWindow, uBufferPanel, uCEFWorkScheduler,
uFMXBufferPanel, uFMXChromium, uFMXWorkScheduler, uCEFServerComponent;
procedure Register;
begin
RegisterComponents('Chromium', [TChromium, TCEFWindowParent, TChromiumWindow, TBufferPanel,
TFMXBufferPanel, TFMXChromium, TFMXWorkScheduler,
TCEFWorkScheduler, TCEFServerComponent]);
end;
end.

View File

@ -35,7 +35,7 @@
*
*)
unit uCEFRegisterComponents;
unit CEF4Delphi_Register;
{$R chromium.dcr}

BIN
packages/bufferpanel.bmp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

384
packages/cef.inc Normal file
View File

@ -0,0 +1,384 @@
// ************************************************************************
// ***************************** CEF4Delphi *******************************
// ************************************************************************
//
// CEF4Delphi is based on DCEF3 which uses CEF3 to embed a chromium-based
// browser in Delphi applications.
//
// The original license of DCEF3 still applies to CEF4Delphi.
//
// For more information about CEF4Delphi visit :
// https://www.briskbard.com/index.php?lang=en&pageid=cef
//
// Copyright © 2017 Salvador Díaz Fau. All rights reserved.
//
// ************************************************************************
// ************ vvvv Original license and comments below vvvv *************
// ************************************************************************
(*
* Delphi Chromium Embedded 3
*
* Usage allowed under the restrictions of the Lesser GNU General Public License
* or alternatively the restrictions of the Mozilla Public License 1.1
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
* the specific language governing rights and limitations under the License.
*
* Unit owner : Henri Gourvest <hgourvest@gmail.com>
* Web site : http://www.progdigy.com
* Repository : http://code.google.com/p/delphichromiumembedded/
* Group : http://groups.google.com/group/delphichromiumembedded
*
* Embarcadero Technologies, Inc is not permitted to use or redistribute
* this source code without explicit permission.
*
*)
// The complete list of compiler versions is here :
// http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Compiler_Versions
{$DEFINE DELPHI_VERSION_UNKNOW}
{$IFDEF FPC}
{$DEFINE CEF_MULTI_THREADED_MESSAGE_LOOP}
{$DEFINE SUPPORTS_INLINE}
{$ENDIF}
// Delphi 5
{$IFDEF VER130}
{$UNDEF DELPHI_VERSION_UNKNOW}
{$DEFINE DELPHI5_UP}
{$ENDIF}
// Delphi 6
{$IFDEF VER140}
{$UNDEF DELPHI_VERSION_UNKNOW}
{$DEFINE DELPHI5_UP}
{$DEFINE DELPHI6_UP}
{$ENDIF}
// Delphi 7
{$IFDEF VER150}
{$UNDEF DELPHI_VERSION_UNKNOW}
{$DEFINE DELPHI5_UP}
{$DEFINE DELPHI6_UP}
{$DEFINE DELPHI7_UP}
{$ENDIF}
// Delphi 8
{$IFDEF VER160}
{$UNDEF DELPHI_VERSION_UNKNOW}
{$DEFINE DELPHI5_UP}
{$DEFINE DELPHI6_UP}
{$DEFINE DELPHI7_UP}
{$DEFINE DELPHI8_UP}
{$ENDIF}
// Delphi 2005
{$IFDEF VER170}
{$UNDEF DELPHI_VERSION_UNKNOW}
{$DEFINE DELPHI5_UP}
{$DEFINE DELPHI6_UP}
{$DEFINE DELPHI7_UP}
{$DEFINE DELPHI8_UP}
{$DEFINE DELPHI9_UP}
{$ENDIF}
{$IFDEF VER180}
{$UNDEF DELPHI_VERSION_UNKNOW}
// Delphi 2007
{$IFDEF VER185}
{$DEFINE DELPHI5_UP}
{$DEFINE DELPHI6_UP}
{$DEFINE DELPHI7_UP}
{$DEFINE DELPHI8_UP}
{$DEFINE DELPHI9_UP}
{$DEFINE DELPHI10_UP}
{$DEFINE DELPHI11_UP}
// Delphi 2006
{$ELSE}
{$DEFINE DELPHI5_UP}
{$DEFINE DELPHI6_UP}
{$DEFINE DELPHI7_UP}
{$DEFINE DELPHI8_UP}
{$DEFINE DELPHI9_UP}
{$DEFINE DELPHI10_UP}
{$ENDIF}
{$ENDIF}
// Delphi 2009
{$IFDEF VER200}
{$UNDEF DELPHI_VERSION_UNKNOW}
{$DEFINE DELPHI5_UP}
{$DEFINE DELPHI6_UP}
{$DEFINE DELPHI7_UP}
{$DEFINE DELPHI8_UP}
{$DEFINE DELPHI9_UP}
{$DEFINE DELPHI10_UP}
{$DEFINE DELPHI11_UP}
{$DEFINE DELPHI12_UP}
{$ENDIF}
//Delphi 2010
{$IFDEF VER210}
{$UNDEF DELPHI_VERSION_UNKNOW}
{$DEFINE DELPHI5_UP}
{$DEFINE DELPHI6_UP}
{$DEFINE DELPHI7_UP}
{$DEFINE DELPHI8_UP}
{$DEFINE DELPHI9_UP}
{$DEFINE DELPHI10_UP}
{$DEFINE DELPHI11_UP}
{$DEFINE DELPHI12_UP}
{$DEFINE DELPHI14_UP}
{$ENDIF}
// Delphi XE
{$IFDEF VER220}
{$UNDEF DELPHI_VERSION_UNKNOW}
{$DEFINE DELPHI5_UP}
{$DEFINE DELPHI6_UP}
{$DEFINE DELPHI7_UP}
{$DEFINE DELPHI8_UP}
{$DEFINE DELPHI9_UP}
{$DEFINE DELPHI10_UP}
{$DEFINE DELPHI11_UP}
{$DEFINE DELPHI12_UP}
{$DEFINE DELPHI14_UP}
{$DEFINE DELPHI15_UP}
{$ENDIF}
// Delphi XE2
{$IFDEF VER230}
{$UNDEF DELPHI_VERSION_UNKNOW}
{$DEFINE DELPHI5_UP}
{$DEFINE DELPHI6_UP}
{$DEFINE DELPHI7_UP}
{$DEFINE DELPHI8_UP}
{$DEFINE DELPHI9_UP}
{$DEFINE DELPHI10_UP}
{$DEFINE DELPHI11_UP}
{$DEFINE DELPHI12_UP}
{$DEFINE DELPHI14_UP}
{$DEFINE DELPHI15_UP}
{$DEFINE DELPHI16_UP}
{$ENDIF}
// Delphi XE3
{$IFDEF VER240}
{$UNDEF DELPHI_VERSION_UNKNOW}
{$DEFINE DELPHI5_UP}
{$DEFINE DELPHI6_UP}
{$DEFINE DELPHI7_UP}
{$DEFINE DELPHI8_UP}
{$DEFINE DELPHI9_UP}
{$DEFINE DELPHI10_UP}
{$DEFINE DELPHI11_UP}
{$DEFINE DELPHI12_UP}
{$DEFINE DELPHI14_UP}
{$DEFINE DELPHI15_UP}
{$DEFINE DELPHI16_UP}
{$DEFINE DELPHI17_UP}
{$ENDIF}
// Delphi XE4
{$IFDEF VER250}
{$UNDEF DELPHI_VERSION_UNKNOW}
{$DEFINE DELPHI5_UP}
{$DEFINE DELPHI6_UP}
{$DEFINE DELPHI7_UP}
{$DEFINE DELPHI8_UP}
{$DEFINE DELPHI9_UP}
{$DEFINE DELPHI10_UP}
{$DEFINE DELPHI11_UP}
{$DEFINE DELPHI12_UP}
{$DEFINE DELPHI14_UP}
{$DEFINE DELPHI15_UP}
{$DEFINE DELPHI16_UP}
{$DEFINE DELPHI17_UP}
{$DEFINE DELPHI18_UP}
{$ENDIF}
// Delphi XE5
{$IFDEF VER260}
{$UNDEF DELPHI_VERSION_UNKNOW}
{$DEFINE DELPHI5_UP}
{$DEFINE DELPHI6_UP}
{$DEFINE DELPHI7_UP}
{$DEFINE DELPHI8_UP}
{$DEFINE DELPHI9_UP}
{$DEFINE DELPHI10_UP}
{$DEFINE DELPHI11_UP}
{$DEFINE DELPHI12_UP}
{$DEFINE DELPHI14_UP}
{$DEFINE DELPHI15_UP}
{$DEFINE DELPHI16_UP}
{$DEFINE DELPHI17_UP}
{$DEFINE DELPHI18_UP}
{$DEFINE DELPHI19_UP}
{$ENDIF}
// Delphi XE6
{$IFDEF VER270}
{$UNDEF DELPHI_VERSION_UNKNOW}
{$DEFINE DELPHI5_UP}
{$DEFINE DELPHI6_UP}
{$DEFINE DELPHI7_UP}
{$DEFINE DELPHI8_UP}
{$DEFINE DELPHI9_UP}
{$DEFINE DELPHI10_UP}
{$DEFINE DELPHI11_UP}
{$DEFINE DELPHI12_UP}
{$DEFINE DELPHI14_UP}
{$DEFINE DELPHI15_UP}
{$DEFINE DELPHI16_UP}
{$DEFINE DELPHI17_UP}
{$DEFINE DELPHI18_UP}
{$DEFINE DELPHI19_UP}
{$DEFINE DELPHI20_UP}
{$ENDIF}
// Delphi XE7
{$IFDEF VER280}
{$UNDEF DELPHI_VERSION_UNKNOW}
{$DEFINE DELPHI5_UP}
{$DEFINE DELPHI6_UP}
{$DEFINE DELPHI7_UP}
{$DEFINE DELPHI8_UP}
{$DEFINE DELPHI9_UP}
{$DEFINE DELPHI10_UP}
{$DEFINE DELPHI11_UP}
{$DEFINE DELPHI12_UP}
{$DEFINE DELPHI14_UP}
{$DEFINE DELPHI15_UP}
{$DEFINE DELPHI16_UP}
{$DEFINE DELPHI17_UP}
{$DEFINE DELPHI18_UP}
{$DEFINE DELPHI19_UP}
{$DEFINE DELPHI20_UP}
{$DEFINE DELPHI21_UP}
{$ENDIF}
// Delphi XE8
{$IFDEF VER290}
{$UNDEF DELPHI_VERSION_UNKNOW}
{$DEFINE DELPHI5_UP}
{$DEFINE DELPHI6_UP}
{$DEFINE DELPHI7_UP}
{$DEFINE DELPHI8_UP}
{$DEFINE DELPHI9_UP}
{$DEFINE DELPHI10_UP}
{$DEFINE DELPHI11_UP}
{$DEFINE DELPHI12_UP}
{$DEFINE DELPHI14_UP}
{$DEFINE DELPHI15_UP}
{$DEFINE DELPHI16_UP}
{$DEFINE DELPHI17_UP}
{$DEFINE DELPHI18_UP}
{$DEFINE DELPHI19_UP}
{$DEFINE DELPHI20_UP}
{$DEFINE DELPHI21_UP}
{$DEFINE DELPHI22_UP}
{$ENDIF VER290}
// Rad Studio 10 - Delphi Seattle
{$IFDEF VER300}
{$UNDEF DELPHI_VERSION_UNKNOW}
{$DEFINE DELPHI5_UP}
{$DEFINE DELPHI6_UP}
{$DEFINE DELPHI7_UP}
{$DEFINE DELPHI8_UP}
{$DEFINE DELPHI9_UP}
{$DEFINE DELPHI10_UP}
{$DEFINE DELPHI11_UP}
{$DEFINE DELPHI12_UP}
{$DEFINE DELPHI14_UP}
{$DEFINE DELPHI15_UP}
{$DEFINE DELPHI16_UP}
{$DEFINE DELPHI17_UP}
{$DEFINE DELPHI18_UP}
{$DEFINE DELPHI19_UP}
{$DEFINE DELPHI20_UP}
{$DEFINE DELPHI21_UP}
{$DEFINE DELPHI22_UP}
{$DEFINE DELPHI23_UP}
{$ENDIF}
// Rad Studio 10.1 - Delphi Berlin
{$IFDEF VER310}
{$UNDEF DELPHI_VERSION_UNKNOW}
{$DEFINE DELPHI5_UP}
{$DEFINE DELPHI6_UP}
{$DEFINE DELPHI7_UP}
{$DEFINE DELPHI8_UP}
{$DEFINE DELPHI9_UP}
{$DEFINE DELPHI10_UP}
{$DEFINE DELPHI11_UP}
{$DEFINE DELPHI12_UP}
{$DEFINE DELPHI14_UP}
{$DEFINE DELPHI15_UP}
{$DEFINE DELPHI16_UP}
{$DEFINE DELPHI17_UP}
{$DEFINE DELPHI18_UP}
{$DEFINE DELPHI19_UP}
{$DEFINE DELPHI20_UP}
{$DEFINE DELPHI21_UP}
{$DEFINE DELPHI22_UP}
{$DEFINE DELPHI23_UP}
{$DEFINE DELPHI24_UP}
{$ENDIF}
// Rad Studio 10.2 - Delphi Tokyo
{$IFDEF VER320}
{$UNDEF DELPHI_VERSION_UNKNOW}
{$DEFINE DELPHI5_UP}
{$DEFINE DELPHI6_UP}
{$DEFINE DELPHI7_UP}
{$DEFINE DELPHI8_UP}
{$DEFINE DELPHI9_UP}
{$DEFINE DELPHI10_UP}
{$DEFINE DELPHI11_UP}
{$DEFINE DELPHI12_UP}
{$DEFINE DELPHI14_UP}
{$DEFINE DELPHI15_UP}
{$DEFINE DELPHI16_UP}
{$DEFINE DELPHI17_UP}
{$DEFINE DELPHI18_UP}
{$DEFINE DELPHI19_UP}
{$DEFINE DELPHI20_UP}
{$DEFINE DELPHI21_UP}
{$DEFINE DELPHI22_UP}
{$DEFINE DELPHI23_UP}
{$DEFINE DELPHI24_UP}
{$DEFINE DELPHI25_UP}
{$ENDIF}
{$IFDEF DELPHI_VERSION_UNKNOW}
{$DEFINE DELPHI5_UP}
{$DEFINE DELPHI6_UP}
{$DEFINE DELPHI7_UP}
{$DEFINE DELPHI8_UP}
{$DEFINE DELPHI9_UP}
{$DEFINE DELPHI10_UP}
{$DEFINE DELPHI11_UP}
{$DEFINE DELPHI12_UP}
{$DEFINE DELPHI14_UP}
{$DEFINE DELPHI15_UP}
{$DEFINE DELPHI16_UP}
{$DEFINE DELPHI17_UP}
{$DEFINE DELPHI18_UP}
{$DEFINE DELPHI19_UP}
{$DEFINE DELPHI20_UP}
{$DEFINE DELPHI21_UP}
{$DEFINE DELPHI22_UP}
{$DEFINE DELPHI23_UP}
{$DEFINE DELPHI24_UP}
{$DEFINE DELPHI25_UP}
{$ENDIF}
{$IFDEF DELPHI9_UP}
{$DEFINE SUPPORTS_INLINE}
{$ENDIF}

View File

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

BIN
packages/chromium.dcr Normal file

Binary file not shown.

9
packages/chromium.rc Normal file
View File

@ -0,0 +1,9 @@
TChromium BITMAP "chromium.bmp"
TFMXChromium BITMAP "chromium.bmp"
TCEFWindowParent BITMAP "windowparent.bmp"
TChromiumWindow BITMAP "chromiumwindow.bmp"
TBufferPanel BITMAP "bufferpanel.bmp"
TFMXBufferPanel BITMAP "bufferpanel.bmp"
TCEFWorkScheduler BITMAP "workscheduler.bmp"
TFMXWorkScheduler BITMAP "workscheduler.bmp"
TCEFServerComponent BITMAP "server.bmp"

BIN
packages/chromiumwindow.bmp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

BIN
packages/server.bmp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

BIN
packages/windowparent.bmp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

BIN
packages/workscheduler.bmp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

@ -1,169 +0,0 @@
package CEF4Delphi;
{$R *.res}
{$IFDEF IMPLICITBUILDING This IFDEF should not be used by users}
{$ALIGN 8}
{$ASSERTIONS ON}
{$BOOLEVAL OFF}
{$DEBUGINFO OFF}
{$EXTENDEDSYNTAX ON}
{$IMPORTEDDATA ON}
{$IOCHECKS ON}
{$LOCALSYMBOLS ON}
{$LONGSTRINGS ON}
{$OPENSTRINGS ON}
{$OPTIMIZATION OFF}
{$OVERFLOWCHECKS OFF}
{$RANGECHECKS OFF}
{$REFERENCEINFO ON}
{$SAFEDIVIDE OFF}
{$STACKFRAMES ON}
{$TYPEDADDRESS OFF}
{$VARSTRINGCHECKS ON}
{$WRITEABLECONST OFF}
{$MINENUMSIZE 1}
{$IMAGEBASE $400000}
{$DEFINE DEBUG}
{$ENDIF IMPLICITBUILDING}
{$DESCRIPTION 'CEF4Delphi'}
{$IMPLICITBUILD OFF}
requires
rtl,
vcl;
contains
uCEFRegisterComponents in 'uCEFRegisterComponents.pas',
uCEFFindHandler in 'uCEFFindHandler.pas',
uCEFConstants in 'uCEFConstants.pas',
uCEFTypes in 'uCEFTypes.pas',
uCEFInterfaces in 'uCEFInterfaces.pas',
uCEFMiscFunctions in 'uCEFMiscFunctions.pas',
uCEFLibFunctions in 'uCEFLibFunctions.pas',
uCEFApplication in 'uCEFApplication.pas',
uCEFSchemeRegistrar in 'uCEFSchemeRegistrar.pas',
uCEFCommandLine in 'uCEFCommandLine.pas',
uCEFClient in 'uCEFClient.pas',
uCEFProcessMessage in 'uCEFProcessMessage.pas',
uCEFBrowser in 'uCEFBrowser.pas',
uCEFListValue in 'uCEFListValue.pas',
uCEFBinaryValue in 'uCEFBinaryValue.pas',
uCEFValue in 'uCEFValue.pas',
uCEFDictionaryValue in 'uCEFDictionaryValue.pas',
uCEFDownloadImageCallBack in 'uCEFDownloadImageCallBack.pas',
uCEFFrame in 'uCEFFrame.pas',
uCEFPDFPrintCallback in 'uCEFPDFPrintCallback.pas',
uCEFRunFileDialogCallback in 'uCEFRunFileDialogCallback.pas',
uCEFRequestContext in 'uCEFRequestContext.pas',
uCEFNavigationEntryVisitor in 'uCEFNavigationEntryVisitor.pas',
uCEFStringVisitor in 'uCEFStringVisitor.pas',
uCEFv8Context in 'uCEFv8Context.pas',
uCEFDomVisitor in 'uCEFDomVisitor.pas',
uCEFNavigationEntry in 'uCEFNavigationEntry.pas',
uCEFCookieManager in 'uCEFCookieManager.pas',
uCEFCompletionCallback in 'uCEFCompletionCallback.pas',
uCEFRequestContextHandler in 'uCEFRequestContextHandler.pas',
uCEFWebPluginInfo in 'uCEFWebPluginInfo.pas',
uCEFDomDocument in 'uCEFDomDocument.pas',
uCEFDomNode in 'uCEFDomNode.pas',
uCEFv8Value in 'uCEFv8Value.pas',
uCEFv8Accessor in 'uCEFv8Accessor.pas',
uCEFLoadHandler in 'uCEFLoadHandler.pas',
uCEFFocusHandler in 'uCEFFocusHandler.pas',
uCEFContextMenuHandler in 'uCEFContextMenuHandler.pas',
uCEFDialogHandler in 'uCEFDialogHandler.pas',
uCEFKeyboardHandler in 'uCEFKeyboardHandler.pas',
uCEFDisplayHandler in 'uCEFDisplayHandler.pas',
uCEFDownloadHandler in 'uCEFDownloadHandler.pas',
uCEFGeolocationHandler in 'uCEFGeolocationHandler.pas',
uCEFJsDialogHandler in 'uCEFJsDialogHandler.pas',
uCEFLifeSpanHandler in 'uCEFLifeSpanHandler.pas',
uCEFRequestHandler in 'uCEFRequestHandler.pas',
uCEFRenderHandler in 'uCEFRenderHandler.pas',
uCEFDragHandler in 'uCEFDragHandler.pas',
uCEFPostData in 'uCEFPostData.pas',
uCEFPostDataElement in 'uCEFPostDataElement.pas',
uCEFRequest in 'uCEFRequest.pas',
uCEFStreamReader in 'uCEFStreamReader.pas',
uCEFWriteHandler in 'uCEFWriteHandler.pas',
uCEFStreamWriter in 'uCEFStreamWriter.pas',
uCEFv8StackFrame in 'uCEFv8StackFrame.pas',
uCEFv8StackTrace in 'uCEFv8StackTrace.pas',
uCEFv8Handler in 'uCEFv8Handler.pas',
uCEFRequestCallback in 'uCEFRequestCallback.pas',
uCEFCustomStreamReader in 'uCEFCustomStreamReader.pas',
uCEFCallback in 'uCEFCallback.pas',
uCEFResourceHandler in 'uCEFResourceHandler.pas',
uCEFSchemeHandlerFactory in 'uCEFSchemeHandlerFactory.pas',
uCEFTask in 'uCEFTask.pas',
uCEFTaskRunner in 'uCEFTaskRunner.pas',
uCEFStringMap in 'uCEFStringMap.pas',
uCEFStringMultimap in 'uCEFStringMultimap.pas',
uCEFXmlReader in 'uCEFXmlReader.pas',
uCEFZipReader in 'uCEFZipReader.pas',
uCEFResponse in 'uCEFResponse.pas',
uCEFCookieVisitor in 'uCEFCookieVisitor.pas',
uCEFV8Exception in 'uCEFV8Exception.pas',
uCEFResourceBundleHandler in 'uCEFResourceBundleHandler.pas',
uCEFSetCookieCallback in 'uCEFSetCookieCallback.pas',
uCEFDeleteCookiesCallback in 'uCEFDeleteCookiesCallback.pas',
uCEFDownLoadItem in 'uCEFDownLoadItem.pas',
uCEFBeforeDownloadCallback in 'uCEFBeforeDownloadCallback.pas',
uCEFDownloadItemCallback in 'uCEFDownloadItemCallback.pas',
uCEFAuthCallback in 'uCEFAuthCallback.pas',
uCEFJsDialogCallback in 'uCEFJsDialogCallback.pas',
uCEFGeolocationCallback in 'uCEFGeolocationCallback.pas',
uCEFContextMenuParams in 'uCEFContextMenuParams.pas',
uCEFMenuModel in 'uCEFMenuModel.pas',
uCEFBrowserProcessHandler in 'uCEFBrowserProcessHandler.pas',
uCEFRenderProcessHandler in 'uCEFRenderProcessHandler.pas',
uCEFUrlrequestClient in 'uCEFUrlrequestClient.pas',
uCEFUrlRequest in 'uCEFUrlRequest.pas',
uCEFWebPluginInfoVisitor in 'uCEFWebPluginInfoVisitor.pas',
uCEFWebPluginUnstableCallback in 'uCEFWebPluginUnstableCallback.pas',
uCEFEndTracingCallback in 'uCEFEndTracingCallback.pas',
uCEFGetGeolocationCallback in 'uCEFGetGeolocationCallback.pas',
uCEFFileDialogCallback in 'uCEFFileDialogCallback.pas',
uCEFDragData in 'uCEFDragData.pas',
uCEFResolveCallback in 'uCEFResolveCallback.pas',
uCEFPrintSettings in 'uCEFPrintSettings.pas',
uCEFSslInfo in 'uCEFSslInfo.pas',
uCEFRunContextMenuCallback in 'uCEFRunContextMenuCallback.pas',
uCEFResourceBundle in 'uCEFResourceBundle.pas',
uCEFResponseFilter in 'uCEFResponseFilter.pas',
uCEFImage in 'uCEFImage.pas',
uCEFMenuModelDelegate in 'uCEFMenuModelDelegate.pas',
uCEFv8Types in 'uCEFv8Types.pas',
uCEFWindowParent in 'uCEFWindowParent.pas',
uCEFChromium in 'uCEFChromium.pas',
uCEFChromiumEvents in 'uCEFChromiumEvents.pas',
uCEFChromiumOptions in 'uCEFChromiumOptions.pas',
uCEFChromiumFontOptions in 'uCEFChromiumFontOptions.pas',
uCEFPDFPrintOptions in 'uCEFPDFPrintOptions.pas',
uCEFRegisterCDMCallback in 'uCEFRegisterCDMCallback.pas',
uCEFThread in 'uCEFThread.pas',
uCEFv8Interceptor in 'uCEFv8Interceptor.pas',
uCEFWaitableEvent in 'uCEFWaitableEvent.pas',
uCEFX509CertPrincipal in 'uCEFX509CertPrincipal.pas',
uCEFX509Certificate in 'uCEFX509Certificate.pas',
uCEFSSLStatus in 'uCEFSSLStatus.pas',
uCEFSelectClientCertificateCallback in 'uCEFSelectClientCertificateCallback.pas',
uCEFChromiumWindow in 'uCEFChromiumWindow.pas',
uCEFBaseRefCounted in 'uCEFBaseRefCounted.pas',
uCEFBaseScopedWrapper in 'uCEFBaseScopedWrapper.pas',
uCEFAccessibilityHandler in 'uCEFAccessibilityHandler.pas',
uOLEDragAndDrop in 'uOLEDragAndDrop.pas',
uCEFDragAndDropMgr in 'uCEFDragAndDropMgr.pas',
uCEFGetExtensionResourceCallback in 'uCEFGetExtensionResourceCallback.pas',
uCEFExtension in 'uCEFExtension.pas',
uCEFExtensionHandler in 'uCEFExtensionHandler.pas',
uBufferPanel in 'uBufferPanel.pas',
uCEFApp in 'uCEFApp.pas',
uCEFWorkScheduler in 'uCEFWorkScheduler.pas',
uCEFServer in 'uCEFServer.pas',
uCEFServerHandler in 'uCEFServerHandler.pas',
uCEFServerEvents in 'uCEFServerEvents.pas',
uCEFServerComponent in 'uCEFServerComponent.pas';
end.

View File

@ -1,165 +0,0 @@
package CEF4Delphi_D7;
{$R *.res}
{$ALIGN 8}
{$ASSERTIONS ON}
{$BOOLEVAL OFF}
{$DEBUGINFO OFF}
{$EXTENDEDSYNTAX ON}
{$IMPORTEDDATA ON}
{$IOCHECKS ON}
{$LOCALSYMBOLS ON}
{$LONGSTRINGS ON}
{$OPENSTRINGS ON}
{$OPTIMIZATION OFF}
{$OVERFLOWCHECKS OFF}
{$RANGECHECKS OFF}
{$REFERENCEINFO ON}
{$SAFEDIVIDE OFF}
{$STACKFRAMES ON}
{$TYPEDADDRESS OFF}
{$VARSTRINGCHECKS ON}
{$WRITEABLECONST OFF}
{$MINENUMSIZE 1}
{$IMAGEBASE $400000}
{$DESCRIPTION 'CEF4Delphi'}
{$IMPLICITBUILD OFF}
{$DEFINE DEBUG}
requires
rtl,
vcl;
contains
uCEFRegisterComponents in 'uCEFRegisterComponents.pas',
uCEFFindHandler in 'uCEFFindHandler.pas',
uCEFConstants in 'uCEFConstants.pas',
uCEFTypes in 'uCEFTypes.pas',
uCEFInterfaces in 'uCEFInterfaces.pas',
uCEFMiscFunctions in 'uCEFMiscFunctions.pas',
uCEFLibFunctions in 'uCEFLibFunctions.pas',
uCEFApplication in 'uCEFApplication.pas',
uCEFSchemeRegistrar in 'uCEFSchemeRegistrar.pas',
uCEFCommandLine in 'uCEFCommandLine.pas',
uCEFClient in 'uCEFClient.pas',
uCEFProcessMessage in 'uCEFProcessMessage.pas',
uCEFBrowser in 'uCEFBrowser.pas',
uCEFListValue in 'uCEFListValue.pas',
uCEFBinaryValue in 'uCEFBinaryValue.pas',
uCEFValue in 'uCEFValue.pas',
uCEFDictionaryValue in 'uCEFDictionaryValue.pas',
uCEFDownloadImageCallBack in 'uCEFDownloadImageCallBack.pas',
uCEFFrame in 'uCEFFrame.pas',
uCEFPDFPrintCallback in 'uCEFPDFPrintCallback.pas',
uCEFRunFileDialogCallback in 'uCEFRunFileDialogCallback.pas',
uCEFRequestContext in 'uCEFRequestContext.pas',
uCEFNavigationEntryVisitor in 'uCEFNavigationEntryVisitor.pas',
uCEFStringVisitor in 'uCEFStringVisitor.pas',
uCEFv8Context in 'uCEFv8Context.pas',
uCEFDomVisitor in 'uCEFDomVisitor.pas',
uCEFNavigationEntry in 'uCEFNavigationEntry.pas',
uCEFCookieManager in 'uCEFCookieManager.pas',
uCEFCompletionCallback in 'uCEFCompletionCallback.pas',
uCEFRequestContextHandler in 'uCEFRequestContextHandler.pas',
uCEFWebPluginInfo in 'uCEFWebPluginInfo.pas',
uCEFDomDocument in 'uCEFDomDocument.pas',
uCEFDomNode in 'uCEFDomNode.pas',
uCEFv8Value in 'uCEFv8Value.pas',
uCEFv8Accessor in 'uCEFv8Accessor.pas',
uCEFLoadHandler in 'uCEFLoadHandler.pas',
uCEFFocusHandler in 'uCEFFocusHandler.pas',
uCEFContextMenuHandler in 'uCEFContextMenuHandler.pas',
uCEFDialogHandler in 'uCEFDialogHandler.pas',
uCEFKeyboardHandler in 'uCEFKeyboardHandler.pas',
uCEFDisplayHandler in 'uCEFDisplayHandler.pas',
uCEFDownloadHandler in 'uCEFDownloadHandler.pas',
uCEFGeolocationHandler in 'uCEFGeolocationHandler.pas',
uCEFJsDialogHandler in 'uCEFJsDialogHandler.pas',
uCEFLifeSpanHandler in 'uCEFLifeSpanHandler.pas',
uCEFRequestHandler in 'uCEFRequestHandler.pas',
uCEFRenderHandler in 'uCEFRenderHandler.pas',
uCEFDragHandler in 'uCEFDragHandler.pas',
uCEFPostData in 'uCEFPostData.pas',
uCEFPostDataElement in 'uCEFPostDataElement.pas',
uCEFRequest in 'uCEFRequest.pas',
uCEFStreamReader in 'uCEFStreamReader.pas',
uCEFWriteHandler in 'uCEFWriteHandler.pas',
uCEFStreamWriter in 'uCEFStreamWriter.pas',
uCEFv8StackFrame in 'uCEFv8StackFrame.pas',
uCEFv8StackTrace in 'uCEFv8StackTrace.pas',
uCEFv8Handler in 'uCEFv8Handler.pas',
uCEFRequestCallback in 'uCEFRequestCallback.pas',
uCEFCustomStreamReader in 'uCEFCustomStreamReader.pas',
uCEFCallback in 'uCEFCallback.pas',
uCEFResourceHandler in 'uCEFResourceHandler.pas',
uCEFSchemeHandlerFactory in 'uCEFSchemeHandlerFactory.pas',
uCEFTask in 'uCEFTask.pas',
uCEFTaskRunner in 'uCEFTaskRunner.pas',
uCEFStringMap in 'uCEFStringMap.pas',
uCEFStringMultimap in 'uCEFStringMultimap.pas',
uCEFXmlReader in 'uCEFXmlReader.pas',
uCEFZipReader in 'uCEFZipReader.pas',
uCEFResponse in 'uCEFResponse.pas',
uCEFCookieVisitor in 'uCEFCookieVisitor.pas',
uCEFV8Exception in 'uCEFV8Exception.pas',
uCEFResourceBundleHandler in 'uCEFResourceBundleHandler.pas',
uCEFSetCookieCallback in 'uCEFSetCookieCallback.pas',
uCEFDeleteCookiesCallback in 'uCEFDeleteCookiesCallback.pas',
uCEFDownLoadItem in 'uCEFDownLoadItem.pas',
uCEFBeforeDownloadCallback in 'uCEFBeforeDownloadCallback.pas',
uCEFDownloadItemCallback in 'uCEFDownloadItemCallback.pas',
uCEFAuthCallback in 'uCEFAuthCallback.pas',
uCEFJsDialogCallback in 'uCEFJsDialogCallback.pas',
uCEFGeolocationCallback in 'uCEFGeolocationCallback.pas',
uCEFContextMenuParams in 'uCEFContextMenuParams.pas',
uCEFMenuModel in 'uCEFMenuModel.pas',
uCEFBrowserProcessHandler in 'uCEFBrowserProcessHandler.pas',
uCEFRenderProcessHandler in 'uCEFRenderProcessHandler.pas',
uCEFUrlrequestClient in 'uCEFUrlrequestClient.pas',
uCEFUrlRequest in 'uCEFUrlRequest.pas',
uCEFWebPluginInfoVisitor in 'uCEFWebPluginInfoVisitor.pas',
uCEFWebPluginUnstableCallback in 'uCEFWebPluginUnstableCallback.pas',
uCEFEndTracingCallback in 'uCEFEndTracingCallback.pas',
uCEFGetGeolocationCallback in 'uCEFGetGeolocationCallback.pas',
uCEFFileDialogCallback in 'uCEFFileDialogCallback.pas',
uCEFDragData in 'uCEFDragData.pas',
uCEFResolveCallback in 'uCEFResolveCallback.pas',
uCEFPrintSettings in 'uCEFPrintSettings.pas',
uCEFSslInfo in 'uCEFSslInfo.pas',
uCEFRunContextMenuCallback in 'uCEFRunContextMenuCallback.pas',
uCEFResourceBundle in 'uCEFResourceBundle.pas',
uCEFResponseFilter in 'uCEFResponseFilter.pas',
uCEFImage in 'uCEFImage.pas',
uCEFMenuModelDelegate in 'uCEFMenuModelDelegate.pas',
uCEFv8Types in 'uCEFv8Types.pas',
uCEFWindowParent in 'uCEFWindowParent.pas',
uCEFChromium in 'uCEFChromium.pas',
uCEFChromiumEvents in 'uCEFChromiumEvents.pas',
uCEFChromiumOptions in 'uCEFChromiumOptions.pas',
uCEFChromiumFontOptions in 'uCEFChromiumFontOptions.pas',
uCEFPDFPrintOptions in 'uCEFPDFPrintOptions.pas',
uCEFRegisterCDMCallback in 'uCEFRegisterCDMCallback.pas',
uCEFThread in 'uCEFThread.pas',
uCEFv8Interceptor in 'uCEFv8Interceptor.pas',
uCEFWaitableEvent in 'uCEFWaitableEvent.pas',
uCEFX509CertPrincipal in 'uCEFX509CertPrincipal.pas',
uCEFX509Certificate in 'uCEFX509Certificate.pas',
uCEFSSLStatus in 'uCEFSSLStatus.pas',
uCEFSelectClientCertificateCallback in 'uCEFSelectClientCertificateCallback.pas',
uCEFChromiumWindow in 'uCEFChromiumWindow.pas',
uCEFBaseRefCounted in 'uCEFBaseRefCounted.pas',
uCEFBaseScopedWrapper in 'uCEFBaseScopedWrapper.pas',
uCEFDragAndDropMgr in 'uCEFDragAndDropMgr.pas',
uOLEDragAndDrop in 'uOLEDragAndDrop.pas',
uCEFGetExtensionResourceCallback in 'uCEFGetExtensionResourceCallback.pas',
uCEFExtension in 'uCEFExtension.pas',
uCEFExtensionHandler in 'uCEFExtensionHandler.pas',
uBufferPanel in 'uBufferPanel.pas',
uCEFApp in 'uCEFApp.pas',
uCEFWorkScheduler in 'uCEFWorkScheduler.pas',
uCEFServer in 'uCEFServer.pas',
uCEFServerHandler in 'uCEFServerHandler.pas',
uCEFServerEvents in 'uCEFServerEvents.pas',
uCEFServerComponent in 'uCEFServerComponent.pas';
end.

Binary file not shown.

Binary file not shown.

View File

@ -1,2 +0,0 @@
TChromium BITMAP "chromium.bmp"
TChromiumWindow BITMAP "chromium.bmp"

View File

@ -57,9 +57,9 @@ type
FBuffer : TBitmap;
FScanlineSize : integer;
procedure CreateBufferMutex;
procedure CreateSyncObj;
procedure DestroyBufferMutex;
procedure DestroySyncObj;
procedure DestroyBuffer;
function GetBufferBits : pointer;
@ -192,7 +192,7 @@ end;
destructor TBufferPanel.Destroy;
begin
DestroyBuffer;
DestroyBufferMutex;
DestroySyncObj;
inherited Destroy;
end;
@ -201,15 +201,15 @@ procedure TBufferPanel.AfterConstruction;
begin
inherited AfterConstruction;
CreateBufferMutex;
CreateSyncObj;
end;
procedure TBufferPanel.CreateBufferMutex;
procedure TBufferPanel.CreateSyncObj;
begin
FMutex := CreateMutex(nil, False, nil);
end;
procedure TBufferPanel.DestroyBufferMutex;
procedure TBufferPanel.DestroySyncObj;
begin
if (FMutex <> 0) then
begin
@ -359,18 +359,35 @@ begin
end;
function TBufferPanel.BufferIsResized(aUseMutex : boolean) : boolean;
var
TempDevWidth, TempLogWidth, TempDevHeight, TempLogHeight : integer;
begin
Result := False;
if not(aUseMutex) or BeginBufferDraw then
begin
// CEF and Chromium use 'floor' to round the float values in Device <-> Logical unit conversions
// and Delphi uses MulDiv, which uses the bankers rounding, to resize the components in high DPI mode.
// This is the cause of slight differences in size between the buffer and the panel in some occasions.
if (GlobalCEFApp.DeviceScaleFactor = 1) then
begin
Result := (FBuffer <> nil) and
(FBuffer.Width = Width) and
(FBuffer.Height = Height);
end
else
begin
// CEF and Chromium use 'floor' to round the float values in Device <-> Logical unit conversions
// and Delphi uses MulDiv, which uses the bankers rounding, to resize the components in high DPI mode.
// This is the cause of slight differences in size between the buffer and the panel in some occasions.
Result := (FBuffer <> nil) and
(FBuffer.Width = LogicalToDevice(DeviceToLogical(Width, GlobalCEFApp.DeviceScaleFactor), GlobalCEFApp.DeviceScaleFactor)) and
(FBuffer.Height = LogicalToDevice(DeviceToLogical(Height, GlobalCEFApp.DeviceScaleFactor), GlobalCEFApp.DeviceScaleFactor));
TempLogWidth := DeviceToLogical(Width, GlobalCEFApp.DeviceScaleFactor);
TempLogHeight := DeviceToLogical(Height, GlobalCEFApp.DeviceScaleFactor);
TempDevWidth := LogicalToDevice(TempLogWidth, GlobalCEFApp.DeviceScaleFactor);
TempDevHeight := LogicalToDevice(TempLogHeight, GlobalCEFApp.DeviceScaleFactor);
Result := (FBuffer <> nil) and
(FBuffer.Width = TempDevWidth) and
(FBuffer.Height = TempDevHeight);
end;
if aUseMutex then EndBufferDraw;
end;

View File

@ -124,6 +124,7 @@ type
FSetCurrentDir : boolean;
FGlobalContextInitialized : boolean;
FSitePerProcess : boolean;
FDisableWebSecurity : boolean;
FChromeVersionInfo : TFileVersionInfo;
FLibHandle : THandle;
FOnRegisterCustomSchemes : TOnRegisterCustomSchemes;
@ -327,6 +328,7 @@ type
property EnableHighDPISupport : boolean read FEnableHighDPISupport write FEnableHighDPISupport;
property MuteAudio : boolean read FMuteAudio write FMuteAudio;
property SitePerProcess : boolean read FSitePerProcess write FSitePerProcess;
property DisableWebSecurity : boolean read FDisableWebSecurity write FDisableWebSecurity;
property ReRaiseExceptions : boolean read FReRaiseExceptions write FReRaiseExceptions;
property DeviceScaleFactor : single read FDeviceScaleFactor;
property CheckDevToolsResources : boolean read FCheckDevToolsResources write FCheckDevToolsResources;
@ -380,9 +382,9 @@ implementation
uses
{$IFDEF DELPHI16_UP}
System.Math, System.IOUtils, System.SysUtils, Vcl.Dialogs,
System.Math, System.IOUtils, System.SysUtils,
{$ELSE}
Math, {$IFDEF DELPHI14_UP}IOUtils,{$ENDIF} SysUtils, Dialogs,
Math, {$IFDEF DELPHI14_UP}IOUtils,{$ENDIF} SysUtils,
{$ENDIF}
uCEFLibFunctions, uCEFMiscFunctions, uCEFCommandLine, uCEFConstants,
uCEFSchemeHandlerFactory, uCEFCookieManager, uCEFApp,
@ -443,6 +445,7 @@ begin
FEnableHighDPISupport := False;
FMuteAudio := False;
FSitePerProcess := True;
FDisableWebSecurity := False;
FReRaiseExceptions := False;
FLibLoaded := False;
FShowMessageDlg := True;
@ -960,7 +963,12 @@ procedure TCefApplication.ShowErrorMessageDlg(const aError : string);
begin
OutputDebugMessage(aError);
if FShowMessageDlg then MessageDlg(aError, mtError, [mbOk], 0);
if FShowMessageDlg then
begin
{$IFDEF MSWINDOWS}
MessageBox(0, PChar(aError + #0), PChar('Error' + #0), MB_ICONERROR or MB_OK or MB_TOPMOST);
{$ENDIF}
end;
end;
function TCefApplication.ParseProcessType : TCefProcessType;
@ -1163,6 +1171,9 @@ begin
if FMuteAudio then
commandLine.AppendSwitch('--mute-audio');
if FDisableWebSecurity then
commandLine.AppendSwitch('--disable-web-security');
if FSitePerProcess then
commandLine.AppendSwitch('--site-per-process');

View File

@ -419,10 +419,25 @@ type
// ICefFindHandler
procedure doOnFindResult(const browser: ICefBrowser; identifier, count: Integer; const selectionRect: PCefRect; activeMatchOrdinal: Integer; finalUpdate: Boolean); virtual;
// Custom
procedure doCookiesDeleted(numDeleted : integer); virtual;
procedure doGetHTML(const aFrameName : ustring); overload;
procedure doGetHTML(const aFrame : ICefFrame); overload;
procedure doGetHTML(const aFrameIdentifier : int64); overload;
procedure doGetText(const aFrameName : ustring); overload;
procedure doGetText(const aFrame : ICefFrame); overload;
procedure doGetText(const aFrameIdentifier : int64); overload;
procedure doPdfPrintFinished(aResultOK : boolean); virtual;
procedure doTextResultAvailable(const aText : string); virtual;
procedure doUpdatePreferences; virtual;
function doSavePreferences : boolean; virtual;
procedure doResolvedHostAvailable(result: TCefErrorCode; const resolvedIps: TStrings); virtual;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure AfterConstruction; override;
procedure BeforeDestruction; override;
function CreateClientHandler(aIsOSR : boolean) : boolean; overload;
function CreateClientHandler(var aClient : ICefClient) : boolean; overload;
procedure CloseBrowser(aForceClose : boolean);
@ -432,21 +447,6 @@ type
procedure InitializeDragAndDrop(const aDropTargetCtrl : TWinControl);
procedure ShutdownDragAndDrop;
// Internal procedures.
// Only tasks, visitors or callbacks should use them in the right thread/process.
procedure Internal_CookiesDeleted(numDeleted : integer);
procedure Internal_GetHTML(const aFrameName : ustring); overload;
procedure Internal_GetHTML(const aFrame : ICefFrame); overload;
procedure Internal_GetHTML(const aFrameIdentifier : int64); overload;
procedure Internal_GetText(const aFrameName : ustring); overload;
procedure Internal_GetText(const aFrame : ICefFrame); overload;
procedure Internal_GetText(const aFrameIdentifier : int64); overload;
procedure Internal_PdfPrintFinished(aResultOK : boolean);
procedure Internal_TextResultAvailable(const aText : string);
procedure Internal_UpdatePreferences; virtual;
function Internal_SavePreferences : boolean;
procedure Internal_ResolvedHostAvailable(result: TCefErrorCode; const resolvedIps: TStrings);
procedure LoadURL(const aURL : ustring);
procedure LoadString(const aString : ustring; const aURL : ustring = '');
procedure LoadRequest(const aRequest: ICefRequest);
@ -774,12 +774,6 @@ begin
ClearBrowserReference;
DestroyClientHandler;
DestroyVisitor;
DestroyPDFPrintcb;
DestroyResolveHostcb;
DestroyCookiDeletercb;
if (FFontOptions <> nil) then FreeAndNil(FFontOptions);
if (FOptions <> nil) then FreeAndNil(FOptions);
if (FPDFPrintOptions <> nil) then FreeAndNil(FPDFPrintOptions);
@ -792,6 +786,17 @@ begin
end;
end;
procedure TChromium.BeforeDestruction;
begin
DestroyClientHandler;
DestroyVisitor;
DestroyPDFPrintcb;
DestroyResolveHostcb;
DestroyCookiDeletercb;
inherited BeforeDestruction;
end;
procedure TChromium.ClearBrowserReference;
begin
FBrowser := nil;
@ -800,47 +805,72 @@ end;
procedure TChromium.DestroyClientHandler;
begin
if (FHandler <> nil) then
begin
FHandler.InitializeVars;
FHandler := nil;
end;
try
if (FHandler <> nil) then
begin
FHandler.InitializeVars;
FHandler := nil;
end;
except
on e : exception do
if CustomExceptionHandler('TChromium.DestroyClientHandler', e) then raise;
end;
end;
procedure TChromium.DestroyVisitor;
begin
if (FVisitor <> nil) then
begin
FVisitor.InitializeVars;
FVisitor := nil;
end;
try
if (FVisitor <> nil) then
begin
FVisitor.InitializeVars;
FVisitor := nil;
end;
except
on e : exception do
if CustomExceptionHandler('TChromium.DestroyVisitor', e) then raise;
end;
end;
procedure TChromium.DestroyPDFPrintcb;
begin
if (FPDFPrintcb <> nil) then
begin
FPDFPrintcb.InitializeVars;
FPDFPrintcb := nil;
end;
try
if (FPDFPrintcb <> nil) then
begin
FPDFPrintcb.InitializeVars;
FPDFPrintcb := nil;
end;
except
on e : exception do
if CustomExceptionHandler('TChromium.DestroyPDFPrintcb', e) then raise;
end;
end;
procedure TChromium.DestroyResolveHostcb;
begin
if (FResolveHostcb <> nil) then
begin
FResolveHostcb.InitializeVars;
FResolveHostcb := nil;
end;
try
if (FResolveHostcb <> nil) then
begin
FResolveHostcb.InitializeVars;
FResolveHostcb := nil;
end;
except
on e : exception do
if CustomExceptionHandler('TChromium.DestroyResolveHostcb', e) then raise;
end;
end;
procedure TChromium.DestroyCookiDeletercb;
begin
if (FCookiDeletercb <> nil) then
begin
FCookiDeletercb.InitializeVars;
FCookiDeletercb := nil;
end;
try
if (FCookiDeletercb <> nil) then
begin
FCookiDeletercb.InitializeVars;
FCookiDeletercb := nil;
end;
except
on e : exception do
if CustomExceptionHandler('TChromium.DestroyCookiDeletercb', e) then raise;
end;
end;
procedure TChromium.AfterConstruction;
@ -1897,7 +1927,7 @@ begin
end;
end;
procedure TChromium.Internal_GetHTML(const aFrameName : ustring);
procedure TChromium.doGetHTML(const aFrameName : ustring);
var
TempFrame : ICefFrame;
begin
@ -1916,7 +1946,7 @@ begin
end;
end;
procedure TChromium.Internal_GetHTML(const aFrame : ICefFrame);
procedure TChromium.doGetHTML(const aFrame : ICefFrame);
begin
if Initialized and (aFrame <> nil) then
begin
@ -1925,7 +1955,7 @@ begin
end;
end;
procedure TChromium.Internal_GetHTML(const aFrameIdentifier : int64);
procedure TChromium.doGetHTML(const aFrameIdentifier : int64);
var
TempFrame : ICefFrame;
begin
@ -1944,7 +1974,7 @@ begin
end;
end;
procedure TChromium.Internal_GetText(const aFrameName : ustring);
procedure TChromium.doGetText(const aFrameName : ustring);
var
TempFrame : ICefFrame;
begin
@ -1963,7 +1993,7 @@ begin
end;
end;
procedure TChromium.Internal_GetText(const aFrame : ICefFrame);
procedure TChromium.doGetText(const aFrame : ICefFrame);
begin
if Initialized and (aFrame <> nil) then
begin
@ -1972,7 +2002,7 @@ begin
end;
end;
procedure TChromium.Internal_GetText(const aFrameIdentifier : int64);
procedure TChromium.doGetText(const aFrameIdentifier : int64);
var
TempFrame : ICefFrame;
begin
@ -2189,7 +2219,7 @@ begin
end;
end;
procedure TChromium.Internal_UpdatePreferences;
procedure TChromium.doUpdatePreferences;
begin
FUpdatePreferences := False;
@ -2609,7 +2639,7 @@ begin
end;
end;
function TChromium.Internal_SavePreferences : boolean;
function TChromium.doSavePreferences : boolean;
var
TempDict : ICefDictionaryValue;
TempPrefs : TStringList;
@ -2637,7 +2667,7 @@ begin
end;
end;
procedure TChromium.Internal_ResolvedHostAvailable(result: TCefErrorCode; const resolvedIps: TStrings);
procedure TChromium.doResolvedHostAvailable(result: TCefErrorCode; const resolvedIps: TStrings);
begin
if assigned(FOnResolvedHostAvailable) then FOnResolvedHostAvailable(self, result, resolvedIps);
end;
@ -2757,7 +2787,7 @@ begin
Result := (FCompHandle <> 0) and PostMessage(FCompHandle, aMsg, wParam, lParam);
end;
procedure TChromium.Internal_TextResultAvailable(const aText : string);
procedure TChromium.doTextResultAvailable(const aText : string);
begin
if assigned(FOnTextResultAvailable) then FOnTextResultAvailable(self, aText);
end;
@ -2815,12 +2845,12 @@ begin
end;
end;
procedure TChromium.Internal_CookiesDeleted(numDeleted : integer);
procedure TChromium.doCookiesDeleted(numDeleted : integer);
begin
if assigned(FOnCookiesDeleted) then FOnCookiesDeleted(self, numDeleted);
end;
procedure TChromium.Internal_PdfPrintFinished(aResultOK : boolean);
procedure TChromium.doPdfPrintFinished(aResultOK : boolean);
begin
if assigned(FOnPdfPrintFinished) then FOnPdfPrintFinished(self, aResultOK);
end;
@ -2912,7 +2942,7 @@ begin
if (FBrowser <> nil) then FBrowserId := FBrowser.Identifier;
end;
Internal_UpdatePreferences;
doUpdatePreferences;
FInitialized := (FBrowser <> nil) and (FBrowserId <> 0);
@ -2926,7 +2956,7 @@ function TChromium.doOnBeforeBrowse(const browser : ICefBrowser;
begin
Result := False;
if FUpdatePreferences then Internal_UpdatePreferences;
if FUpdatePreferences then doUpdatePreferences;
if Assigned(FOnBeforeBrowse) then FOnBeforeBrowse(Self, browser, frame, request, isRedirect, Result);
end;

View File

@ -366,10 +366,12 @@ const
CEF_DESTROY = WM_APP + $A06;
CEF_DOONBEFORECLOSE = WM_APP + $A07;
CEF_TIMER_MINIMUM = $0000000A;
CEF_TIMER_MAXIMUM = $7FFFFFFF;
CEF_TIMER_MAXDELAY = 1000 div 30; // 30fps
CEF_TIMER_DELAY_PLACEHOLDER = high(integer);
CEF_TIMER_FIRST_ID = high(cardinal) div 3; // A highly unlikely nIDEvent for our timers
CEF_TIMER_MINIMUM = $0000000A;
CEF_TIMER_MAXIMUM = $7FFFFFFF;
CEF_TIMER_MAXDELAY = 1000 div 30; // 30fps
CEF_TIMER_DEPLETEWORK_CYCLES = 10;
CEF_TIMER_DEPLETEWORK_DELAY = 50;
CEF4DELPHI_URL = 'https://github.com/salvadordf/CEF4Delphi';
CRLF = #13 + #10;

View File

@ -73,12 +73,12 @@ type
TCefCustomDeleteCookiesCallback = class(TCefDeleteCookiesCallbackOwn)
protected
FChromiumBrowser : TObject;
FChromiumBrowser : IChromiumEvents;
procedure OnComplete(numDeleted: Integer); override;
public
constructor Create(const aChromiumBrowser : TObject); reintroduce;
constructor Create(const aChromiumBrowser : IChromiumEvents); reintroduce;
destructor Destroy; override;
procedure InitializeVars; override;
end;
@ -86,7 +86,7 @@ type
implementation
uses
uCEFMiscFunctions, uCEFLibFunctions, uCEFChromium;
uCEFMiscFunctions, uCEFLibFunctions;
procedure cef_delete_cookie_callback_on_complete(self: PCefDeleteCookiesCallback; num_deleted: Integer); stdcall;
begin
@ -130,7 +130,7 @@ end;
// TCefCustomDeleteCookiesCallback
constructor TCefCustomDeleteCookiesCallback.Create(const aChromiumBrowser : TObject);
constructor TCefCustomDeleteCookiesCallback.Create(const aChromiumBrowser : IChromiumEvents);
begin
inherited Create;
@ -151,8 +151,7 @@ end;
procedure TCefCustomDeleteCookiesCallback.OnComplete(numDeleted: Integer);
begin
if (FChromiumBrowser <> nil) and (FChromiumBrowser is TChromium) then
TChromium(FChromiumBrowser).Internal_CookiesDeleted(numDeleted);
if (FChromiumBrowser <> nil) then FChromiumBrowser.doCookiesDeleted(numDeleted);
end;
end.

View File

@ -83,7 +83,7 @@ type
implementation
uses
uCEFMiscFunctions, uCEFLibFunctions, uCEFTypes, uCEFDomDocument, uCEFChromium;
uCEFMiscFunctions, uCEFLibFunctions, uCEFTypes, uCEFDomDocument;
procedure cef_dom_visitor_visite(self: PCefDomVisitor; document: PCefDomDocument); stdcall;
begin

View File

@ -1809,6 +1809,20 @@ type
// ICefFindHandler
procedure doOnFindResult(const browser: ICefBrowser; identifier, count: Integer; const selectionRect: PCefRect; activeMatchOrdinal: Integer; finalUpdate: Boolean);
// Custom
procedure doCookiesDeleted(numDeleted : integer);
procedure doGetHTML(const aFrameName : ustring); overload;
procedure doGetHTML(const aFrame : ICefFrame); overload;
procedure doGetHTML(const aFrameIdentifier : int64); overload;
procedure doGetText(const aFrameName : ustring); overload;
procedure doGetText(const aFrame : ICefFrame); overload;
procedure doGetText(const aFrameIdentifier : int64); overload;
procedure doPdfPrintFinished(aResultOK : boolean);
procedure doTextResultAvailable(const aText : string);
procedure doUpdatePreferences;
function doSavePreferences : boolean;
procedure doResolvedHostAvailable(result: TCefErrorCode; const resolvedIps: TStrings);
end;

View File

@ -74,12 +74,12 @@ type
TCefCustomPDFPrintCallBack = class(TCefPdfPrintCallbackOwn)
protected
FChromiumBrowser : TObject;
FChromiumBrowser : IChromiumEvents;
procedure OnPdfPrintFinished(const path: ustring; aResultOK : Boolean); override;
public
constructor Create(const aChromiumBrowser : TObject); reintroduce;
constructor Create(const aChromiumBrowser : IChromiumEvents); reintroduce;
destructor Destroy; override;
procedure InitializeVars; override;
end;
@ -87,7 +87,7 @@ type
implementation
uses
uCEFMiscFunctions, uCEFLibFunctions, uCEFChromium;
uCEFMiscFunctions, uCEFLibFunctions;
procedure cef_pdf_print_callback_on_pdf_print_finished(self: PCefPdfPrintCallback; const path: PCefString; ok: Integer); stdcall;
begin
@ -128,7 +128,7 @@ end;
// TCefCustomPDFPrintCallBack
constructor TCefCustomPDFPrintCallBack.Create(const aChromiumBrowser : TObject);
constructor TCefCustomPDFPrintCallBack.Create(const aChromiumBrowser : IChromiumEvents);
begin
inherited Create;
@ -149,8 +149,7 @@ end;
procedure TCefCustomPDFPrintCallBack.OnPdfPrintFinished(const path: ustring; aResultOK : Boolean);
begin
if (FChromiumBrowser <> nil) and (FChromiumBrowser is TChromium) then
TChromium(FChromiumBrowser).Internal_PdfPrintFinished(aResultOK);
if (FChromiumBrowser <> nil) then FChromiumBrowser.doPdfPrintFinished(aResultOK);
end;
end.

View File

@ -66,11 +66,11 @@ type
TCefCustomResolveCallback = class(TCefResolveCallbackOwn)
protected
FChromiumBrowser : TObject;
FChromiumBrowser : IChromiumEvents;
procedure OnResolveCompleted(result: TCefErrorCode; const resolvedIps: TStrings); override;
public
constructor Create(const aChromiumBrowser : TObject); reintroduce;
constructor Create(const aChromiumBrowser : IChromiumEvents); reintroduce;
destructor Destroy; override;
procedure InitializeVars; override;
end;
@ -78,7 +78,7 @@ type
implementation
uses
uCEFMiscFunctions, uCEFLibFunctions, uCEFChromium;
uCEFMiscFunctions, uCEFLibFunctions;
procedure cef_resolve_callback_on_resolve_completed(self: PCefResolveCallback;
result: TCefErrorCode;
@ -126,7 +126,7 @@ end;
// TCefCustomResolveCallback
constructor TCefCustomResolveCallback.Create(const aChromiumBrowser : TObject);
constructor TCefCustomResolveCallback.Create(const aChromiumBrowser : IChromiumEvents);
begin
inherited Create;
@ -147,8 +147,7 @@ end;
procedure TCefCustomResolveCallback.OnResolveCompleted(result: TCefErrorCode; const resolvedIps: TStrings);
begin
if (FChromiumBrowser <> nil) and (FChromiumBrowser is TChromium) then
TChromium(FChromiumBrowser).Internal_ResolvedHostAvailable(result, resolvedIps);
if (FChromiumBrowser <> nil) then FChromiumBrowser.doResolvedHostAvailable(result, resolvedIps);
end;
end.

View File

@ -71,12 +71,12 @@ type
TCustomCefStringVisitor = class(TCefStringVisitorOwn)
protected
FChromiumBrowser : TObject;
FChromiumBrowser : IChromiumEvents;
procedure Visit(const str: ustring); override;
public
constructor Create(const aChromiumBrowser : TObject); reintroduce;
constructor Create(const aChromiumBrowser : IChromiumEvents); reintroduce;
destructor Destroy; override;
procedure InitializeVars; override;
end;
@ -84,7 +84,7 @@ type
implementation
uses
uCEFMiscFunctions, uCEFLibFunctions, uCEFChromium;
uCEFMiscFunctions, uCEFLibFunctions;
procedure cef_string_visitor_visit(self: PCefStringVisitor; const str: PCefString); stdcall;
begin
@ -126,7 +126,7 @@ end;
// TCustomCefStringVisitor
constructor TCustomCefStringVisitor.Create(const aChromiumBrowser : TObject);
constructor TCustomCefStringVisitor.Create(const aChromiumBrowser : IChromiumEvents);
begin
inherited Create;
@ -147,8 +147,7 @@ end;
procedure TCustomCefStringVisitor.Visit(const str: ustring);
begin
if (FChromiumBrowser <> nil) and (FChromiumBrowser is TChromium) then
TChromium(FChromiumBrowser).Internal_TextResultAvailable(str);
if (FChromiumBrowser <> nil) then FChromiumBrowser.doTextResultAvailable(str);
end;
end.

View File

@ -82,7 +82,7 @@ type
TCefGetTextTask = class(TCefTaskOwn)
protected
FChromiumBrowser : TObject;
FChromiumBrowser : IChromiumEvents;
FFrameName : ustring;
FFrame : ICefFrame;
FFrameIdentifier : int64;
@ -90,9 +90,9 @@ type
procedure Execute; override;
public
constructor Create(const aChromiumBrowser : TObject; const aFrameName : ustring); reintroduce; overload;
constructor Create(const aChromiumBrowser : TObject; const aFrame : ICefFrame); reintroduce; overload;
constructor Create(const aChromiumBrowser : TObject; const aFrameIdentifier : int64); reintroduce; overload;
constructor Create(const aChromiumBrowser : IChromiumEvents; const aFrameName : ustring); reintroduce; overload;
constructor Create(const aChromiumBrowser : IChromiumEvents; const aFrame : ICefFrame); reintroduce; overload;
constructor Create(const aChromiumBrowser : IChromiumEvents; const aFrameIdentifier : int64); reintroduce; overload;
destructor Destroy; override;
end;
@ -103,28 +103,30 @@ type
TCefUpdatePrefsTask = class(TCefTaskOwn)
protected
FChromiumBrowser : TObject;
FChromiumBrowser : IChromiumEvents;
procedure Execute; override;
public
constructor Create(const aChromiumBrowser : TObject); reintroduce;
constructor Create(const aChromiumBrowser : IChromiumEvents); reintroduce;
destructor Destroy; override;
end;
TCefSavePrefsTask = class(TCefTaskOwn)
protected
FChromiumBrowser : TObject;
FChromiumBrowser : IChromiumEvents;
procedure Execute; override;
public
constructor Create(const aChromiumBrowser : TObject); reintroduce;
constructor Create(const aChromiumBrowser : IChromiumEvents); reintroduce;
destructor Destroy; override;
end;
implementation
uses
uCEFMiscFunctions, uCEFLibFunctions, uCEFChromium, uCEFCookieManager;
uCEFMiscFunctions, uCEFLibFunctions, uCEFCookieManager;
procedure cef_task_execute(self: PCefTask); stdcall;
begin
@ -189,7 +191,7 @@ end;
// TCefGetTextTask
constructor TCefGetTextTask.Create(const aChromiumBrowser : TObject; const aFrameName : ustring);
constructor TCefGetTextTask.Create(const aChromiumBrowser : IChromiumEvents; const aFrameName : ustring);
begin
inherited Create;
@ -199,7 +201,7 @@ begin
FFrameIdentifier := 0;
end;
constructor TCefGetTextTask.Create(const aChromiumBrowser : TObject; const aFrame : ICefFrame);
constructor TCefGetTextTask.Create(const aChromiumBrowser : IChromiumEvents; const aFrame : ICefFrame);
begin
inherited Create;
@ -209,7 +211,7 @@ begin
FFrameIdentifier := 0;
end;
constructor TCefGetTextTask.Create(const aChromiumBrowser : TObject; const aFrameIdentifier : int64);
constructor TCefGetTextTask.Create(const aChromiumBrowser : IChromiumEvents; const aFrameIdentifier : int64);
begin
inherited Create;
@ -221,22 +223,23 @@ end;
destructor TCefGetTextTask.Destroy;
begin
FFrame := nil;
FChromiumBrowser := nil;
FFrame := nil;
inherited Destroy;
end;
procedure TCefGetTextTask.Execute;
begin
if (FChromiumBrowser <> nil) and (FChromiumBrowser is TChromium) then
if (FChromiumBrowser <> nil) then
begin
if (FFrame <> nil) then
TChromium(FChromiumBrowser).Internal_GetText(FFrame)
FChromiumBrowser.doGetText(FFrame)
else
if (FFrameIdentifier <> 0) then
TChromium(FChromiumBrowser).Internal_GetText(FFrameIdentifier)
FChromiumBrowser.doGetText(FFrameIdentifier)
else
TChromium(FChromiumBrowser).Internal_GetText(FFrameName);
FChromiumBrowser.doGetText(FFrameName);
end;
end;
@ -245,15 +248,15 @@ end;
procedure TCefGetHTMLTask.Execute;
begin
if (FChromiumBrowser <> nil) and (FChromiumBrowser is TChromium) then
if (FChromiumBrowser <> nil) then
begin
if (FFrame <> nil) then
TChromium(FChromiumBrowser).Internal_GetHTML(FFrame)
FChromiumBrowser.doGetHTML(FFrame)
else
if (FFrameIdentifier <> 0) then
TChromium(FChromiumBrowser).Internal_GetHTML(FFrameIdentifier)
FChromiumBrowser.doGetHTML(FFrameIdentifier)
else
TChromium(FChromiumBrowser).Internal_GetHTML(FFrameName);
FChromiumBrowser.doGetHTML(FFrameName);
end;
end;
@ -261,34 +264,46 @@ end;
// TCefUpdatePrefsTask
constructor TCefUpdatePrefsTask.Create(const aChromiumBrowser : TObject);
constructor TCefUpdatePrefsTask.Create(const aChromiumBrowser : IChromiumEvents);
begin
inherited Create;
FChromiumBrowser := aChromiumBrowser;
end;
destructor TCefUpdatePrefsTask.Destroy;
begin
FChromiumBrowser := nil;
inherited Destroy;
end;
procedure TCefUpdatePrefsTask.Execute;
begin
if (FChromiumBrowser <> nil) and (FChromiumBrowser is TChromium) then
TChromium(FChromiumBrowser).Internal_UpdatePreferences;
if (FChromiumBrowser <> nil) then FChromiumBrowser.doUpdatePreferences;
end;
// TCefSavePrefsTask
constructor TCefSavePrefsTask.Create(const aChromiumBrowser : TObject);
constructor TCefSavePrefsTask.Create(const aChromiumBrowser : IChromiumEvents);
begin
inherited Create;
FChromiumBrowser := aChromiumBrowser;
end;
destructor TCefSavePrefsTask.Destroy;
begin
FChromiumBrowser := nil;
inherited Destroy;
end;
procedure TCefSavePrefsTask.Execute;
begin
if (FChromiumBrowser <> nil) and (FChromiumBrowser is TChromium) then
TChromium(FChromiumBrowser).Internal_SavePreferences;
if (FChromiumBrowser <> nil) then FChromiumBrowser.doSavePreferences;
end;
end.

View File

@ -52,35 +52,41 @@ uses
{$ELSE}
Windows, Messages, Classes, Controls, Graphics, Forms,
{$ENDIF}
uCEFTypes, uCEFInterfaces, uCEFLibFunctions, uCEFMiscFunctions, uCEFConstants;
const
TIMER_NIDEVENT = 1;
TIMER_DEPLETEWORK_CYCLES = 10;
TIMER_DEPLETEWORK_DELAY = 50;
uCEFConstants, uCEFWorkSchedulerThread;
type
TCEFWorkScheduler = class(TComponent)
protected
FCompHandle : HWND;
FThread : TCEFWorkSchedulerThread;
FDepleteWorkCycles : cardinal;
FDepleteWorkDelay : cardinal;
FTimerPending : boolean;
FIsActive : boolean;
FReentrancyDetected : boolean;
FDefaultInterval : integer;
FStopped : boolean;
{$IFDEF MSWINDOWS}
{$WARN SYMBOL_PLATFORM OFF}
FPriority : TThreadPriority;
{$WARN SYMBOL_PLATFORM ON}
{$ENDIF}
procedure WndProc(var aMessage: TMessage);
function SendCompMessage(aMsg, wParam : cardinal; lParam : integer) : boolean;
procedure CreateTimer(const delay_ms : int64);
procedure TimerTimeout;
procedure DoWork;
procedure ScheduleWork(const delay_ms : int64);
procedure DoMessageLoopWork;
function PerformMessageLoopWork : boolean;
procedure DestroyTimer;
procedure CreateThread;
procedure DestroyThread;
procedure DeallocateWindowHandle;
procedure DepleteWork;
procedure WndProc(var aMessage: TMessage);
procedure NextPulse(aInterval : integer);
procedure ScheduleWork(const delay_ms : int64);
procedure DoWork;
procedure DoMessageLoopWork;
procedure SetDefaultInterval(aValue : integer);
{$IFDEF MSWINDOWS}
{$WARN SYMBOL_PLATFORM OFF}
procedure SetPriority(aValue : TThreadPriority);
{$WARN SYMBOL_PLATFORM ON}
{$ENDIF}
procedure Thread_OnPulse(Sender : TObject);
public
constructor Create(AOwner: TComponent); override;
@ -89,11 +95,15 @@ type
procedure ScheduleMessagePumpWork(const delay_ms : int64);
procedure StopScheduler;
property IsTimerPending : boolean read FTimerPending;
published
property DepleteWorkCycles : cardinal read FDepleteWorkCycles write FDepleteWorkCycles default TIMER_DEPLETEWORK_CYCLES;
property DepleteWorkDelay : cardinal read FDepleteWorkDelay write FDepleteWorkDelay default TIMER_DEPLETEWORK_DELAY;
{$IFDEF MSWINDOWS}
{$WARN SYMBOL_PLATFORM OFF}
property Priority : TThreadPriority read FPriority write SetPriority default tpNormal;
{$WARN SYMBOL_PLATFORM ON}
{$ENDIF}
property DefaultInterval : integer read FDefaultInterval write SetDefaultInterval default CEF_TIMER_MAXDELAY;
property DepleteWorkCycles : cardinal read FDepleteWorkCycles write FDepleteWorkCycles default CEF_TIMER_DEPLETEWORK_CYCLES;
property DepleteWorkDelay : cardinal read FDepleteWorkDelay write FDepleteWorkDelay default CEF_TIMER_DEPLETEWORK_DELAY;
end;
implementation
@ -104,25 +114,29 @@ uses
{$ELSE}
SysUtils, Math,
{$ENDIF}
uCEFApplication;
uCEFMiscFunctions, uCEFApplication;
constructor TCEFWorkScheduler.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FThread := nil;
FCompHandle := 0;
FTimerPending := False;
FIsActive := False;
FReentrancyDetected := False;
FStopped := False;
FDepleteWorkCycles := TIMER_DEPLETEWORK_CYCLES;
FDepleteWorkDelay := TIMER_DEPLETEWORK_DELAY;
{$IFDEF MSWINDOWS}
{$WARN SYMBOL_PLATFORM OFF}
FPriority := tpNormal;
{$WARN SYMBOL_PLATFORM ON}
{$ENDIF}
FDefaultInterval := CEF_TIMER_MAXDELAY;
FDepleteWorkCycles := CEF_TIMER_DEPLETEWORK_CYCLES;
FDepleteWorkDelay := CEF_TIMER_DEPLETEWORK_DELAY;
end;
destructor TCEFWorkScheduler.Destroy;
begin
DestroyTimer;
DestroyThread;
DeallocateWindowHandle;
inherited Destroy;
@ -133,35 +147,49 @@ begin
inherited AfterConstruction;
if not(csDesigning in ComponentState) then
FCompHandle := AllocateHWnd(WndProc);
begin
FCompHandle := AllocateHWnd(WndProc);
CreateThread;
end;
end;
procedure TCEFWorkScheduler.CreateThread;
begin
FThread := TCEFWorkSchedulerThread.Create;
{$IFDEF MSWINDOWS}
FThread.Priority := FPriority;
{$ENDIF}
FThread.DefaultInterval := FDefaultInterval;
FThread.OnPulse := Thread_OnPulse;
{$IFDEF DELPHI8_UP}
FThread.Start;
{$ELSE}
FThread.Resume;
{$ENDIF}
end;
procedure TCEFWorkScheduler.DestroyThread;
begin
try
if (FThread <> nil) then
begin
FThread.Terminate;
FThread.NextPulse(0);
FThread.WaitFor;
FreeAndNil(FThread);
end;
except
on e : exception do
if CustomExceptionHandler('TCEFWorkScheduler.DestroyThread', e) then raise;
end;
end;
procedure TCEFWorkScheduler.WndProc(var aMessage: TMessage);
begin
case aMessage.Msg of
WM_TIMER : TimerTimeout;
CEF_PUMPHAVEWORK : ScheduleWork(aMessage.lParam);
else aMessage.Result := DefWindowProc(FCompHandle, aMessage.Msg, aMessage.WParam, aMessage.LParam);
end;
end;
function TCEFWorkScheduler.SendCompMessage(aMsg, wParam : cardinal; lParam : integer) : boolean;
begin
Result := not(FStopped) and (FCompHandle <> 0) and PostMessage(FCompHandle, aMsg, wParam, lParam);
end;
procedure TCEFWorkScheduler.CreateTimer(const delay_ms : int64);
begin
if not(FTimerPending) and
not(FStopped) and
(delay_ms > 0) and
(SetTimer(FCompHandle, TIMER_NIDEVENT, cardinal(delay_ms), nil) <> 0) then
FTimerPending := True;
end;
procedure TCEFWorkScheduler.DestroyTimer;
begin
if FTimerPending and KillTimer(FCompHandle, TIMER_NIDEVENT) then FTimerPending := False;
if (aMessage.Msg = CEF_PUMPHAVEWORK) then
ScheduleWork(aMessage.lParam)
else
aMessage.Result := DefWindowProc(FCompHandle, aMessage.Msg, aMessage.WParam, aMessage.LParam);
end;
procedure TCEFWorkScheduler.DeallocateWindowHandle;
@ -173,6 +201,27 @@ begin
end;
end;
procedure TCEFWorkScheduler.DoMessageLoopWork;
begin
if (GlobalCEFApp <> nil) then GlobalCEFApp.DoMessageLoopWork;
end;
procedure TCEFWorkScheduler.SetDefaultInterval(aValue : integer);
begin
FDefaultInterval := aValue;
if (FThread <> nil) then FThread.DefaultInterval := aValue;
end;
{$IFDEF MSWINDOWS}
{$WARN SYMBOL_PLATFORM OFF}
procedure TCEFWorkScheduler.SetPriority(aValue : TThreadPriority);
begin
FPriority := aValue;
if (FThread <> nil) then FThread.Priority := aValue;
end;
{$WARN SYMBOL_PLATFORM ON}
{$ENDIF}
procedure TCEFWorkScheduler.DepleteWork;
var
i : cardinal;
@ -189,78 +238,43 @@ end;
procedure TCEFWorkScheduler.ScheduleMessagePumpWork(const delay_ms : int64);
begin
SendCompMessage(CEF_PUMPHAVEWORK, 0, LPARAM(delay_ms));
if not(FStopped) and (FCompHandle <> 0) then
PostMessage(FCompHandle, CEF_PUMPHAVEWORK, 0, LPARAM(delay_ms));
end;
procedure TCEFWorkScheduler.StopScheduler;
begin
FStopped := True;
DestroyTimer;
NextPulse(0);
DepleteWork;
DeallocateWindowHandle;
end;
procedure TCEFWorkScheduler.TimerTimeout;
procedure TCEFWorkScheduler.Thread_OnPulse(Sender: TObject);
begin
if not(FStopped) then
begin
DestroyTimer;
DoWork;
end;
if not(FStopped) then DoMessageLoopWork;
end;
procedure TCEFWorkScheduler.DoWork;
var
TempWasReentrant : boolean;
begin
TempWasReentrant := PerformMessageLoopWork;
if TempWasReentrant then
ScheduleMessagePumpWork(0)
else
if not(IsTimerPending) then
ScheduleMessagePumpWork(CEF_TIMER_DELAY_PLACEHOLDER);
DoMessageLoopWork;
NextPulse(FDefaultInterval);
end;
procedure TCEFWorkScheduler.ScheduleWork(const delay_ms : int64);
begin
if FStopped or
((delay_ms = CEF_TIMER_DELAY_PLACEHOLDER) and IsTimerPending) then
exit;
DestroyTimer;
if (delay_ms <= 0) then
DoWork
else
if (delay_ms > CEF_TIMER_MAXDELAY) then
CreateTimer(CEF_TIMER_MAXDELAY)
else
CreateTimer(delay_ms);
end;
procedure TCEFWorkScheduler.DoMessageLoopWork;
begin
if (GlobalCEFApp <> nil) then GlobalCEFApp.DoMessageLoopWork;
end;
function TCEFWorkScheduler.PerformMessageLoopWork : boolean;
begin
Result := False;
if FIsActive then
if not(FStopped) then
begin
FReentrancyDetected := True;
exit;
if (delay_ms <= 0) then
DoWork
else
NextPulse(delay_ms);
end;
end;
FReentrancyDetected := False;
FIsActive := True;
DoMessageLoopWork;
FIsActive := False;
Result := FReentrancyDetected;
procedure TCEFWorkScheduler.NextPulse(aInterval : integer);
begin
if (FThread <> nil) then FThread.NextPulse(aInterval);
end;
end.

View File

@ -0,0 +1,222 @@
// ************************************************************************
// ***************************** CEF4Delphi *******************************
// ************************************************************************
//
// CEF4Delphi is based on DCEF3 which uses CEF3 to embed a chromium-based
// browser in Delphi applications.
//
// The original license of DCEF3 still applies to CEF4Delphi.
//
// 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.
//
// ************************************************************************
// ************ vvvv Original license and comments below vvvv *************
// ************************************************************************
(*
* Delphi Chromium Embedded 3
*
* Usage allowed under the restrictions of the Lesser GNU General Public License
* or alternatively the restrictions of the Mozilla Public License 1.1
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
* the specific language governing rights and limitations under the License.
*
* Unit owner : Henri Gourvest <hgourvest@gmail.com>
* Web site : http://www.progdigy.com
* Repository : http://code.google.com/p/delphichromiumembedded/
* Group : http://groups.google.com/group/delphichromiumembedded
*
* Embarcadero Technologies, Inc is not permitted to use or redistribute
* this source code without explicit permission.
*
*)
unit uCEFWorkSchedulerThread;
{$IFNDEF CPUX64}
{$ALIGN ON}
{$MINENUMSIZE 4}
{$ENDIF}
{$I cef.inc}
interface
uses
{$IFDEF DELPHI16_UP}
System.Classes, System.SyncObjs,
{$ELSE}
Classes, SyncObjs,
{$ENDIF}
uCEFConstants;
type
TCEFWorkSchedulerThread = class(TThread)
protected
FCritSect : TCriticalSection;
FInterval : integer;
FEvent : TEvent;
FOnPulse : TNotifyEvent;
FPulsing : boolean;
FMustReset : boolean;
FDefaultInterval : integer;
function Lock : boolean;
procedure Unlock;
function CanPulse(var aInterval : integer) : boolean;
procedure DoOnPulseEvent;
procedure EventTimeOut;
procedure SignaledEvent;
procedure Execute; override;
public
constructor Create;
destructor Destroy; override;
procedure AfterConstruction; override;
procedure NextPulse(aInterval : integer);
property DefaultInterval : integer read FDefaultInterval write FDefaultInterval default CEF_TIMER_MAXDELAY;
property OnPulse : TNotifyEvent read FOnPulse write FOnPulse;
end;
implementation
uses
{$IFDEF DELPHI16_UP}
System.SysUtils, System.Math,
{$ELSE}
SysUtils, Math,
{$ENDIF}
uCEFApplication;
constructor TCEFWorkSchedulerThread.Create;
begin
FOnPulse := nil;
FCritSect := nil;
FPulsing := False;
FEvent := nil;
FDefaultInterval := CEF_TIMER_MAXDELAY;
FInterval := FDefaultInterval;
FMustReset := False;
inherited Create(True);
FreeOnTerminate := False;
end;
destructor TCEFWorkSchedulerThread.Destroy;
begin
if (FEvent <> nil) then FreeAndNil(FEvent);
if (FCritSect <> nil) then FreeAndNil(FCritSect);
inherited Destroy;
end;
procedure TCEFWorkSchedulerThread.AfterConstruction;
begin
inherited AfterConstruction;
FEvent := TEvent.Create(nil, False, False, '');
FCritSect := TCriticalSection.Create;
end;
procedure TCEFWorkSchedulerThread.DoOnPulseEvent;
begin
if assigned(FOnPulse) then FOnPulse(self);
end;
function TCEFWorkSchedulerThread.Lock : boolean;
begin
if not(Terminated) and (FCritSect <> nil) then
begin
FCritSect.Acquire;
Result := True;
end
else
Result := False;
end;
procedure TCEFWorkSchedulerThread.Unlock;
begin
if (FCritSect <> nil) then FCritSect.Release;
end;
procedure TCEFWorkSchedulerThread.NextPulse(aInterval : integer);
begin
if Lock then
try
FInterval := min(aInterval, CEF_TIMER_MAXDELAY);
FMustReset := True;
if FPulsing then
begin
FPulsing := False;
FEvent.SetEvent;
end;
finally
Unlock;
end;
end;
procedure TCEFWorkSchedulerThread.EventTimeOut;
begin
if Lock then
try
if FMustReset then
begin
FInterval := FDefaultInterval;
FMustReset := False;
end;
FPulsing := False;
finally
Unlock;
if not(Terminated) then Synchronize(DoOnPulseEvent);
end;
end;
procedure TCEFWorkSchedulerThread.SignaledEvent;
begin
if Lock then
try
FPulsing := False;
finally
Unlock;
end;
end;
function TCEFWorkSchedulerThread.CanPulse(var aInterval : integer) : boolean;
begin
Result := False;
if Lock then
try
aInterval := FInterval;
if (aInterval > 0) then
begin
Result := True;
FPulsing := True;
FEvent.ResetEvent;
end;
finally
Unlock;
end;
end;
procedure TCEFWorkSchedulerThread.Execute;
var
TempInterval : integer;
begin
while CanPulse(TempInterval) do
if (FEvent.WaitFor(TempInterval) = wrTimeout) then
EventTimeOut
else
SignaledEvent;
end;
end.

426
source/uFMXBufferPanel.pas Normal file
View File

@ -0,0 +1,426 @@
// ************************************************************************
// ***************************** CEF4Delphi *******************************
// ************************************************************************
//
// CEF4Delphi is based on DCEF3 which uses CEF3 to embed a chromium-based
// browser in Delphi applications.
//
// The original license of DCEF3 still applies to CEF4Delphi.
//
// 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.
//
// ************************************************************************
// ************ vvvv Original license and comments below vvvv *************
// ************************************************************************
(*
* Delphi Chromium Embedded 3
*
* Usage allowed under the restrictions of the Lesser GNU General Public License
* or alternatively the restrictions of the Mozilla Public License 1.1
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
* the specific language governing rights and limitations under the License.
*
* Unit owner : Henri Gourvest <hgourvest@gmail.com>
* Web site : http://www.progdigy.com
* Repository : http://code.google.com/p/delphichromiumembedded/
* Group : http://groups.google.com/group/delphichromiumembedded
*
* Embarcadero Technologies, Inc is not permitted to use or redistribute
* this source code without explicit permission.
*
*)
unit uFMXBufferPanel;
{$I cef.inc}
interface
uses
{$IFDEF MSWINDOWS}
Winapi.Windows,
{$ELSE}
System.SyncObjs,
{$ENDIF}
System.Classes, System.UIConsts, System.Types, System.UITypes,
{$IFDEF DELPHI17_UP}
FMX.Graphics,
{$ENDIF}
FMX.Types, FMX.Controls;
type
TDialogKeyEvent = procedure(Sender: TObject; var Key: Word; Shift: TShiftState) of object;
TFMXBufferPanel = class(TControl)
protected
{$IFDEF MSWINDOWS}
FMutex : THandle;
{$ELSE}
FBufferCS : TCriticalSection;
{$ENDIF}
FBuffer : TBitmap;
FScanlineSize : integer;
FColor : TAlphaColor;
FHighSpeedDrawing : boolean;
FOnDialogKey : TDialogKeyEvent;
procedure CreateSyncObj;
procedure DestroySyncObj;
procedure DestroyBuffer;
function GetScreenScale : Single;
function GetBufferWidth : integer;
function GetBufferHeight : integer;
function CopyBuffer : boolean;
function SaveBufferToFile(const aFilename : string) : boolean;
procedure Paint; override;
procedure DialogKey(var Key: Word; Shift: TShiftState); override;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure AfterConstruction; override;
function SaveToFile(const aFilename : string) : boolean;
procedure InvalidatePanel;
function BeginBufferDraw : boolean;
procedure EndBufferDraw;
procedure BufferDraw(x, y : integer; const aBitmap : TBitmap);
function UpdateBufferDimensions(aWidth, aHeight : integer) : boolean;
function BufferIsResized(aUseMutex : boolean = True) : boolean;
function ScreenToClient(aPoint : TPoint) : TPoint;
function ClientToScreen(aPoint : TPoint) : TPoint;
property Buffer : TBitmap read FBuffer;
property ScanlineSize : integer read FScanlineSize;
property BufferWidth : integer read GetBufferWidth;
property BufferHeight : integer read GetBufferHeight;
property ScreenScale : single read GetScreenScale;
published
property Align;
property Anchors;
property Visible;
property Enabled;
property TabOrder;
property Color : TAlphaColor read FColor write FColor default claWhite;
property HighSpeedDrawing : boolean read FHighSpeedDrawing write FHighSpeedDrawing default True;
{$IFDEF DELPHI17_UP}
property TabStop;
property CanFocus;
property CanParentFocus;
property Height;
property Width;
property Padding;
property Opacity;
property Margins;
property Position;
property RotationAngle;
property RotationCenter;
property Scale;
property Size;
{$ENDIF}
property OnEnter;
property OnExit;
property OnResize;
property OnClick;
property OnMouseDown;
property OnMouseMove;
property OnMouseUp;
property OnMouseEnter;
property OnMouseLeave;
property OnMouseWheel;
property OnKeyUp;
property OnKeyDown;
property OnDialogKey : TDialogKeyEvent read FOnDialogKey write FOnDialogKey;
end;
implementation
uses
System.SysUtils, System.Math,
FMX.Platform, uCEFMiscFunctions, uCEFApplication;
constructor TFMXBufferPanel.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
{$IFDEF MSWINDOWS}
FMutex := 0;
{$ELSE}
FBufferCS := nil;
{$ENDIF}
FBuffer := nil;
FScanlineSize := 0;
FColor := claWhite;
FOnDialogKey := nil;
FHighSpeedDrawing := True;
end;
destructor TFMXBufferPanel.Destroy;
begin
DestroyBuffer;
DestroySyncObj;
inherited Destroy;
end;
procedure TFMXBufferPanel.AfterConstruction;
begin
inherited AfterConstruction;
CreateSyncObj;
end;
procedure TFMXBufferPanel.CreateSyncObj;
begin
{$IFDEF MSWINDOWS}
FMutex := CreateMutex(nil, False, nil);
{$ELSE}
FBufferCS := TCriticalSection.Create;
{$ENDIF}
end;
procedure TFMXBufferPanel.DestroySyncObj;
begin
{$IFDEF MSWINDOWS}
if (FMutex <> 0) then
begin
CloseHandle(FMutex);
FMutex := 0;
end;
{$ELSE}
if (FBufferCS <> nil) then FreeAndNil(FBufferCS);
{$ENDIF}
end;
procedure TFMXBufferPanel.DestroyBuffer;
begin
if BeginBufferDraw then
begin
if (FBuffer <> nil) then FreeAndNil(FBuffer);
EndBufferDraw;
end;
end;
function TFMXBufferPanel.SaveBufferToFile(const aFilename : string) : boolean;
begin
Result := False;
try
if (FBuffer <> nil) then
begin
FBuffer.SaveToFile(aFilename);
Result := True;
end;
except
on e : exception do
if CustomExceptionHandler('TFMXBufferPanel.SaveBufferToFile', e) then raise;
end;
end;
function TFMXBufferPanel.SaveToFile(const aFilename : string) : boolean;
begin
Result := False;
if BeginBufferDraw then
begin
Result := SaveBufferToFile(aFilename);
EndBufferDraw;
end;
end;
procedure TFMXBufferPanel.InvalidatePanel;
begin
InvalidateRect(TRectF.Create(0, 0, Width, Height));
end;
function TFMXBufferPanel.BeginBufferDraw : boolean;
begin
{$IFDEF MSWINDOWS}
Result := (FMutex <> 0) and (WaitForSingleObject(FMutex, 5000) = WAIT_OBJECT_0);
{$ELSE}
if (FBufferCS <> nil) then
begin
FBufferCS.Acquire;
Result := True;
end
else
Result := False;
{$ENDIF}
end;
procedure TFMXBufferPanel.EndBufferDraw;
begin
{$IFDEF MSWINDOWS}
if (FMutex <> 0) then ReleaseMutex(FMutex);
{$ELSE}
if (FBufferCS <> nil) then FBufferCS.Release;
{$ENDIF}
end;
function TFMXBufferPanel.CopyBuffer : boolean;
var
TempSrc, TempDst : TRectF;
begin
Result := False;
if Canvas.BeginScene then
try
if BeginBufferDraw then
begin
if (FBuffer <> nil) then
begin
TempSrc := TRectF.Create(0, 0, FBuffer.Width, FBuffer.Height);
TempDst := TRectF.Create(0, 0, FBuffer.Width / ScreenScale, FBuffer.Height / ScreenScale);
Canvas.DrawBitmap(FBuffer, TempSrc, TempDst, 1, FHighSpeedDrawing);
Result := True;
end;
EndBufferDraw;
end;
finally
Canvas.EndScene;
end;
end;
procedure TFMXBufferPanel.DialogKey(var Key: Word; Shift: TShiftState);
begin
if assigned(FOnDialogKey) then FOnDialogKey(self, Key, Shift);
inherited DialogKey(Key, Shift);
end;
procedure TFMXBufferPanel.Paint;
var
TempRect : TRectF;
begin
if (csDesigning in ComponentState) or not(CopyBuffer) then
begin
TempRect := TRectF.Create(0, 0, Width, Height);
if Canvas.BeginScene then
try
Canvas.ClearRect(TempRect, FColor);
finally
Canvas.EndScene;
end;
end;
end;
function TFMXBufferPanel.GetScreenScale : Single;
begin
if (GlobalCEFApp <> nil) then
Result := GlobalCEFApp.DeviceScaleFactor
else
Result := 1;
end;
function TFMXBufferPanel.GetBufferWidth : integer;
begin
if (FBuffer <> nil) then
Result := FBuffer.Width
else
Result := 0;
end;
function TFMXBufferPanel.GetBufferHeight : integer;
begin
if (FBuffer <> nil) then
Result := FBuffer.Height
else
Result := 0;
end;
procedure TFMXBufferPanel.BufferDraw(x, y : integer; const aBitmap : TBitmap);
var
TempSrc, TempDst : TRectF;
begin
if (FBuffer <> nil) then
begin
TempSrc := TRectF.Create(0, 0, aBitmap.Width, aBitmap.Height);
TempDst := TRectF.Create(x, y, x + (aBitmap.Width / ScreenScale), y + (aBitmap.Height / ScreenScale));
if FBuffer.Canvas.BeginScene then
try
FBuffer.Canvas.DrawBitmap(aBitmap, TempSrc, TempDst, 1, FHighSpeedDrawing);
finally
FBuffer.Canvas.EndScene;
end;
end;
end;
function TFMXBufferPanel.UpdateBufferDimensions(aWidth, aHeight : integer) : boolean;
begin
Result := False;
if ((FBuffer = nil) or
(FBuffer.Width <> aWidth) or
(FBuffer.Height <> aHeight)) then
begin
if (FBuffer <> nil) then FreeAndNil(FBuffer);
FBuffer := TBitmap.Create(aWidth, aHeight);
{$IFDEF DELPHI17_UP}
FBuffer.BitmapScale := ScreenScale;
FScanlineSize := FBuffer.BytesPerLine;
{$ELSE}
FScanlineSize := aWidth * SizeOf(TRGBQuad);
{$ENDIF}
Result := True;
end;
end;
function TFMXBufferPanel.BufferIsResized(aUseMutex : boolean) : boolean;
var
TempWidth, TempHeight : integer;
begin
Result := False;
if not(aUseMutex) or BeginBufferDraw then
begin
TempWidth := round(Width * GlobalCEFApp.DeviceScaleFactor);
TempHeight := round(Height * GlobalCEFApp.DeviceScaleFactor);
Result := (FBuffer <> nil) and
(FBuffer.Width = TempWidth) and
(FBuffer.Height = TempHeight);
if aUseMutex then EndBufferDraw;
end;
end;
function TFMXBufferPanel.ScreenToClient(aPoint : TPoint) : TPoint;
var
TempPoint : TPointF;
begin
TempPoint.x := aPoint.x;
TempPoint.y := aPoint.y;
TempPoint := ScreenToLocal(TempPoint);
Result.x := round(TempPoint.x);
Result.y := round(TempPoint.y);
end;
function TFMXBufferPanel.ClientToScreen(aPoint : TPoint) : TPoint;
var
TempPoint : TPointF;
begin
TempPoint.x := aPoint.x;
TempPoint.y := aPoint.y;
TempPoint := LocalToScreen(TempPoint);
Result.x := round(TempPoint.x);
Result.y := round(TempPoint.y);
end;
end.

3435
source/uFMXChromium.pas Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,260 @@
// ************************************************************************
// ***************************** CEF4Delphi *******************************
// ************************************************************************
//
// CEF4Delphi is based on DCEF3 which uses CEF3 to embed a chromium-based
// browser in Delphi applications.
//
// The original license of DCEF3 still applies to CEF4Delphi.
//
// 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.
//
// ************************************************************************
// ************ vvvv Original license and comments below vvvv *************
// ************************************************************************
(*
* Delphi Chromium Embedded 3
*
* Usage allowed under the restrictions of the Lesser GNU General Public License
* or alternatively the restrictions of the Mozilla Public License 1.1
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
* the specific language governing rights and limitations under the License.
*
* Unit owner : Henri Gourvest <hgourvest@gmail.com>
* Web site : http://www.progdigy.com
* Repository : http://code.google.com/p/delphichromiumembedded/
* Group : http://groups.google.com/group/delphichromiumembedded
*
* Embarcadero Technologies, Inc is not permitted to use or redistribute
* this source code without explicit permission.
*
*)
unit uFMXWorkScheduler;
{$IFNDEF CPUX64}
{$ALIGN ON}
{$MINENUMSIZE 4}
{$ENDIF}
{$I cef.inc}
interface
uses
System.Classes, System.Types,
FMX.Types, FMX.Controls,
uCEFConstants, uCEFWorkSchedulerThread;
type
TFMXWorkScheduler = class(TComponent)
protected
FThread : TCEFWorkSchedulerThread;
FDepleteWorkCycles : cardinal;
FDepleteWorkDelay : cardinal;
FDefaultInterval : integer;
FStopped : boolean;
{$IFDEF MSWINDOWS}
{$WARN SYMBOL_PLATFORM OFF}
FPriority : TThreadPriority;
{$WARN SYMBOL_PLATFORM ON}
{$ENDIF}
procedure CreateThread;
procedure DestroyThread;
procedure DepleteWork;
procedure NextPulse(aInterval : integer);
procedure DoWork;
procedure DoMessageLoopWork;
procedure SetDefaultInterval(aValue : integer);
{$IFDEF MSWINDOWS}
{$WARN SYMBOL_PLATFORM OFF}
procedure SetPriority(aValue : TThreadPriority);
{$WARN SYMBOL_PLATFORM ON}
{$ENDIF}
procedure Thread_OnPulse(Sender : TObject);
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure AfterConstruction; override;
procedure ScheduleMessagePumpWork(const delay_ms : int64);
procedure StopScheduler;
procedure ScheduleWork(const delay_ms : int64);
published
{$IFDEF MSWINDOWS}
{$WARN SYMBOL_PLATFORM OFF}
property Priority : TThreadPriority read FPriority write SetPriority default tpNormal;
{$WARN SYMBOL_PLATFORM ON}
{$ENDIF}
property DefaultInterval : integer read FDefaultInterval write SetDefaultInterval default CEF_TIMER_MAXDELAY;
property DepleteWorkCycles : cardinal read FDepleteWorkCycles write FDepleteWorkCycles default CEF_TIMER_DEPLETEWORK_CYCLES;
property DepleteWorkDelay : cardinal read FDepleteWorkDelay write FDepleteWorkDelay default CEF_TIMER_DEPLETEWORK_DELAY;
end;
implementation
uses
{$IFDEF MSWINDOWS}
WinApi.Windows,
{$ENDIF}
System.SysUtils, System.Math,
FMX.Platform, FMX.Platform.Win, FMX.Forms,
uCEFMiscFunctions, uCEFApplication;
constructor TFMXWorkScheduler.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FThread := nil;
FStopped := False;
{$IFDEF MSWINDOWS}
{$WARN SYMBOL_PLATFORM OFF}
FPriority := tpNormal;
{$WARN SYMBOL_PLATFORM ON}
{$ENDIF}
FDefaultInterval := CEF_TIMER_MAXDELAY;
FDepleteWorkCycles := CEF_TIMER_DEPLETEWORK_CYCLES;
FDepleteWorkDelay := CEF_TIMER_DEPLETEWORK_DELAY;
end;
destructor TFMXWorkScheduler.Destroy;
begin
DestroyThread;
inherited Destroy;
end;
procedure TFMXWorkScheduler.AfterConstruction;
begin
inherited AfterConstruction;
if not(csDesigning in ComponentState) then CreateThread;
end;
procedure TFMXWorkScheduler.CreateThread;
begin
FThread := TCEFWorkSchedulerThread.Create;
{$IFDEF MSWINDOWS}
FThread.Priority := FPriority;
{$ENDIF}
FThread.DefaultInterval := FDefaultInterval;
FThread.OnPulse := Thread_OnPulse;
FThread.Start;
end;
procedure TFMXWorkScheduler.DestroyThread;
begin
try
if (FThread <> nil) then
begin
FThread.Terminate;
FThread.NextPulse(0);
FThread.WaitFor;
FreeAndNil(FThread);
end;
except
on e : exception do
if CustomExceptionHandler('TFMXWorkScheduler.DestroyThread', e) then raise;
end;
end;
procedure TFMXWorkScheduler.DoMessageLoopWork;
begin
if (GlobalCEFApp <> nil) then GlobalCEFApp.DoMessageLoopWork;
end;
procedure TFMXWorkScheduler.SetDefaultInterval(aValue : integer);
begin
FDefaultInterval := aValue;
if (FThread <> nil) then FThread.DefaultInterval := aValue;
end;
{$IFDEF MSWINDOWS}
{$WARN SYMBOL_PLATFORM OFF}
procedure TFMXWorkScheduler.SetPriority(aValue : TThreadPriority);
begin
FPriority := aValue;
if (FThread <> nil) then FThread.Priority := aValue;
end;
{$WARN SYMBOL_PLATFORM ON}
{$ENDIF}
procedure TFMXWorkScheduler.DepleteWork;
var
i : cardinal;
begin
i := FDepleteWorkCycles;
while (i > 0) do
begin
DoMessageLoopWork;
Sleep(FDepleteWorkDelay);
dec(i);
end;
end;
procedure TFMXWorkScheduler.ScheduleMessagePumpWork(const delay_ms : int64);
{$IFDEF MSWINDOWS}
var
TempHandle : HWND;
{$ENDIF}
begin
if not(FStopped) then
begin
{$IFDEF MSWINDOWS}
{$IFDEF DELPHI17_UP}
TempHandle := ApplicationHWND;
{$ELSE}
TempHandle := FmxHandleToHWND(Application.MainForm.Handle);
{$ENDIF}
if (TempHandle <> 0) then
WinApi.Windows.PostMessage(TempHandle, CEF_PUMPHAVEWORK, 0, LPARAM(delay_ms));
{$ENDIF}
end;
end;
procedure TFMXWorkScheduler.StopScheduler;
begin
FStopped := True;
NextPulse(0);
DepleteWork;
end;
procedure TFMXWorkScheduler.Thread_OnPulse(Sender: TObject);
begin
if not(FStopped) then DoMessageLoopWork;
end;
procedure TFMXWorkScheduler.DoWork;
begin
DoMessageLoopWork;
NextPulse(FDefaultInterval);
end;
procedure TFMXWorkScheduler.ScheduleWork(const delay_ms : int64);
begin
if not(FStopped) then
begin
if (delay_ms <= 0) then
DoWork
else
NextPulse(delay_ms);
end;
end;
procedure TFMXWorkScheduler.NextPulse(aInterval : integer);
begin
if (FThread <> nil) then FThread.NextPulse(aInterval);
end;
end.