1
0
mirror of https://github.com/salvadordf/CEF4Delphi.git synced 2024-11-24 08:02:15 +02:00

Update to CEF 75.1.4

- Fixed issue #179 : Added a new EditorBrowser demo.
- Fixed issue #195 : Added VizDisplayCompositor to the disabled features list
- Fixed issue #206 : Added a context menu option to show the DevTools in SimpleFMXBrowser. Added TCEFFMXChromium.ShowDevTools and TCEFFMXChromium.CloseDevTools.
- Added a new menu option to MiniBrowser to simulate key presses in normal mode.
This commit is contained in:
Salvador Díaz Fau 2019-07-18 11:48:11 +02:00
parent 0e08d66a1f
commit 43b0ec7e20
43 changed files with 5155 additions and 71 deletions

11
bin/EditorBrowser.html Normal file
View File

@ -0,0 +1,11 @@
<!DOCTYPE html>
<html>
<body>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor
incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis
nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore
eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt
in culpa qui officia deserunt mollit anim id est laborum.</p>
</body>
</html>

View File

@ -18,7 +18,8 @@ uses
{$ENDIF}
begin
GlobalCEFApp := TCefApplication.Create;
GlobalCEFApp := TCefApplication.Create;
GlobalCEFApp.DisableFeatures := 'NetworkService';
// In case you want to use custom directories for the CEF3 binaries, cache, cookies and user data.
// If you don't set a cache directory the browser will use in-memory cache.

View File

@ -53,6 +53,8 @@ object SimpleFMXBrowserFrm: TSimpleFMXBrowserFrm
Top = 129
end
object FMXChromium1: TFMXChromium
OnBeforeContextMenu = FMXChromium1BeforeContextMenu
OnContextMenuCommand = FMXChromium1ContextMenuCommand
OnBeforePopup = FMXChromium1BeforePopup
OnAfterCreated = FMXChromium1AfterCreated
OnBeforeClose = FMXChromium1BeforeClose

View File

@ -50,6 +50,9 @@ uses
FMX.Edit, FMX.Controls.Presentation, uCEFFMXWindowParent, uCEFFMXChromium,
uCEFInterfaces, uCEFConstants, uCEFTypes;
const
MINIBROWSER_CONTEXTMENU_SHOWDEVTOOLS = MENU_ID_USER_FIRST + 1;
type
TSimpleFMXBrowserFrm = class(TForm)
AddressPnl: TPanel;
@ -78,6 +81,13 @@ type
procedure FormResize(Sender: TObject);
procedure FMXChromium1AfterCreated(Sender: TObject;
const browser: ICefBrowser);
procedure FMXChromium1BeforeContextMenu(Sender: TObject;
const browser: ICefBrowser; const frame: ICefFrame;
const params: ICefContextMenuParams; const model: ICefMenuModel);
procedure FMXChromium1ContextMenuCommand(Sender: TObject;
const browser: ICefBrowser; const frame: ICefFrame;
const params: ICefContextMenuParams; commandId: Integer;
eventFlags: Cardinal; out Result: Boolean);
protected
// Variables to control when can we destroy the form safely
@ -147,6 +157,13 @@ begin
PostCustomMessage(WM_CLOSE);
end;
procedure TSimpleFMXBrowserFrm.FMXChromium1BeforeContextMenu(
Sender: TObject; const browser: ICefBrowser; const frame: ICefFrame;
const params: ICefContextMenuParams; const model: ICefMenuModel);
begin
model.AddItem(MINIBROWSER_CONTEXTMENU_SHOWDEVTOOLS, 'Show DevTools');
end;
procedure TSimpleFMXBrowserFrm.FMXChromium1BeforePopup( Sender : TObject;
const browser : ICefBrowser;
const frame : ICefFrame;
@ -172,6 +189,22 @@ begin
aAction := cbaDelay;
end;
procedure TSimpleFMXBrowserFrm.FMXChromium1ContextMenuCommand(
Sender: TObject; const browser: ICefBrowser; const frame: ICefFrame;
const params: ICefContextMenuParams; commandId: Integer;
eventFlags: Cardinal; out Result: Boolean);
var
TempPoint : TPoint;
begin
if (commandId = MINIBROWSER_CONTEXTMENU_SHOWDEVTOOLS) then
begin
TempPoint.x := params.XCoord;
TempPoint.y := params.YCoord;
FMXChromium1.ShowDevTools(TempPoint);
end;
end;
function TSimpleFMXBrowserFrm.PostCustomMessage(aMessage, wParam : cardinal; lParam : integer) : boolean;
{$IFDEF MSWINDOWS}
var

View File

@ -113,6 +113,7 @@ begin
GlobalCEFApp.BrowserSubprocessPath := 'OSRSubProcess.exe';
GlobalCEFApp.ExternalMessagePump := False;
GlobalCEFApp.MultiThreadedMessageLoop := False;
GlobalCEFApp.DisableFeatures := 'NetworkService,VizDisplayCompositor';
// This demo uses a different EXE for the subprocesses.
// With this configuration it's not necessary to have the

View File

@ -78,6 +78,7 @@ begin
GlobalCEFApp.SetCurrentDir := True;
GlobalCEFApp.ExternalMessagePump := False;
GlobalCEFApp.MultiThreadedMessageLoop := False;
GlobalCEFApp.DisableFeatures := 'NetworkService,VizDisplayCompositor';
GlobalCEFApp.StartSubProcess;
GlobalCEFApp.Free;

View File

@ -0,0 +1,18 @@
del /s /q *.dcu
del /s /q *.exe
del /s /q *.res
del /s /q *.rsm
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 Win64\Debug
rmdir Win64\Release
rmdir Win64
rmdir __history
rmdir __recovery

View File

@ -0,0 +1,73 @@
// ************************************************************************
// ***************************** 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 EditorBrowser;
{$I cef.inc}
uses
{$IFDEF DELPHI16_UP}
Vcl.Forms,
WinApi.Windows,
{$ELSE}
Forms,
Windows,
{$ENDIF }
uCEFApplication,
uEditorBrowser in 'uEditorBrowser.pas' {Form1};
{$R *.res}
// CEF3 needs to set the LARGEADDRESSAWARE flag which allows 32-bit processes to use up to 3GB of RAM.
// If you don't add this flag the rederer process will crash when you try to load large images.
{$SetPEFlags IMAGE_FILE_LARGE_ADDRESS_AWARE}
begin
CreateGlobalCEFApp;
if GlobalCEFApp.StartMainProcess then
begin
Application.Initialize;
{$IFDEF DELPHI11_UP}
Application.MainFormOnTaskbar := True;
{$ENDIF}
Application.CreateForm(TForm1, Form1);
Application.Run;
end;
DestroyGlobalCEFApp;
end.

View File

@ -0,0 +1,654 @@
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ProjectGuid>{55E00327-9D98-4DA3-A4E1-844942A01C6B}</ProjectGuid>
<ProjectVersion>18.5</ProjectVersion>
<FrameworkType>VCL</FrameworkType>
<MainSource>EditorBrowser.dpr</MainSource>
<Base>True</Base>
<Config Condition="'$(Config)'==''">Debug</Config>
<Platform Condition="'$(Platform)'==''">Win32</Platform>
<TargetedPlatforms>3</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)'!=''">
<VerInfo_Keys>CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments=</VerInfo_Keys>
<VerInfo_Locale>3082</VerInfo_Locale>
<SanitizedProjectName>EditorBrowser</SanitizedProjectName>
<Icon_MainIcon>$(BDS)\bin\delphi_PROJECTICON.ico</Icon_MainIcon>
<DCC_Namespace>System;Xml;Data;Datasnap;Web;Soap;Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;$(DCC_Namespace)</DCC_Namespace>
<DCC_DcuOutput>.\$(Platform)\$(Config)</DCC_DcuOutput>
<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_ExeOutput>..\..\..\bin</DCC_ExeOutput>
</PropertyGroup>
<PropertyGroup Condition="'$(Base_Win32)'!=''">
<DCC_UsePackage>DBXSqliteDriver;RESTComponents;DataSnapServerMidas;DBXDb2Driver;DBXInterBaseDriver;vclactnband;frxe23;vclFireDAC;emsclientfiredac;DataSnapFireDAC;svnui;tethering;Componentes;FireDACADSDriver;DBXMSSQLDriver;DatasnapConnectorsFreePascal;FireDACMSSQLDriver;vcltouch;vcldb;bindcompfmx;svn;Intraweb;DBXOracleDriver;inetdb;Componentes_Int;CEF4Delphi;FmxTeeUI;FireDACIBDriver;fmx;fmxdae;vclib;FireDACDBXDriver;dbexpress;IndyProtocols230;vclx;dsnap;DataSnapCommon;emsclient;FireDACCommon;RESTBackendComponents;DataSnapConnectors;VCLRESTComponents;soapserver;frxTee23;vclie;bindengine;DBXMySQLDriver;FireDACOracleDriver;CloudService;FireDACMySQLDriver;DBXFirebirdDriver;FireDACCommonDriver;DataSnapClient;inet;bindcompdbx;vcl;DBXSybaseASEDriver;FireDACDb2Driver;dsnapcon;FireDACMSAccDriver;fmxFireDAC;FireDACInfxDriver;vclimg;Componentes_UI;TeeDB;FireDAC;FireDACSqliteDriver;FireDACPgDriver;ibmonitor;FireDACASADriver;DBXOdbcDriver;FireDACTDataDriver;FMXTee;soaprtl;DbxCommonDriver;Componentes_Misc;ibxpress;Tee;DataSnapServer;xmlrtl;soapmidas;DataSnapNativeClient;fmxobj;vclwinx;ibxbindings;rtl;FireDACDSDriver;DbxClientDriver;DBXSybaseASADriver;CustomIPTransport;vcldsnap;bindcomp;appanalytics;Componentes_RTF;DBXInformixDriver;bindcompvcl;frxDB23;Componentes_vCard;TeeUI;IndyCore230;vclribbon;dbxcds;VclSmp;adortl;FireDACODBCDriver;DataSnapIndy10ServerTransport;IndySystem230;dsnapxml;DataSnapProviderClient;dbrtl;inetdbxpress;FireDACMongoDBDriver;frx23;fmxase;$(DCC_UsePackage)</DCC_UsePackage>
<DCC_Namespace>Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)</DCC_Namespace>
<VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
<Manifest_File>$(BDS)\bin\default_app.manifest</Manifest_File>
<VerInfo_Locale>1033</VerInfo_Locale>
<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>
<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;RESTComponents;DataSnapServerMidas;DBXDb2Driver;DBXInterBaseDriver;vclactnband;vclFireDAC;emsclientfiredac;DataSnapFireDAC;tethering;FireDACADSDriver;DBXMSSQLDriver;DatasnapConnectorsFreePascal;FireDACMSSQLDriver;vcltouch;vcldb;bindcompfmx;Intraweb;DBXOracleDriver;inetdb;FmxTeeUI;FireDACIBDriver;fmx;fmxdae;vclib;FireDACDBXDriver;dbexpress;IndyProtocols230;vclx;dsnap;DataSnapCommon;emsclient;FireDACCommon;RESTBackendComponents;DataSnapConnectors;VCLRESTComponents;soapserver;vclie;bindengine;DBXMySQLDriver;FireDACOracleDriver;CloudService;FireDACMySQLDriver;DBXFirebirdDriver;FireDACCommonDriver;DataSnapClient;inet;bindcompdbx;vcl;DBXSybaseASEDriver;FireDACDb2Driver;dsnapcon;FireDACMSAccDriver;fmxFireDAC;FireDACInfxDriver;vclimg;TeeDB;FireDAC;FireDACSqliteDriver;FireDACPgDriver;ibmonitor;FireDACASADriver;DBXOdbcDriver;FireDACTDataDriver;FMXTee;soaprtl;DbxCommonDriver;ibxpress;Tee;DataSnapServer;xmlrtl;soapmidas;DataSnapNativeClient;fmxobj;vclwinx;ibxbindings;rtl;FireDACDSDriver;DbxClientDriver;DBXSybaseASADriver;CustomIPTransport;vcldsnap;bindcomp;appanalytics;DBXInformixDriver;bindcompvcl;TeeUI;IndyCore230;vclribbon;dbxcds;VclSmp;adortl;FireDACODBCDriver;DataSnapIndy10ServerTransport;IndySystem230;dsnapxml;DataSnapProviderClient;dbrtl;inetdbxpress;FireDACMongoDBDriver;fmxase;$(DCC_UsePackage)</DCC_UsePackage>
<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>
<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>
</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_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
<VerInfo_Locale>1033</VerInfo_Locale>
<AppEnableRuntimeThemes>true</AppEnableRuntimeThemes>
<DCC_RemoteDebug>false</DCC_RemoteDebug>
<BT_BuildType>Debug</BT_BuildType>
<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>
<AppDPIAwarenessMode>PerMonitor</AppDPIAwarenessMode>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_1_Win64)'!=''">
<AppEnableRuntimeThemes>true</AppEnableRuntimeThemes>
<VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
<VerInfo_Locale>1033</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>
<AppDPIAwarenessMode>PerMonitorV2</AppDPIAwarenessMode>
</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>
<AppDPIAwarenessMode>PerMonitor</AppDPIAwarenessMode>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_2_Win64)'!=''">
<AppEnableRuntimeThemes>true</AppEnableRuntimeThemes>
<AppDPIAwarenessMode>PerMonitorV2</AppDPIAwarenessMode>
</PropertyGroup>
<ItemGroup>
<DelphiCompile Include="$(MainSource)">
<MainSource>MainSource</MainSource>
</DelphiCompile>
<DCCReference Include="uEditorBrowser.pas">
<Form>Form1</Form>
</DCCReference>
<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">EditorBrowser.dpr</Source>
</Source>
<Excluded_Packages>
<Excluded_Packages Name="$(BDSBIN)\dclIPIndyImpl260.bpl">IP Abstraction Indy Implementation Design Time</Excluded_Packages>
<Excluded_Packages Name="$(BDSBIN)\DataExplorerDBXPluginEnt260.bpl">DBExpress Enterprise Data Explorer Integration</Excluded_Packages>
<Excluded_Packages Name="$(BDSBIN)\dcloffice2k260.bpl">Microsoft Office 2000 Sample Automation Server Wrapper Components</Excluded_Packages>
<Excluded_Packages Name="$(BDSBIN)\dclofficexp260.bpl">Microsoft Office XP Sample Automation Server Wrapper Components</Excluded_Packages>
</Excluded_Packages>
</Delphi.Personality>
<Deployment Version="3">
<DeployFile LocalName="..\..\bin\EditorBrowser.exe" Configuration="Debug" Class="ProjectOutput">
<Platform Name="Win32">
<RemoteName>EditorBrowser.exe</RemoteName>
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
<DeployFile LocalName="Win32\Debug\EditorBrowser.exe" Configuration="Debug" Class="ProjectOutput"/>
<DeployClass Name="AdditionalDebugSymbols">
<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="AndroidClassesDexFile">
<Platform Name="Android">
<RemoteDir>classes</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidFileProvider">
<Platform Name="Android">
<RemoteDir>res\xml</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="AndroidSplashStylesV21">
<Platform Name="Android">
<RemoteDir>res\values-v21</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="OSX64">
<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="OSX64">
<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="OSX64">
<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="OSX64">
<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="ProjectOSXDebug">
<Platform Name="OSX64">
<RemoteDir>..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectOSXEntitlements">
<Platform Name="OSX32">
<RemoteDir>..\</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="OSX64">
<RemoteDir>..\</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectOSXInfoPList">
<Platform Name="OSX32">
<RemoteDir>Contents</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="OSX64">
<RemoteDir>Contents</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectOSXResource">
<Platform Name="OSX32">
<RemoteDir>Contents\Resources</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="OSX64">
<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="OSX64">
<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="Win32" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="Linux64" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="OSX32" Name="$(PROJECTNAME).app"/>
<ProjectRoot Platform="Android" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="OSX64" Name="$(PROJECTNAME).app"/>
<ProjectRoot Platform="iOSSimulator" Name="$(PROJECTNAME).app"/>
</Deployment>
<Platforms>
<Platform value="Win32">True</Platform>
<Platform value="Win64">True</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,409 @@
// ************************************************************************
// ***************************** 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 Diaz 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}
// 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 (First FireMonkey and 64bit compiler)
{$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}
// Rad Studio 10.3 - Delphi Rio
{$IFDEF VER330}
{$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}
{$DEFINE DELPHI26_UP}
{$ENDIF}
{$IFDEF FPC}
{$DEFINE SUPPORTS_INLINE}
{$ELSE}
{$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}
{$DEFINE DELPHI26_UP}
{$ENDIF}
{$ENDIF}
{$IFDEF DELPHI9_UP}
{$DEFINE SUPPORTS_INLINE}
{$ENDIF}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,512 @@
// ************************************************************************
// ***************************** 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 © 2019 Salvador Diaz 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 uEditorBrowser;
{$I cef.inc}
interface
uses
{$IFDEF DELPHI16_UP}
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls, Vcl.ToolWin, Vcl.ComCtrls,
System.ImageList, Vcl.ImgList,
{$ELSE}
Windows, Messages, SysUtils, Variants, Classes, Graphics,
Controls, Forms, Dialogs, StdCtrls, ExtCtrls, ToolWin, ComCtrls,
ImageList, ImgList,
{$ENDIF}
uCEFChromium, uCEFWindowParent, uCEFInterfaces, uCEFConstants, uCEFTypes,
uCEFWinControl;
type
TForm1 = class(TForm)
Timer1: TTimer;
Chromium1: TChromium;
CEFWindowParent1: TCEFWindowParent;
ToolBar1: TToolBar;
SaveBtn: TToolButton;
ImageList1: TImageList;
Separator1: TToolButton;
BoldBtn: TToolButton;
ItalicBtn: TToolButton;
UnderlineBtn: TToolButton;
StrikethroughBtn: TToolButton;
Separator2: TToolButton;
AlignLeftBtn: TToolButton;
AlignCenterBtn: TToolButton;
AlignRightBtn: TToolButton;
OpenBtn: TToolButton;
NewBtn: TToolButton;
OpenDialog1: TOpenDialog;
SaveDialog1: TSaveDialog;
Separator3: TToolButton;
LinkBtn: TToolButton;
ImageBtn: TToolButton;
AlignJustifyBtn: TToolButton;
Separator4: TToolButton;
UnorderedListBtn: TToolButton;
OrderedListBtn: TToolButton;
ColorDialog1: TColorDialog;
Separator5: TToolButton;
IndentBtn: TToolButton;
TextColorBtn: TToolButton;
FillColorBtn: TToolButton;
Separator6: TToolButton;
RemoveFormatBtn: TToolButton;
OutdentBtn: TToolButton;
Separator7: TToolButton;
procedure Timer1Timer(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure Chromium1AfterCreated(Sender: TObject; const browser: ICefBrowser);
procedure Chromium1Close(Sender: TObject; const browser: ICefBrowser; var aAction : TCefCloseBrowserAction);
procedure Chromium1BeforeClose(Sender: TObject; const browser: ICefBrowser);
procedure Chromium1LoadEnd(Sender: TObject; const browser: ICefBrowser; const frame: ICefFrame; httpStatusCode: Integer);
procedure Chromium1TextResultAvailable(Sender: TObject; const aText: ustring);
procedure BoldBtnClick(Sender: TObject);
procedure ItalicBtnClick(Sender: TObject);
procedure UnderlineBtnClick(Sender: TObject);
procedure StrikethroughBtnClick(Sender: TObject);
procedure AlignLeftBtnClick(Sender: TObject);
procedure AlignCenterBtnClick(Sender: TObject);
procedure AlignRightBtnClick(Sender: TObject);
procedure SaveBtnClick(Sender: TObject);
procedure NewBtnClick(Sender: TObject);
procedure OpenBtnClick(Sender: TObject);
procedure LinkBtnClick(Sender: TObject);
procedure ImageBtnClick(Sender: TObject);
procedure AlignJustifyBtnClick(Sender: TObject);
procedure UnorderedListBtnClick(Sender: TObject);
procedure OrderedListBtnClick(Sender: TObject);
procedure IndentBtnClick(Sender: TObject);
procedure TextColorBtnClick(Sender: TObject);
procedure FillColorBtnClick(Sender: TObject);
procedure RemoveFormatBtnClick(Sender: TObject);
procedure OutdentBtnClick(Sender: TObject);
protected
// Variables to control when can we destroy the form safely
FCanClose : boolean; // Set to True in TChromium.OnBeforeClose
FClosing : boolean; // Set to True in the CloseQuery event.
procedure EnableDesignMode;
// You have to handle this two messages to call NotifyMoveOrResizeStarted or some page elements will be misaligned.
procedure WMMove(var aMessage : TWMMove); message WM_MOVE;
procedure WMMoving(var aMessage : TMessage); message WM_MOVING;
// You also have to handle these two messages to set GlobalCEFApp.OsmodalLoop
procedure WMEnterMenuLoop(var aMessage: TMessage); message WM_ENTERMENULOOP;
procedure WMExitMenuLoop(var aMessage: TMessage); message WM_EXITMENULOOP;
procedure BrowserCreatedMsg(var aMessage : TMessage); message CEF_AFTERCREATED;
procedure BrowserDestroyMsg(var aMessage : TMessage); message CEF_DESTROY;
public
{ Public declarations }
end;
var
Form1: TForm1;
procedure CreateGlobalCEFApp;
implementation
{$R *.dfm}
uses
uCEFApplication, uCefMiscFunctions;
// This demo shows how to create a simple editor using a browser.
// It's possible to add many more editor commands available with the JavaScript function called 'execCommand'
// https://developer.mozilla.org/en-US/docs/Web/API/Document/execCommand
// There are several TODO comments with some missing features that all editors should have
// This demo includes some icons from "Material Design Icons", made by Google ( https://github.com/google/material-design-icons )
// Destruction steps
// =================
// 1. FormCloseQuery sets CanClose to FALSE calls TChromium.CloseBrowser which triggers the TChromium.OnClose event.
// 2. TChromium.OnClose sends a CEFBROWSER_DESTROY message to destroy CEFWindowParent1 in the main thread, which triggers the TChromium.OnBeforeClose event.
// 3. TChromium.OnBeforeClose sets FCanClose := True and sends WM_CLOSE to the form.
procedure CreateGlobalCEFApp;
begin
GlobalCEFApp := TCefApplication.Create;
GlobalCEFApp.DisableFeatures := 'NetworkService';
end;
procedure TForm1.FillColorBtnClick(Sender: TObject);
var
TempCode, TempHexColor : string;
begin
if ColorDialog1.execute then
begin
TempHexColor := '#' + IntToHex(GetRValue(ColorDialog1.Color), 2) +
IntToHex(GetGValue(ColorDialog1.Color), 2) +
IntToHex(GetBValue(ColorDialog1.Color), 2);
TempCode := 'document.execCommand("backColor", false, "' + TempHexColor + '");';
Chromium1.ExecuteJavaScript(TempCode, 'about:blank');
end;
end;
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
CanClose := FCanClose;
if not(FClosing) then
begin
FClosing := True;
Visible := False;
Chromium1.CloseBrowser(True);
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
FCanClose := False;
FClosing := False;
Chromium1.DefaultURL := 'file:///EditorBrowser.html';
end;
procedure TForm1.FormShow(Sender: TObject);
begin
// You *MUST* call CreateBrowser to create and initialize the browser.
// This will trigger the AfterCreated event when the browser is fully
// initialized and ready to receive commands.
// GlobalCEFApp.GlobalContextInitialized has to be TRUE before creating any browser
// If it's not initialized yet, we use a simple timer to create the browser later.
if not(Chromium1.CreateBrowser(CEFWindowParent1)) then Timer1.Enabled := True;
end;
procedure TForm1.Chromium1AfterCreated(Sender: TObject; const browser: ICefBrowser);
begin
// Now the browser is fully initialized we can send a message to the main form to load the initial web page.
PostMessage(Handle, CEF_AFTERCREATED, 0, 0);
end;
procedure TForm1.Chromium1BeforeClose(Sender: TObject;
const browser: ICefBrowser);
begin
FCanClose := True;
PostMessage(Handle, WM_CLOSE, 0, 0);
end;
procedure TForm1.Chromium1Close(Sender: TObject;
const browser: ICefBrowser; var aAction : TCefCloseBrowserAction);
begin
PostMessage(Handle, CEF_DESTROY, 0, 0);
aAction := cbaDelay;
end;
procedure TForm1.Chromium1LoadEnd(Sender: TObject;
const browser: ICefBrowser; const frame: ICefFrame;
httpStatusCode: Integer);
begin
if (frame <> nil) and not(frame.isMain) then exit;
// Enable the "designMode" for all loaded files to edit them
EnableDesignMode;
end;
procedure TForm1.Chromium1TextResultAvailable(Sender: TObject; const aText: ustring);
var
TempLines : TStringList;
begin
// TODO: This function should notify the user if an existing file is replaced
TempLines := nil;
SaveDialog1.DefaultExt := '.html';
SaveDialog1.Filter := 'HTML Files (*.html)|*.HTML';
if SaveDialog1.Execute then
try
try
TempLines := TStringList.Create;
TempLines.Text := aText;
TempLines.SaveToFile(SaveDialog1.FileName);
except
on e : exception do
if CustomExceptionHandler('TForm1.Chromium1TextResultAvailable', e) then raise;
end;
finally
if (TempLines <> nil) then FreeAndNil(TempLines);
end;
end;
procedure TForm1.TextColorBtnClick(Sender: TObject);
var
TempCode, TempHexColor : string;
begin
if ColorDialog1.execute then
begin
TempHexColor := '#' + IntToHex(GetRValue(ColorDialog1.Color), 2) +
IntToHex(GetGValue(ColorDialog1.Color), 2) +
IntToHex(GetBValue(ColorDialog1.Color), 2);
TempCode := 'document.execCommand("foreColor", false, "' + TempHexColor + '");';
Chromium1.ExecuteJavaScript(TempCode, 'about:blank');
end;
end;
procedure TForm1.EnableDesignMode;
var
TempCode : string;
begin
TempCode := 'document.designMode = "on";';
Chromium1.ExecuteJavaScript(TempCode, 'about:blank');
end;
procedure TForm1.AlignCenterBtnClick(Sender: TObject);
var
TempCode : string;
begin
TempCode := 'document.execCommand("justifyCenter", false, null);';
Chromium1.ExecuteJavaScript(TempCode, 'about:blank');
end;
procedure TForm1.AlignJustifyBtnClick(Sender: TObject);
var
TempCode : string;
begin
TempCode := 'document.execCommand("justifyFull", false, null);';
Chromium1.ExecuteJavaScript(TempCode, 'about:blank');
end;
procedure TForm1.AlignLeftBtnClick(Sender: TObject);
var
TempCode : string;
begin
TempCode := 'document.execCommand("justifyLeft", false, null);';
Chromium1.ExecuteJavaScript(TempCode, 'about:blank');
end;
procedure TForm1.AlignRightBtnClick(Sender: TObject);
var
TempCode : string;
begin
TempCode := 'document.execCommand("justifyRight", false, null);';
Chromium1.ExecuteJavaScript(TempCode, 'about:blank');
end;
procedure TForm1.BoldBtnClick(Sender: TObject);
var
TempCode : string;
begin
TempCode := 'document.execCommand("bold", false, null);';
Chromium1.ExecuteJavaScript(TempCode, 'about:blank');
end;
procedure TForm1.ImageBtnClick(Sender: TObject);
var
TempCode, TempURL : string;
begin
// TODO: Replace InputBox
TempURL := inputbox('Type the URL used in the image', 'URL : ', 'https://www.briskbard.com/images/logo5.png');
TempCode := 'document.execCommand("insertImage", false, "' + TempURL + '");';
Chromium1.ExecuteJavaScript(TempCode, 'about:blank');
end;
procedure TForm1.IndentBtnClick(Sender: TObject);
var
TempCode : string;
begin
TempCode := 'document.execCommand("indent", false, null);';
Chromium1.ExecuteJavaScript(TempCode, 'about:blank');
end;
procedure TForm1.ItalicBtnClick(Sender: TObject);
var
TempCode : string;
begin
TempCode := 'document.execCommand("italic", false, null);';
Chromium1.ExecuteJavaScript(TempCode, 'about:blank');
end;
procedure TForm1.LinkBtnClick(Sender: TObject);
var
TempCode, TempURL : string;
begin
// TODO: Replace InputBox
TempURL := inputbox('Type the URL used in the link', 'URL : ', 'https://www.briskbard.com');
TempCode := 'document.execCommand("createLink", false, "' + TempURL + '");';
Chromium1.ExecuteJavaScript(TempCode, 'about:blank');
end;
procedure TForm1.SaveBtnClick(Sender: TObject);
begin
Chromium1.RetrieveHTML;
end;
procedure TForm1.StrikethroughBtnClick(Sender: TObject);
var
TempCode : string;
begin
TempCode := 'document.execCommand("strikeThrough", false, null);';
Chromium1.ExecuteJavaScript(TempCode, 'about:blank');
end;
procedure TForm1.UnderlineBtnClick(Sender: TObject);
var
TempCode : string;
begin
TempCode := 'document.execCommand("underline", false, null);';
Chromium1.ExecuteJavaScript(TempCode, 'about:blank');
end;
procedure TForm1.UnorderedListBtnClick(Sender: TObject);
var
TempCode : string;
begin
TempCode := 'document.execCommand("insertUnorderedList", false, null);';
Chromium1.ExecuteJavaScript(TempCode, 'about:blank');
end;
procedure TForm1.BrowserCreatedMsg(var aMessage : TMessage);
begin
Caption := 'Editor Browser';
end;
procedure TForm1.BrowserDestroyMsg(var aMessage : TMessage);
begin
CEFWindowParent1.Free;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Timer1.Enabled := False;
if not(Chromium1.CreateBrowser(CEFWindowParent1)) and not(Chromium1.Initialized) then
Timer1.Enabled := True;
end;
procedure TForm1.OpenBtnClick(Sender: TObject);
begin
OpenDialog1.Filter := 'HTML Files (*.html)|*.HTML';
if OpenDialog1.Execute then
Chromium1.LoadURL('file:///' + OpenDialog1.FileName); // TODO: The URL should be encoded
end;
procedure TForm1.OrderedListBtnClick(Sender: TObject);
var
TempCode : string;
begin
TempCode := 'document.execCommand("insertOrderedList", false, null);';
Chromium1.ExecuteJavaScript(TempCode, 'about:blank');
end;
procedure TForm1.OutdentBtnClick(Sender: TObject);
var
TempCode : string;
begin
TempCode := 'document.execCommand("outdent", false, null);';
Chromium1.ExecuteJavaScript(TempCode, 'about:blank');
end;
procedure TForm1.RemoveFormatBtnClick(Sender: TObject);
var
TempCode : string;
begin
TempCode := 'document.execCommand("removeFormat", false, null);';
Chromium1.ExecuteJavaScript(TempCode, 'about:blank');
end;
procedure TForm1.NewBtnClick(Sender: TObject);
begin
// TODO: Before clearing the document we should notify the user if the document has unsaved changes
Chromium1.LoadURL('about:blank');
EnableDesignMode;
end;
procedure TForm1.WMMove(var aMessage : TWMMove);
begin
inherited;
if (Chromium1 <> nil) then Chromium1.NotifyMoveOrResizeStarted;
end;
procedure TForm1.WMMoving(var aMessage : TMessage);
begin
inherited;
if (Chromium1 <> nil) then Chromium1.NotifyMoveOrResizeStarted;
end;
procedure TForm1.WMEnterMenuLoop(var aMessage: TMessage);
begin
inherited;
if (aMessage.wParam = 0) and (GlobalCEFApp <> nil) then GlobalCEFApp.OsmodalLoop := True;
end;
procedure TForm1.WMExitMenuLoop(var aMessage: TMessage);
begin
inherited;
if (aMessage.wParam = 0) and (GlobalCEFApp <> nil) then GlobalCEFApp.OsmodalLoop := False;
end;
end.

View File

@ -174,6 +174,7 @@ begin
GlobalCEFApp := TCefApplication.Create;
GlobalCEFApp.WindowlessRenderingEnabled := True;
GlobalCEFApp.EnableHighDPISupport := True;
GlobalCEFApp.DisableFeatures := 'NetworkService,VizDisplayCompositor';
end;
procedure TForm1.AppEventsMessage(var Msg: tagMSG; var Handled: Boolean);

View File

@ -355,6 +355,10 @@ object MiniBrowserFrm: TMiniBrowserFrm
Caption = 'Download image...'
OnClick = Downloadimage1Click
end
object Simulatekeyboardpresses1: TMenuItem
Caption = 'Simulate keyboard presses'
OnClick = Simulatekeyboardpresses1Click
end
object N5: TMenuItem
Caption = '-'
end

View File

@ -123,6 +123,7 @@ type
N5: TMenuItem;
Memoryinfo1: TMenuItem;
Downloadimage1: TMenuItem;
Simulatekeyboardpresses1: TMenuItem;
procedure FormShow(Sender: TObject);
procedure BackBtnClick(Sender: TObject);
procedure ForwardBtnClick(Sender: TObject);
@ -220,6 +221,7 @@ type
procedure Chromium1DownloadImageFinished(Sender: TObject;
const imageUrl: ustring; httpStatusCode: Integer;
const image: ICefImage);
procedure Simulatekeyboardpresses1Click(Sender: TObject);
protected
FResponse : TStringList;
@ -846,6 +848,40 @@ begin
if not(FClosing) then StatusBar1.Panels[1].Text := aText;
end;
procedure TMiniBrowserFrm.Simulatekeyboardpresses1Click(Sender: TObject);
const
SIMULATED_KEY_PRESSES = 'QWERTY';
var
i : integer;
TempKeyEvent : TCefKeyEvent;
begin
// This procedure is extremely simplified.
// Use the SimpleOSRBrowser demo to log the real TCefKeyEvent values
// if you use anything different than uppercase letters.
for i := 1 to length(SIMULATED_KEY_PRESSES) do
begin
// WM_KEYDOWN
TempKeyEvent.kind := KEYEVENT_RAWKEYDOWN;
TempKeyEvent.modifiers := 0;
TempKeyEvent.windows_key_code := ord(SIMULATED_KEY_PRESSES[i]);
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);
Chromium1.SendKeyEvent(@TempKeyEvent);
// WM_CHAR
TempKeyEvent.kind := KEYEVENT_CHAR;
Chromium1.SendKeyEvent(@TempKeyEvent);
// WM_KEYUP
TempKeyEvent.kind := KEYEVENT_KEYUP;
Chromium1.SendKeyEvent(@TempKeyEvent);
end;
end;
procedure TMiniBrowserFrm.StopBtnClick(Sender: TObject);
begin
Chromium1.StopLoad;

View File

@ -187,6 +187,7 @@ begin
GlobalCEFApp.EnableHighDPISupport := True;
GlobalCEFApp.ExternalMessagePump := True;
GlobalCEFApp.MultiThreadedMessageLoop := False;
GlobalCEFApp.DisableFeatures := 'NetworkService,VizDisplayCompositor';
GlobalCEFApp.OnScheduleMessagePumpWork := GlobalCEFApp_OnScheduleMessagePumpWork;
end;

View File

@ -61,7 +61,6 @@ object MainForm: TMainForm
Height = 594
Align = alClient
TabOrder = 1
ExplicitTop = 31
end
object Timer1: TTimer
Enabled = False

View File

@ -149,7 +149,7 @@ begin
GlobalCEFApp := TCefApplication.Create;
GlobalCEFApp.WindowlessRenderingEnabled := True;
GlobalCEFApp.EnableHighDPISupport := True;
//GlobalCEFApp.DisableFeatures := 'NetworkService';
GlobalCEFApp.DisableFeatures := 'NetworkService,VizDisplayCompositor';
//GlobalCEFApp.LogFile := 'debug.log';
//GlobalCEFApp.LogSeverity := LOGSEVERITY_INFO;
end;

View File

@ -181,6 +181,7 @@ begin
GlobalCEFApp := TCefApplication.Create;
GlobalCEFApp.WindowlessRenderingEnabled := True;
GlobalCEFApp.EnableHighDPISupport := True;
GlobalCEFApp.DisableFeatures := 'NetworkService,VizDisplayCompositor';
// If you need transparency leave the GlobalCEFApp.BackgroundColor property
// with the default value or set the alpha channel to 0

View File

@ -0,0 +1,2 @@
rmdir /S /Q lib
rmdir /S /Q backup

View File

@ -0,0 +1,81 @@
// ************************************************************************
// ***************************** 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 EditorBrowser;
{$IFDEF FPC}
{$MODE Delphi}
{$ENDIF}
{$I cef.inc}
uses
{$IFDEF DELPHI16_UP}
Vcl.Forms,
WinApi.Windows,
{$ELSE}
{$IFnDEF FPC}
{$ELSE}
Interfaces,
{$ENDIF}
Forms,
Windows,
{$ENDIF }
uCEFApplication,
uEditorBrowser in 'uEditorBrowser.pas' {Form1};
{.$R *.res}
// CEF3 needs to set the LARGEADDRESSAWARE flag which allows 32-bit processes to use up to 3GB of RAM.
// If you don't add this flag the rederer process will crash when you try to load large images.
{$SetPEFlags IMAGE_FILE_LARGE_ADDRESS_AWARE}
begin
CreateGlobalCEFApp;
if GlobalCEFApp.StartMainProcess then
begin
Application.Initialize;
{$IFDEF DELPHI11_UP}
Application.MainFormOnTaskbar := True;
{$ENDIF}
Application.CreateForm(TForm1, Form1);
Application.Run;
end;
DestroyGlobalCEFApp;
end.

View File

@ -0,0 +1,91 @@
<?xml version="1.0" encoding="UTF-8"?>
<CONFIG>
<ProjectOptions>
<Version Value="11"/>
<PathDelim Value="\"/>
<General>
<Flags>
<MainUnitHasUsesSectionForAllUnits Value="False"/>
<MainUnitHasCreateFormStatements Value="False"/>
<MainUnitHasTitleStatement Value="False"/>
<MainUnitHasScaledStatement Value="False"/>
</Flags>
<SessionStorage Value="InProjectDir"/>
<MainUnit Value="0"/>
<Title Value="EditorBrowser"/>
<UseAppBundle Value="False"/>
<ResourceType Value="res"/>
</General>
<BuildModes Count="1">
<Item1 Name="Default" Default="True"/>
</BuildModes>
<PublishOptions>
<Version Value="2"/>
<UseFileFilters Value="True"/>
</PublishOptions>
<RunParams>
<FormatVersion Value="2"/>
<Modes Count="0"/>
</RunParams>
<RequiredPackages Count="2">
<Item1>
<PackageName Value="CEF4Delphi_Lazarus"/>
</Item1>
<Item2>
<PackageName Value="LCL"/>
</Item2>
</RequiredPackages>
<Units Count="2">
<Unit0>
<Filename Value="EditorBrowser.dpr"/>
<IsPartOfProject Value="True"/>
</Unit0>
<Unit1>
<Filename Value="uEditorBrowser.pas"/>
<IsPartOfProject Value="True"/>
<ComponentName Value="Form1"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
</Unit1>
</Units>
</ProjectOptions>
<CompilerOptions>
<Version Value="11"/>
<PathDelim Value="\"/>
<Target>
<Filename Value="..\..\..\bin\EditorBrowser"/>
</Target>
<SearchPaths>
<IncludeFiles Value="$(ProjOutDir)"/>
<UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/>
</SearchPaths>
<Parsing>
<SyntaxOptions>
<SyntaxMode Value="Delphi"/>
</SyntaxOptions>
</Parsing>
<Linking>
<Options>
<Win32>
<GraphicApplication Value="True"/>
</Win32>
</Options>
</Linking>
<Other>
<CustomOptions Value="-dBorland -dVer150 -dDelphi7 -dCompiler6_Up -dPUREPASCAL"/>
</Other>
</CompilerOptions>
<Debugging>
<Exceptions Count="3">
<Item1>
<Name Value="EAbort"/>
</Item1>
<Item2>
<Name Value="ECodetoolError"/>
</Item2>
<Item3>
<Name Value="EFOpenError"/>
</Item3>
</Exceptions>
</Debugging>
</CONFIG>

View File

@ -0,0 +1,69 @@
<?xml version="1.0" encoding="UTF-8"?>
<CONFIG>
<ProjectSession>
<PathDelim Value="\"/>
<Version Value="11"/>
<BuildModes Active="Default"/>
<Units Count="3">
<Unit0>
<Filename Value="EditorBrowser.dpr"/>
<IsPartOfProject Value="True"/>
<UsageCount Value="20"/>
<Loaded Value="True"/>
<DefaultSyntaxHighlighter Value="Delphi"/>
</Unit0>
<Unit1>
<Filename Value="uEditorBrowser.pas"/>
<IsPartOfProject Value="True"/>
<ComponentName Value="Form1"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
<IsVisibleTab Value="True"/>
<EditorIndex Value="1"/>
<TopLine Value="133"/>
<CursorPos X="69" Y="152"/>
<UsageCount Value="20"/>
<Loaded Value="True"/>
<LoadedDesigner Value="True"/>
<DefaultSyntaxHighlighter Value="Delphi"/>
</Unit1>
<Unit2>
<Filename Value="..\..\..\source\uCEFApplication.pas"/>
<EditorIndex Value="-1"/>
<TopLine Value="43"/>
<CursorPos X="57" Y="60"/>
<UsageCount Value="10"/>
</Unit2>
</Units>
<JumpHistory Count="6" HistoryIndex="5">
<Position1>
<Filename Value="uEditorBrowser.pas"/>
<Caret Line="248" Column="66" TopLine="229"/>
</Position1>
<Position2>
<Filename Value="uEditorBrowser.pas"/>
<Caret Line="381" Column="23" TopLine="365"/>
</Position2>
<Position3>
<Filename Value="uEditorBrowser.pas"/>
<Caret Line="353" Column="23" TopLine="337"/>
</Position3>
<Position4>
<Filename Value="uEditorBrowser.pas"/>
<Caret Line="381" Column="23" TopLine="354"/>
</Position4>
<Position5>
<Filename Value="uEditorBrowser.pas"/>
<Caret Line="352" Column="42" TopLine="337"/>
</Position5>
<Position6>
<Filename Value="uEditorBrowser.pas"/>
<Caret Line="354" Column="23" TopLine="337"/>
</Position6>
</JumpHistory>
<RunParams>
<FormatVersion Value="2"/>
<Modes Count="0" ActiveMode=""/>
</RunParams>
</ProjectSession>
</CONFIG>

View File

@ -0,0 +1,409 @@
// ************************************************************************
// ***************************** 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 Diaz 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}
// 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 (First FireMonkey and 64bit compiler)
{$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}
// Rad Studio 10.3 - Delphi Rio
{$IFDEF VER330}
{$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}
{$DEFINE DELPHI26_UP}
{$ENDIF}
{$IFDEF FPC}
{$DEFINE SUPPORTS_INLINE}
{$ELSE}
{$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}
{$DEFINE DELPHI26_UP}
{$ENDIF}
{$ENDIF}
{$IFDEF DELPHI9_UP}
{$DEFINE SUPPORTS_INLINE}
{$ENDIF}

View File

@ -0,0 +1,990 @@
object Form1: TForm1
Left = 247
Height = 624
Top = 149
Width = 1038
Caption = 'Initializing browser. Please wait...'
ClientHeight = 624
ClientWidth = 1038
Color = clBtnFace
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
OnCloseQuery = FormCloseQuery
OnCreate = FormCreate
OnShow = FormShow
Position = poScreenCenter
LCLVersion = '2.0.2.0'
object CEFWindowParent1: TCEFWindowParent
Left = 0
Height = 599
Top = 25
Width = 1038
Align = alClient
TabStop = True
TabOrder = 0
end
object ToolBar1: TToolBar
Left = 0
Height = 25
Top = 0
Width = 1038
Caption = 'ToolBar1'
Images = ImageList1
TabOrder = 1
object NewBtn: TToolButton
Left = 1
Hint = 'New document'
Top = 2
Caption = 'NewBtn'
ImageIndex = 8
OnClick = NewBtnClick
ParentShowHint = False
ShowHint = True
end
object OpenBtn: TToolButton
Left = 24
Hint = 'Open document'
Top = 2
Caption = 'OpenBtn'
ImageIndex = 9
OnClick = OpenBtnClick
ParentShowHint = False
ShowHint = True
end
object SaveBtn: TToolButton
Left = 47
Hint = 'Save document'
Top = 2
Caption = 'SaveBtn'
ImageIndex = 5
OnClick = SaveBtnClick
ParentShowHint = False
ShowHint = True
end
object Separator1: TToolButton
Left = 70
Height = 22
Top = 2
Caption = 'Separator1'
ImageIndex = 2
Style = tbsSeparator
end
object BoldBtn: TToolButton
Left = 78
Hint = 'Bold'
Top = 2
Caption = 'BoldBtn'
ImageIndex = 3
OnClick = BoldBtnClick
ParentShowHint = False
ShowHint = True
end
object ItalicBtn: TToolButton
Left = 101
Hint = 'Italics'
Top = 2
Caption = 'ItalicBtn'
ImageIndex = 4
OnClick = ItalicBtnClick
ParentShowHint = False
ShowHint = True
end
object UnderlineBtn: TToolButton
Left = 124
Hint = 'Underline'
Top = 2
Caption = 'UnderlineBtn'
ImageIndex = 7
OnClick = UnderlineBtnClick
ParentShowHint = False
ShowHint = True
end
object StrikethroughBtn: TToolButton
Left = 147
Hint = 'Strikethrough'
Top = 2
Caption = 'StrikethroughBtn'
ImageIndex = 6
OnClick = StrikethroughBtnClick
ParentShowHint = False
ShowHint = True
end
object Separator2: TToolButton
Left = 170
Height = 22
Top = 2
Caption = 'Separator2'
ImageIndex = 7
Style = tbsSeparator
end
object AlignLeftBtn: TToolButton
Left = 178
Hint = 'Align left'
Top = 2
Caption = 'AlignLeftBtn'
ImageIndex = 1
OnClick = AlignLeftBtnClick
ParentShowHint = False
ShowHint = True
end
object AlignCenterBtn: TToolButton
Left = 201
Hint = 'Align center'
Top = 2
Caption = 'AlignCenterBtn'
ImageIndex = 0
OnClick = AlignCenterBtnClick
ParentShowHint = False
ShowHint = True
end
object AlignRightBtn: TToolButton
Left = 224
Hint = 'Align right'
Top = 2
Caption = 'AlignRightBtn'
ImageIndex = 2
OnClick = AlignRightBtnClick
ParentShowHint = False
ShowHint = True
end
object AlignJustifyBtn: TToolButton
Left = 247
Hint = 'Justify'
Top = 2
Caption = 'AlignJustifyBtn'
ImageIndex = 12
OnClick = AlignJustifyBtnClick
ParentShowHint = False
ShowHint = True
end
object Separator3: TToolButton
Left = 270
Height = 22
Top = 2
Caption = 'Separator3'
ImageIndex = 3
Style = tbsSeparator
end
object LinkBtn: TToolButton
Left = 278
Hint = 'Create link'
Top = 2
Caption = 'LinkBtn'
ImageIndex = 10
OnClick = LinkBtnClick
ParentShowHint = False
ShowHint = True
end
object ImageBtn: TToolButton
Left = 301
Hint = 'Insert image'
Top = 2
Caption = 'ImageBtn'
ImageIndex = 11
OnClick = ImageBtnClick
ParentShowHint = False
ShowHint = True
end
object Separator4: TToolButton
Left = 324
Height = 22
Top = 2
Caption = 'Separator4'
ImageIndex = 12
Style = tbsSeparator
end
object UnorderedListBtn: TToolButton
Left = 332
Hint = 'Create a bulleted unordered list'
Top = 2
Caption = 'UnorderedListBtn'
ImageIndex = 13
OnClick = UnorderedListBtnClick
ParentShowHint = False
ShowHint = True
end
object OrderedListBtn: TToolButton
Left = 355
Hint = 'Create a numbered ordered list'
Top = 2
Caption = 'OrderedListBtn'
ImageIndex = 14
OnClick = OrderedListBtnClick
ParentShowHint = False
ShowHint = True
end
object Separator5: TToolButton
Left = 378
Height = 22
Top = 2
Caption = 'Separator5'
ImageIndex = 15
Style = tbsSeparator
end
object TextColorBtn: TToolButton
Left = 386
Hint = 'Text color'
Top = 2
Caption = 'TextColorBtn'
ImageIndex = 16
OnClick = TextColorBtnClick
ParentShowHint = False
ShowHint = True
end
object FillColorBtn: TToolButton
Left = 409
Hint = 'Background color'
Top = 2
Caption = 'FillColorBtn'
ImageIndex = 17
OnClick = FillColorBtnClick
ParentShowHint = False
ShowHint = True
end
object Separator6: TToolButton
Left = 432
Height = 22
Top = 2
Caption = 'Separator6'
ImageIndex = 18
Style = tbsSeparator
end
object RemoveFormatBtn: TToolButton
Left = 440
Hint = 'Remove format'
Top = 2
Caption = 'RemoveFormatBtn'
ImageIndex = 18
OnClick = RemoveFormatBtnClick
ParentShowHint = False
ShowHint = True
end
object Separator7: TToolButton
Left = 463
Height = 22
Top = 2
Caption = 'Separator7'
ImageIndex = 20
Style = tbsSeparator
end
object OutdentBtn: TToolButton
Left = 471
Hint = 'Outdent'
Top = 2
Caption = 'OutdentBtn'
ImageIndex = 19
OnClick = OutdentBtnClick
ParentShowHint = False
ShowHint = True
end
object IndentBtn: TToolButton
Left = 494
Hint = 'Indent'
Top = 2
Caption = 'IndentBtn'
ImageIndex = 15
OnClick = IndentBtnClick
ParentShowHint = False
ShowHint = True
end
end
object Timer1: TTimer
Enabled = False
Interval = 300
OnTimer = Timer1Timer
left = 56
top = 88
end
object Chromium1: TChromium
OnTextResultAvailable = Chromium1TextResultAvailable
OnLoadEnd = Chromium1LoadEnd
OnAfterCreated = Chromium1AfterCreated
OnBeforeClose = Chromium1BeforeClose
OnClose = Chromium1Close
left = 56
top = 144
end
object ImageList1: TImageList
left = 56
top = 200
Bitmap = {
4C69140000001000000010000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000FF000000FF000000FF0000
00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF000000FF0000000000000000000000FF000000FF000000FF0000
00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF000000FF00000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000FF0000
00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000000000000000000000000000000000000000000000000000FF0000
00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000FF000000FF000000FF0000
00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF000000FF0000000000000000000000FF000000FF000000FF0000
00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF000000FF00000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000FF0000
00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000000000000000000000000000000000000000000000000000FF0000
00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000FF000000FF000000FF0000
00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF000000FF0000000000000000000000FF000000FF000000FF0000
00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF000000FF00000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000FF000000FF000000FF0000
00FF000000FF000000FF000000FF000000FF000000FF000000FF000000000000
000000000000000000000000000000000000000000FF000000FF000000FF0000
00FF000000FF000000FF000000FF000000FF000000FF000000FF000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000FF000000FF000000FF0000
00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF000000FF0000000000000000000000FF000000FF000000FF0000
00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF000000FF00000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000FF000000FF000000FF0000
00FF000000FF000000FF000000FF000000FF000000FF000000FF000000000000
000000000000000000000000000000000000000000FF000000FF000000FF0000
00FF000000FF000000FF000000FF000000FF000000FF000000FF000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000FF000000FF000000FF0000
00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF000000FF0000000000000000000000FF000000FF000000FF0000
00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF000000FF00000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF000000FF00000000000000000000000000000000000000000000
0000000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF000000FF00000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000FF000000FF000000FF0000
00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF000000FF0000000000000000000000FF000000FF000000FF0000
00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF000000FF00000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF000000FF00000000000000000000000000000000000000000000
0000000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF000000FF00000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000FF0000
00FF000000FF000000FF000000FF010101FF282828FFA7A7A7FF000000000000
0000000000000000000000000000000000000000000000000000000000FF0000
00FF000000FF000000FF000000FF000000FF000000FF000000FFA7A7A7FF0000
0000000000000000000000000000000000000000000000000000000000FF0000
00FF7F7F7FFF0000000000000000F3F3F3FF545454FF000000FF2A2A2AFF0000
0000000000000000000000000000000000000000000000000000000000FF0000
00FF7F7F7FFF000000000000000000000000B7B7B7FF000000FF050505FF0000
0000000000000000000000000000000000000000000000000000000000FF0000
00FF7F7F7FFF0000000000000000F2F2F2FF525252FF000000FF424242FF0000
0000000000000000000000000000000000000000000000000000000000FF0000
00FF000000FF000000FF000000FF000000FF000000FF171717FFE0E0E0FF0000
0000000000000000000000000000000000000000000000000000000000FF0000
00FF000000FF000000FF000000FF000000FF000000FF000000FF737373FF0000
0000000000000000000000000000000000000000000000000000000000FF0000
00FF7F7F7FFF000000000000000000000000C1C1C1FF070707FF000000FFC5C5
C5FF000000000000000000000000000000000000000000000000000000FF0000
00FF7F7F7FFF00000000000000000000000000000000373737FF000000FF8686
86FF000000000000000000000000000000000000000000000000000000FF0000
00FF7F7F7FFF000000000000000000000000BEBEBEFF060606FF000000FF9C9C
9CFF000000000000000000000000000000000000000000000000000000FF0000
00FF000000FF000000FF000000FF000000FF000000FF000000FF1B1B1BFFF1F1
F1FF000000000000000000000000000000000000000000000000000000FF0000
00FF000000FF000000FF000000FF000000FF060606FF474747FFDADADAFF0000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF0000000000000000000000000000000000000000000000000000
000000000000000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF0000000000000000000000000000000000000000000000000000
0000000000000000000000000000585858FF000000FF282828FFFEFEFEFF0000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000DFDFDFFF030303FF000000FF9C9C9CFF000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000006D6D6DFF000000FF191919FFF8F8F8FF000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000EDEDEDFF0B0B0BFF000000FF878787FF00000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000828282FF000000FF0D0D0DFFEFEFEFFF00000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000F7F7F7FF161616FF000000FF727272FF0000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000979797FF000000FF050505FFE2E2E2FF0000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000FDFD
FDFF242424FF000000FF5D5D5DFF000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000FF000000FF0000
00FF000000FF000000FF000000FF000000FF000000FF00000000000000000000
00000000000000000000000000000000000000000000000000FF000000FF0000
00FF000000FF000000FF000000FF000000FF000000FF00000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000D1D1D1FF4C4C4CFF3F3F3FFF3F3F
3FFF3F3F3FFF3F3F3FFF3F3F3FFF3F3F3FFF3F3F3FFF3F3F3FFF474747FFDFDF
DFFF000000000000000000000000000000004C4C4CFF0F0F0FFF3F3F3FFF3F3F
3FFF3F3F3FFF3F3F3FFF3F3F3FFF3F3F3FFF3F3F3FFF0F0F0FFF000000FF1F1F
1FFFDFDFDFFF0000000000000000000000003F3F3FFF3F3F3FFF000000000000
000000000000000000000000000000000000000000003F3F3FFF000000FF0000
00FF1F1F1FFFDFDFDFFF00000000000000003F3F3FFF3F3F3FFF000000000000
000000000000000000000000000000000000000000003F3F3FFF000000FF0000
00FF000000FF474747FF00000000000000003F3F3FFF2F2F2FFFBFBFBFFFBFBF
BFFFBFBFBFFFBFBFBFFFBFBFBFFFBFBFBFFFBFBFBFFF2F2F2FFF000000FF0000
00FF000000FF3F3F3FFF00000000000000003F3F3FFF000000FF000000FF0000
00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF3F3F3FFF00000000000000003F3F3FFF000000FF000000FF0000
00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF3F3F3FFF00000000000000003F3F3FFF000000FF000000FF0000
00FF000000FF000000FF2D2D2DFF2C2C2CFF000000FF000000FF000000FF0000
00FF000000FF3F3F3FFF00000000000000003F3F3FFF000000FF000000FF0000
00FF000000FFA3A3A3FF00000000000000009F9F9FFF000000FF000000FF0000
00FF000000FF3F3F3FFF00000000000000003F3F3FFF000000FF000000FF0000
00FF2D2D2DFF000000000000000000000000000000002A2A2AFF000000FF0000
00FF000000FF3F3F3FFF00000000000000003F3F3FFF000000FF000000FF0000
00FF2C2C2CFF000000000000000000000000000000002A2A2AFF000000FF0000
00FF000000FF3F3F3FFF00000000000000003F3F3FFF000000FF000000FF0000
00FF000000FF9F9F9FFF00000000000000009C9C9CFF000000FF000000FF0000
00FF000000FF3F3F3FFF00000000000000004C4C4CFF000000FF000000FF0000
00FF000000FF000000FF2A2A2AFF2A2A2AFF000000FF000000FF000000FF0000
00FF000000FF4E4E4EFF0000000000000000D2D2D2FF4D4D4DFF3F3F3FFF3F3F
3FFF3F3F3FFF3F3F3FFF3F3F3FFF3F3F3FFF3F3F3FFF3F3F3FFF3F3F3FFF3F3F
3FFF4E4E4EFFD5D5D5FF00000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000ECECECFF858585FF565656FF4C4C4CFF727272FFD7D7D7FF000000000000
000000000000000000000000000000000000000000000000000000000000D7D7
D7FF121212FF000000FF000000FF000000FF000000FF030303FFAAAAAAFF0000
0000000000000000000000000000000000000000000000000000000000005454
54FF000000FF3E3E3EFFD8D8D8FFE5E5E5FF676767FF000000FF101010FFFBFB
FBFF000000000000000000000000000000000000000000000000000000003434
34FF000000FF898989FF0000000000000000EFEFEFFF5B5B5BFF5B5B5BFFE8E8
E8FF000000000000000000000000000000000000000000000000000000008B8B
8BFF3F3F3FFF484848FFBFBFBFFF000000000000000000000000000000000000
0000000000000000000000000000000000009F9F9FFF7F7F7FFF7F7F7FFF7F7F
7FFF7F7F7FFF7F7F7FFF7F7F7FFF7F7F7FFF7F7F7FFF7F7F7FFF7F7F7FFF7F7F
7FFF7F7F7FFF9F9F9FFF00000000000000003F3F3FFF000000FF000000FF0000
00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF3F3F3FFF00000000000000000000000000000000F8F8F8FFD7D7
D7FFD7D7D7FFFEFEFEFF00000000F1F1F1FF6D6D6DFF000000FF060606FFF3F3
F3FFFBFBFBFFFCFCFCFF00000000000000000000000000000000E5E5E5FF0000
00FF000000FFD0D0D0FF0000000000000000E6E6E6FF000000FF000000FFD9D9
D9FF000000000000000000000000000000000000000000000000000000003C3C
3CFF000000FF2C2C2CFFA0A0A0FFB0B0B0FF515151FF000000FF0F0F0FFFFBFB
FBFF00000000000000000000000000000000000000000000000000000000E6E6
E6FF393939FF000000FF000000FF000000FF000000FF0F0F0FFFB3B3B3FF0000
0000000000000000000000000000000000000000000000000000000000000000
000000000000C6C6C6FF919191FF8A8A8AFFA9A9A9FFF0F0F0FF000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000FF0000
00FF7F7F7FFF000000000000000000000000000000007F7F7FFF000000FF0000
00FF000000000000000000000000000000000000000000000000000000FF0000
00FF7F7F7FFF000000000000000000000000000000007F7F7FFF000000FF0000
00FF000000000000000000000000000000000000000000000000000000FF0000
00FF7F7F7FFF000000000000000000000000000000007F7F7FFF000000FF0000
00FF000000000000000000000000000000000000000000000000000000FF0000
00FF7F7F7FFF000000000000000000000000000000007F7F7FFF000000FF0000
00FF000000000000000000000000000000000000000000000000000000FF0000
00FF7F7F7FFF000000000000000000000000000000007F7F7FFF000000FF0000
00FF000000000000000000000000000000000000000000000000000000FF0000
00FF7F7F7FFF000000000000000000000000000000007F7F7FFF000000FF0000
00FF000000000000000000000000000000000000000000000000000000FF0000
00FF7F7F7FFF000000000000000000000000000000007F7F7FFF000000FF0000
00FF000000000000000000000000000000000000000000000000080808FF0000
00FF6E6E6EFF000000000000000000000000000000006D6D6DFF000000FF0A0A
0AFF0000000000000000000000000000000000000000000000003D3D3DFF0000
00FF141414FFE3E3E3FF0000000000000000E1E1E1FF131313FF000000FF3F3F
3FFF000000000000000000000000000000000000000000000000AEAEAEFF0000
00FF000000FF141414FF6D6D6DFF6D6D6DFF131313FF000000FF000000FFB2B2
B2FF000000000000000000000000000000000000000000000000000000007575
75FF000000FF000000FF000000FF000000FF000000FF000000FF787878FF0000
0000000000000000000000000000000000000000000000000000000000000000
0000B0B0B0FF3E3E3EFF0A0A0AFF0A0A0AFF3F3F3FFFB2B2B2FF000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000FF000000FF0000
00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF00000000000000000000000000000000000000FF000000FF0000
00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF00000000000000000000000000000000363636FF000000FF0000
00FF000000FF000000FF000000FF000000FF7F7F7FFF00000000000000000000
00000000000000000000000000000000000000000000000000FF000000FF0000
00FF000000FF000000FF000000FF000000FF7F7F7FFF7F7F7FFF000000000000
00000000000000000000000000000000000000000000000000FF000000FF0000
00FF000000FF000000FF000000FF000000FF7F7F7FFF7F7F7FFF7F7F7FFF0000
00000000000000000000000000000000000000000000000000FF000000FF0000
00FF000000FF000000FF000000FF000000FF7F7F7FFF7F7F7FFF7F7F7FFF7F7F
7FFF0000000000000000000000000000000000000000000000FF000000FF0000
00FF000000FF000000FF000000FF000000FF7F7F7FFF7F7F7FFF7F7F7FFF7F7F
7FFF7F7F7FFF00000000000000000000000000000000000000FF000000FF0000
00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF00000000000000000000000000000000000000FF000000FF0000
00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF00000000000000000000000000000000000000FF000000FF0000
00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF00000000000000000000000000000000000000FF000000FF0000
00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF00000000000000000000000000000000000000FF000000FF0000
00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF00000000000000000000000000000000000000FF000000FF0000
00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF00000000000000000000000000000000000000FF000000FF0000
00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF00000000000000000000000000000000000000FF000000FF0000
00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF00000000000000000000000000000000000000FF000000FF0000
00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF00000000000000000000000000000000000000FF000000FF0000
00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF00000000000000000000000000000000373737FF000000FF0000
00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF3A3A3AFF0000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000363636FF000000FF000000FF0000
00FF000000FF000000FF7F7F7FFF000000000000000000000000000000000000
000000000000000000000000000000000000000000FF000000FF000000FF0000
00FF000000FF000000FF000000FF7F7F7FFF0000000000000000000000000000
000000000000000000000000000000000000000000FF000000FF000000FF0000
00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF373737FF0000000000000000000000FF000000FF000000FF0000
00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF000000FF0000000000000000000000FF000000FF7F7F7FFF7F7F
7FFF7F7F7FFF7F7F7FFF7F7F7FFF7F7F7FFF7F7F7FFF7F7F7FFF7F7F7FFF7F7F
7FFF000000FF000000FF0000000000000000000000FF000000FF7F7F7FFF7F7F
7FFF7F7F7FFF7F7F7FFF7F7F7FFF7F7F7FFF7F7F7FFF7F7F7FFF7F7F7FFF7F7F
7FFF000000FF000000FF0000000000000000000000FF000000FF7F7F7FFF7F7F
7FFF7F7F7FFF7F7F7FFF7F7F7FFF7F7F7FFF7F7F7FFF7F7F7FFF7F7F7FFF7F7F
7FFF000000FF000000FF0000000000000000000000FF000000FF7F7F7FFF7F7F
7FFF7F7F7FFF7F7F7FFF7F7F7FFF7F7F7FFF7F7F7FFF7F7F7FFF7F7F7FFF7F7F
7FFF000000FF000000FF0000000000000000000000FF000000FF7F7F7FFF7F7F
7FFF7F7F7FFF7F7F7FFF7F7F7FFF7F7F7FFF7F7F7FFF7F7F7FFF7F7F7FFF7F7F
7FFF000000FF000000FF0000000000000000000000FF000000FF7F7F7FFF7F7F
7FFF7F7F7FFF7F7F7FFF7F7F7FFF7F7F7FFF7F7F7FFF7F7F7FFF7F7F7FFF7F7F
7FFF000000FF000000FF0000000000000000000000FF000000FF000000FF0000
00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF000000FF0000000000000000373737FF000000FF000000FF0000
00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF3A3A3AFF00000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000B3B3B3FF585858FF4040
40FF3F3F3FFF3F3F3FFFCFCFCFFFCFCFCFFF3F3F3FFF3F3F3FFF404040FF5555
55FFB3B3B3FF0000000000000000000000007C7C7CFF000000FF2E2E2EFF5353
53FF535353FF535353FFD4D4D4FFD4D4D4FF535353FF535353FF535353FF2F2F
2FFF000000FF7C7C7CFF00000000D3D3D3FF010101FF7D7D7DFF000000000000
0000000000000000000000000000000000000000000000000000000000000000
00007A7A7AFF010101FFD3D3D3FF8D8D8DFF070707FFF9F9F9FF000000000000
00003F3F3FFF3F3F3FFF3F3F3FFF3F3F3FFF3F3F3FFF3F3F3FFF000000000000
0000F7F7F7FF050505FF8C8C8CFF8B8B8BFF080808FFF9F9F9FF000000000000
00003F3F3FFF3F3F3FFF3F3F3FFF3F3F3FFF3F3F3FFF3F3F3FFF000000000000
0000F6F6F6FF050505FF8D8D8DFFD2D2D2FF010101FF7B7B7BFF000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000767676FF020202FFD4D4D4FF000000007B7B7BFF000000FF2A2A2AFF4F4F
4FFF4F4F4FFF4F4F4FFFD3D3D3FFD3D3D3FF4F4F4FFF4F4F4FFF4F4F4FFF2929
29FF000000FF7F7F7FFF000000000000000000000000B4B4B4FF575757FF4040
40FF3F3F3FFF3F3F3FFFCFCFCFFFCFCFCFFF3F3F3FFF3F3F3FFF404040FF5858
58FFB6B6B6FF0000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000FF000000FF000000FF0000
00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF000000FF00000000000000FF000000FF000000FF000000FF0000
00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF000000FF000000FF000000FF3E3E3EFF2A2A2AFF000000FF0000
00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0505
05FF383838FF000000FF000000FF191919FFE7E7E7FFD5D5D5FF0A0A0AFF0000
00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF9090
90FFF2F2F2FF2B2B2BFF040404FFC3C3C3FF00000000000000009F9F9FFF0000
00FF000000FF000000FF000000FF000000FF000000FF000000FF575757FF0000
000000000000DDDDDDFF9A9A9AFF000000000000000000000000000000005F5F
5FFF000000FF000000FF000000FF000000FF000000FF292929FFF3F3F3FF0000
000000000000000000000000000000000000000000000000000000000000F5F5
F5FF2A2A2AFF000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF000000FF000000FF00000000000000FF000000FF000000FF0000
00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF000000FF00000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000FF000000FF000000FF0000
00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF000000FF0000000000000000000000FF000000FF000000FF0000
00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF000000FF00000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000FF000000FF000000FF0000
00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF000000FF0000000000000000000000FF000000FF000000FF0000
00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF000000FF00000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000FF000000FF000000FF0000
00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF000000FF0000000000000000000000FF000000FF000000FF0000
00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF000000FF00000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000FF000000FF000000FF0000
00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF000000FF0000000000000000000000FF000000FF000000FF0000
00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF000000FF00000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000FF000000FF0000
000000000000000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF000000FF000000000000000000000000000000FF000000FF0000
000000000000000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF000000FF00000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000FF000000FF0000
000000000000000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF000000FF000000000000000000000000000000FF000000FF0000
000000000000000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF000000FF00000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000FF000000FF0000
000000000000000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF000000FF000000000000000000000000000000FF000000FF0000
000000000000000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF000000FF00000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000FF000000FF000000000000
0000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000FF000000000000
000000000000000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF000000FF000000000000000000000000000000FF000000000000
000000000000000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF000000FF000000000000000000000000000000FF000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000FF000000FF010101FF0000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000005E5E5EFF868686FF0000
000000000000000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF000000FF0000000000000000818181FF636363FF000000000000
000000000000000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF000000FF0000000000000000000000FF000000FF000000FF0000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000FF000000FF000000FF0000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000007F7F7FFF000000FF0000
000000000000000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF000000FF0000000000000000000000007F7F7FFF000000FF0000
000000000000000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF000000FF0000000000000000000000FF000000FF000000FF0000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000FF000000FF000000FF0000
00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF000000FF0000000000000000000000FF000000FF000000FF0000
00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF000000FF00000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000DFDFDFFF00000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000001F1F1FFFDFDFDFFF000000000000
00000000000000000000000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF000000FF0000000000000000000000FF1F1F1FFFDFDFDFFF0000
00000000000000000000000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF000000FF0000000000000000000000FF000000FF1F1F1FFFDFDF
DFFF000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000FF000000FF1F1F1FFFDFDF
DFFF000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000FF1F1F1FFFDFDFDFFF0000
00000000000000000000000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF000000FF00000000000000001F1F1FFFDFDFDFFF000000000000
00000000000000000000000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF000000FF0000000000000000DFDFDFFF00000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000FF000000FF000000FF0000
00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF000000FF0000000000000000000000FF000000FF000000FF0000
00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF000000FF00000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000CFCFCFFF000000FF000000FFD0D0D0FF00000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000006F6F6FFF000000FF000000FF707070FF00000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000FAFAFAFF151515FF050505FF050505FF151515FFFAFAFAFF000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000AFAFAFFF000000FF505050FF4F4F4FFF000000FFB1B1B1FF000000000000
0000000000000000000000000000000000000000000000000000000000000000
00004F4F4FFF000000FFB0B0B0FFAEAEAEFF000000FF515151FF000000000000
000000000000000000000000000000000000000000000000000000000000EAEA
EAFF050505FF161616FFFBFBFBFFF9F9F9FF131313FF050505FFEBEBEBFF0000
0000000000000000000000000000000000000000000000000000000000008F8F
8FFF000000FF707070FF00000000000000006C6C6CFF000000FF929292FF0000
0000000000000000000000000000000000000000000000000000000000002F2F
2FFF000000FF000000FF000000FF000000FF000000FF000000FF323232FF0000
0000000000000000000000000000000000000000000000000000CFCFCFFF0000
00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FFD2D2
D2FF0000000000000000000000000000000000000000000000006F6F6FFF0000
00FF939393FF000000000000000000000000000000008B8B8BFF000000FF7373
73FF0000000000000000000000000000000000000000FAFAFAFF151515FF0606
06FFECECECFF00000000000000000000000000000000E7E7E7FF040404FF1818
18FFFBFBFBFF00000000000000000000000000000000AFAFAFFF000000FF5050
50FF0000000000000000000000000000000000000000000000004B4B4BFF0000
00FFB3B3B3FF0000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000A4A4A4FFA4A4A4FFA4A4A4FFA4A4
A4FFA4A4A4FFA4A4A4FFA4A4A4FFA4A4A4FFA4A4A4FFA4A4A4FFA4A4A4FFA4A4
A4FFA4A4A4FFA4A4A4FF00000000000000000000000000000000FEFEFEFF6868
68FF969696FF0000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000FBFBFBFF5151
51FF010101FF959595FF00000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000FAFA
FAFF303030FF010101FF959595FF000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000009191
91FF000000FF161616FF000000FF959595FF0000000000000000000000000000
0000000000000000000000000000000000000000000000000000909090FF0000
00FF515151FFF5F5F5FF505050FF000000FF959595FF00000000000000000000
000000000000000000000000000000000000000000008F8F8FFF000000FF5151
51FFFAFAFAFF00000000FAFAFAFF4F4F4FFF000000FF949494FF000000000000
000000000000000000000000000000000000909090FF000000FF515151FFFAFA
FAFF000000000000000000000000FAFAFAFF4E4E4EFF000000FF949494FF0000
000000000000000000000000000000000000080808FF000000FF000000FF0000
00FF000000FF000000FF000000FF000000FF000000FF000000FF0D0D0DFF0000
000000000000000000000000000000000000979797FF010101FF000000FF0000
00FF000000FF000000FF000000FF000000FF000000FF010101FF989898FF0000
0000FBFBFBFF00000000000000000000000000000000969696FF010101FF0000
00FF000000FF000000FF000000FF000000FF010101FF969696FF00000000E4E4
E4FF2A2A2AFFE4E4E4FF00000000000000000000000000000000969696FF0101
01FF000000FF000000FF000000FF010101FF969696FF00000000000000005252
52FF000000FF545454FF00000000000000000000000000000000000000009696
96FF010101FF000000FF010101FF969696FF0000000000000000000000000707
07FF000000FF090909FF00000000000000000000000000000000000000000000
0000979797FF0D0D0DFF989898FF000000000000000000000000000000007777
77FF0C0C0CFF7A7A7AFF00000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000A4A4A4FFA4A4A4FFA4A4A4FFA4A4
A4FFA4A4A4FFA4A4A4FFA4A4A4FFA4A4A4FFA4A4A4FFA4A4A4FFA4A4A4FFA4A4
A4FFA4A4A4FFA4A4A4FF00000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000FBFBFBFF848484FFF5F5F5FFFBFB
FBFF545454FF000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF000000FF0000000000000000848484FF000000FF424242FFF5F5
F5FFFBFBFBFF545454FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF000000FF0000000000000000F6F6F6FF424242FF000000FF4242
42FFF5F5F5FF0000000000000000575757FF000000FF292929FFFEFEFEFF0000
00000000000000000000000000000000000000000000F6F6F6FF424242FF0000
00FF424242FFF5F5F5FF00000000585858FF000000FF9D9D9DFF000000000000
0000000000000000000000000000000000000000000000000000F6F6F6FF4343
43FF000000FF424242FFF5F5F5FFFBFBFBFF6F6F6FFFF9F9F9FF000000000000
000000000000000000000000000000000000000000000000000000000000F6F6
F6FF444444FF000000FF424242FFF5F5F5FF0000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000F6F6F6FF323232FF000000FF424242FFF5F5F5FF00000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000F6F6F6FF151515FF000000FF000000FF424242FFF5F5F5FF000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000979797FF000000FF050505FF3B3B3BFF000000FF424242FFF5F5F5FF0000
000000000000000000000000000000000000000000000000000000000000FDFD
FDFF252525FF000000FF5E5E5EFFF5F5F5FF424242FF000000FF424242FFF5F5
F5FF00000000000000000000000000000000000000000000000000000000AEAE
AEFF000000FF000000FFD2D2D2FF00000000F5F5F5FF424242FF000000FF4242
42FFF5F5F5FF0000000000000000000000000000000000000000000000003939
39FF000000FF464646FF000000000000000000000000F5F5F5FF424242FF0000
00FF4C4C4CFF0000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000F5F5F5FF4C4C
4CFFBDBDBDFF0000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000FF000000FF000000FF0000
00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF000000FF0000000000000000000000FF000000FF000000FF0000
00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF000000FF00000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000DFDF
DFFF000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000007F7F7FFF7F7F
7FFF0000000000000000000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF000000FF0000000000000000000000007F7F7FFF000000FF7F7F
7FFF0000000000000000000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF000000FF00000000000000007F7F7FFF000000FF000000FF7F7F
7FFF000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000007F7F7FFF000000FF000000FF7F7F
7FFF000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000007F7F7FFF000000FF7F7F
7FFF0000000000000000000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF000000FF000000000000000000000000000000007F7F7FFF7F7F
7FFF0000000000000000000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF000000FF0000000000000000000000000000000000000000DFDF
DFFF000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000FF000000FF000000FF0000
00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF000000FF0000000000000000000000FF000000FF000000FF0000
00FF000000FF000000FF000000FF000000FF000000FF000000FF000000FF0000
00FF000000FF000000FF00000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000000000000000000000000
0000000000000000000000000000
}
end
object OpenDialog1: TOpenDialog
left = 128
top = 88
end
object SaveDialog1: TSaveDialog
left = 128
top = 144
end
object ColorDialog1: TColorDialog
Color = clBlack
CustomColors.Strings = (
'ColorA=000000'
'ColorB=000080'
'ColorC=008000'
'ColorD=008080'
'ColorE=800000'
'ColorF=800080'
'ColorG=808000'
'ColorH=808080'
'ColorI=C0C0C0'
'ColorJ=0000FF'
'ColorK=00FF00'
'ColorL=00FFFF'
'ColorM=FF0000'
'ColorN=FF00FF'
'ColorO=FFFF00'
'ColorP=FFFFFF'
'ColorQ=C0DCC0'
'ColorR=F0CAA6'
'ColorS=F0FBFF'
'ColorT=A4A0A0'
)
left = 128
top = 200
end
end

View File

@ -0,0 +1,508 @@
// ************************************************************************
// ***************************** 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 © 2019 Salvador Diaz 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 uEditorBrowser;
{$MODE Delphi}
{$I cef.inc}
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics,
Controls, Forms, Dialogs, StdCtrls, ExtCtrls, ToolWin, ComCtrls,
ImgList,
uCEFChromium, uCEFWindowParent, uCEFInterfaces, uCEFConstants, uCEFTypes,
uCEFWinControl;
type
TForm1 = class(TForm)
Timer1: TTimer;
Chromium1: TChromium;
CEFWindowParent1: TCEFWindowParent;
ToolBar1: TToolBar;
SaveBtn: TToolButton;
ImageList1: TImageList;
Separator1: TToolButton;
BoldBtn: TToolButton;
ItalicBtn: TToolButton;
UnderlineBtn: TToolButton;
StrikethroughBtn: TToolButton;
Separator2: TToolButton;
AlignLeftBtn: TToolButton;
AlignCenterBtn: TToolButton;
AlignRightBtn: TToolButton;
OpenBtn: TToolButton;
NewBtn: TToolButton;
OpenDialog1: TOpenDialog;
SaveDialog1: TSaveDialog;
Separator3: TToolButton;
LinkBtn: TToolButton;
ImageBtn: TToolButton;
AlignJustifyBtn: TToolButton;
Separator4: TToolButton;
UnorderedListBtn: TToolButton;
OrderedListBtn: TToolButton;
ColorDialog1: TColorDialog;
Separator5: TToolButton;
IndentBtn: TToolButton;
TextColorBtn: TToolButton;
FillColorBtn: TToolButton;
Separator6: TToolButton;
RemoveFormatBtn: TToolButton;
OutdentBtn: TToolButton;
Separator7: TToolButton;
procedure Timer1Timer(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure Chromium1AfterCreated(Sender: TObject; const browser: ICefBrowser);
procedure Chromium1Close(Sender: TObject; const browser: ICefBrowser; var aAction : TCefCloseBrowserAction);
procedure Chromium1BeforeClose(Sender: TObject; const browser: ICefBrowser);
procedure Chromium1LoadEnd(Sender: TObject; const browser: ICefBrowser; const frame: ICefFrame; httpStatusCode: Integer);
procedure Chromium1TextResultAvailable(Sender: TObject; const aText: ustring);
procedure BoldBtnClick(Sender: TObject);
procedure ItalicBtnClick(Sender: TObject);
procedure UnderlineBtnClick(Sender: TObject);
procedure StrikethroughBtnClick(Sender: TObject);
procedure AlignLeftBtnClick(Sender: TObject);
procedure AlignCenterBtnClick(Sender: TObject);
procedure AlignRightBtnClick(Sender: TObject);
procedure SaveBtnClick(Sender: TObject);
procedure NewBtnClick(Sender: TObject);
procedure OpenBtnClick(Sender: TObject);
procedure LinkBtnClick(Sender: TObject);
procedure ImageBtnClick(Sender: TObject);
procedure AlignJustifyBtnClick(Sender: TObject);
procedure UnorderedListBtnClick(Sender: TObject);
procedure OrderedListBtnClick(Sender: TObject);
procedure IndentBtnClick(Sender: TObject);
procedure TextColorBtnClick(Sender: TObject);
procedure FillColorBtnClick(Sender: TObject);
procedure RemoveFormatBtnClick(Sender: TObject);
procedure OutdentBtnClick(Sender: TObject);
protected
// Variables to control when can we destroy the form safely
FCanClose : boolean; // Set to True in TChromium.OnBeforeClose
FClosing : boolean; // Set to True in the CloseQuery event.
procedure EnableDesignMode;
// You have to handle this two messages to call NotifyMoveOrResizeStarted or some page elements will be misaligned.
procedure WMMove(var aMessage : TWMMove); message WM_MOVE;
procedure WMMoving(var aMessage : TMessage); message WM_MOVING;
// You also have to handle these two messages to set GlobalCEFApp.OsmodalLoop
procedure WMEnterMenuLoop(var aMessage: TMessage); message WM_ENTERMENULOOP;
procedure WMExitMenuLoop(var aMessage: TMessage); message WM_EXITMENULOOP;
procedure BrowserCreatedMsg(var aMessage : TMessage); message CEF_AFTERCREATED;
procedure BrowserDestroyMsg(var aMessage : TMessage); message CEF_DESTROY;
public
{ Public declarations }
end;
var
Form1: TForm1;
procedure CreateGlobalCEFApp;
implementation
{$R *.lfm}
uses
uCEFApplication, uCEFMiscFunctions;
// This demo shows how to create a simple editor using a browser.
// It's possible to add many more editor commands available with the JavaScript function called 'execCommand'
// https://developer.mozilla.org/en-US/docs/Web/API/Document/execCommand
// There are several TODO comments with some missing features that all editors should have
// This demo includes some icons from "Material Design Icons", made by Google ( https://github.com/google/material-design-icons )
// Destruction steps
// =================
// 1. FormCloseQuery sets CanClose to FALSE calls TChromium.CloseBrowser which triggers the TChromium.OnClose event.
// 2. TChromium.OnClose sends a CEFBROWSER_DESTROY message to destroy CEFWindowParent1 in the main thread, which triggers the TChromium.OnBeforeClose event.
// 3. TChromium.OnBeforeClose sets FCanClose := True and sends WM_CLOSE to the form.
procedure CreateGlobalCEFApp;
begin
GlobalCEFApp := TCefApplication.Create;
GlobalCEFApp.DisableFeatures := 'NetworkService';
end;
procedure TForm1.FillColorBtnClick(Sender: TObject);
var
TempCode, TempHexColor : string;
begin
if ColorDialog1.execute then
begin
TempHexColor := '#' + IntToHex(GetRValue(ColorDialog1.Color), 2) +
IntToHex(GetGValue(ColorDialog1.Color), 2) +
IntToHex(GetBValue(ColorDialog1.Color), 2);
TempCode := 'document.execCommand("backColor", false, "' + TempHexColor + '");';
Chromium1.ExecuteJavaScript(TempCode, 'about:blank');
end;
end;
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
CanClose := FCanClose;
if not(FClosing) then
begin
FClosing := True;
Visible := False;
Chromium1.CloseBrowser(True);
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
FCanClose := False;
FClosing := False;
Chromium1.DefaultURL := 'file:///EditorBrowser.html';
end;
procedure TForm1.FormShow(Sender: TObject);
begin
// You *MUST* call CreateBrowser to create and initialize the browser.
// This will trigger the AfterCreated event when the browser is fully
// initialized and ready to receive commands.
// GlobalCEFApp.GlobalContextInitialized has to be TRUE before creating any browser
// If it's not initialized yet, we use a simple timer to create the browser later.
if not(Chromium1.CreateBrowser(CEFWindowParent1)) then Timer1.Enabled := True;
end;
procedure TForm1.Chromium1AfterCreated(Sender: TObject; const browser: ICefBrowser);
begin
// Now the browser is fully initialized we can send a message to the main form to load the initial web page.
PostMessage(Handle, CEF_AFTERCREATED, 0, 0);
end;
procedure TForm1.Chromium1BeforeClose(Sender: TObject;
const browser: ICefBrowser);
begin
FCanClose := True;
PostMessage(Handle, WM_CLOSE, 0, 0);
end;
procedure TForm1.Chromium1Close(Sender: TObject;
const browser: ICefBrowser; var aAction : TCefCloseBrowserAction);
begin
PostMessage(Handle, CEF_DESTROY, 0, 0);
aAction := cbaDelay;
end;
procedure TForm1.Chromium1LoadEnd(Sender: TObject;
const browser: ICefBrowser; const frame: ICefFrame;
httpStatusCode: Integer);
begin
if (frame <> nil) and not(frame.isMain) then exit;
// Enable the "designMode" for all loaded files to edit them
EnableDesignMode;
end;
procedure TForm1.Chromium1TextResultAvailable(Sender: TObject; const aText: ustring);
var
TempLines : TStringList;
begin
// TODO: This function should notify the user if an existing file is replaced
TempLines := nil;
SaveDialog1.DefaultExt := '.html';
SaveDialog1.Filter := 'HTML Files (*.html)|*.HTML';
if SaveDialog1.Execute then
try
try
TempLines := TStringList.Create;
TempLines.Text := aText;
TempLines.SaveToFile(SaveDialog1.FileName);
except
on e : exception do
if CustomExceptionHandler('TForm1.Chromium1TextResultAvailable', e) then raise;
end;
finally
if (TempLines <> nil) then FreeAndNil(TempLines);
end;
end;
procedure TForm1.TextColorBtnClick(Sender: TObject);
var
TempCode, TempHexColor : string;
begin
if ColorDialog1.execute then
begin
TempHexColor := '#' + IntToHex(GetRValue(ColorDialog1.Color), 2) +
IntToHex(GetGValue(ColorDialog1.Color), 2) +
IntToHex(GetBValue(ColorDialog1.Color), 2);
TempCode := 'document.execCommand("foreColor", false, "' + TempHexColor + '");';
Chromium1.ExecuteJavaScript(TempCode, 'about:blank');
end;
end;
procedure TForm1.EnableDesignMode;
var
TempCode : string;
begin
TempCode := 'document.designMode = "on";';
Chromium1.ExecuteJavaScript(TempCode, 'about:blank');
end;
procedure TForm1.AlignCenterBtnClick(Sender: TObject);
var
TempCode : string;
begin
TempCode := 'document.execCommand("justifyCenter", false, null);';
Chromium1.ExecuteJavaScript(TempCode, 'about:blank');
end;
procedure TForm1.AlignJustifyBtnClick(Sender: TObject);
var
TempCode : string;
begin
TempCode := 'document.execCommand("justifyFull", false, null);';
Chromium1.ExecuteJavaScript(TempCode, 'about:blank');
end;
procedure TForm1.AlignLeftBtnClick(Sender: TObject);
var
TempCode : string;
begin
TempCode := 'document.execCommand("justifyLeft", false, null);';
Chromium1.ExecuteJavaScript(TempCode, 'about:blank');
end;
procedure TForm1.AlignRightBtnClick(Sender: TObject);
var
TempCode : string;
begin
TempCode := 'document.execCommand("justifyRight", false, null);';
Chromium1.ExecuteJavaScript(TempCode, 'about:blank');
end;
procedure TForm1.BoldBtnClick(Sender: TObject);
var
TempCode : string;
begin
TempCode := 'document.execCommand("bold", false, null);';
Chromium1.ExecuteJavaScript(TempCode, 'about:blank');
end;
procedure TForm1.ImageBtnClick(Sender: TObject);
var
TempCode, TempURL : string;
begin
// TODO: Replace InputBox
TempURL := inputbox('Type the URL used in the image', 'URL : ', 'https://www.briskbard.com/images/logo5.png');
TempCode := 'document.execCommand("insertImage", false, "' + TempURL + '");';
Chromium1.ExecuteJavaScript(TempCode, 'about:blank');
end;
procedure TForm1.IndentBtnClick(Sender: TObject);
var
TempCode : string;
begin
TempCode := 'document.execCommand("indent", false, null);';
Chromium1.ExecuteJavaScript(TempCode, 'about:blank');
end;
procedure TForm1.ItalicBtnClick(Sender: TObject);
var
TempCode : string;
begin
TempCode := 'document.execCommand("italic", false, null);';
Chromium1.ExecuteJavaScript(TempCode, 'about:blank');
end;
procedure TForm1.LinkBtnClick(Sender: TObject);
var
TempCode, TempURL : string;
begin
// TODO: Replace InputBox
TempURL := inputbox('Type the URL used in the link', 'URL : ', 'https://www.briskbard.com');
TempCode := 'document.execCommand("createLink", false, "' + TempURL + '");';
Chromium1.ExecuteJavaScript(TempCode, 'about:blank');
end;
procedure TForm1.SaveBtnClick(Sender: TObject);
begin
Chromium1.RetrieveHTML;
end;
procedure TForm1.StrikethroughBtnClick(Sender: TObject);
var
TempCode : string;
begin
TempCode := 'document.execCommand("strikeThrough", false, null);';
Chromium1.ExecuteJavaScript(TempCode, 'about:blank');
end;
procedure TForm1.UnderlineBtnClick(Sender: TObject);
var
TempCode : string;
begin
TempCode := 'document.execCommand("underline", false, null);';
Chromium1.ExecuteJavaScript(TempCode, 'about:blank');
end;
procedure TForm1.UnorderedListBtnClick(Sender: TObject);
var
TempCode : string;
begin
TempCode := 'document.execCommand("insertUnorderedList", false, null);';
Chromium1.ExecuteJavaScript(TempCode, 'about:blank');
end;
procedure TForm1.BrowserCreatedMsg(var aMessage : TMessage);
begin
Caption := 'Editor Browser';
end;
procedure TForm1.BrowserDestroyMsg(var aMessage : TMessage);
begin
CEFWindowParent1.Free;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Timer1.Enabled := False;
if not(Chromium1.CreateBrowser(CEFWindowParent1)) and not(Chromium1.Initialized) then
Timer1.Enabled := True;
end;
procedure TForm1.OpenBtnClick(Sender: TObject);
begin
OpenDialog1.Filter := 'HTML Files (*.html)|*.HTML';
if OpenDialog1.Execute then
Chromium1.LoadURL('file:///' + OpenDialog1.FileName); // TODO: The URL should be encoded
end;
procedure TForm1.OrderedListBtnClick(Sender: TObject);
var
TempCode : string;
begin
TempCode := 'document.execCommand("insertOrderedList", false, null);';
Chromium1.ExecuteJavaScript(TempCode, 'about:blank');
end;
procedure TForm1.OutdentBtnClick(Sender: TObject);
var
TempCode : string;
begin
TempCode := 'document.execCommand("outdent", false, null);';
Chromium1.ExecuteJavaScript(TempCode, 'about:blank');
end;
procedure TForm1.RemoveFormatBtnClick(Sender: TObject);
var
TempCode : string;
begin
TempCode := 'document.execCommand("removeFormat", false, null);';
Chromium1.ExecuteJavaScript(TempCode, 'about:blank');
end;
procedure TForm1.NewBtnClick(Sender: TObject);
begin
// TODO: Before clearing the document we should notify the user if the document has unsaved changes
Chromium1.LoadURL('about:blank');
EnableDesignMode;
end;
procedure TForm1.WMMove(var aMessage : TWMMove);
begin
inherited;
if (Chromium1 <> nil) then Chromium1.NotifyMoveOrResizeStarted;
end;
procedure TForm1.WMMoving(var aMessage : TMessage);
begin
inherited;
if (Chromium1 <> nil) then Chromium1.NotifyMoveOrResizeStarted;
end;
procedure TForm1.WMEnterMenuLoop(var aMessage: TMessage);
begin
inherited;
if (aMessage.wParam = 0) and (GlobalCEFApp <> nil) then GlobalCEFApp.OsmodalLoop := True;
end;
procedure TForm1.WMExitMenuLoop(var aMessage: TMessage);
begin
inherited;
if (aMessage.wParam = 0) and (GlobalCEFApp <> nil) then GlobalCEFApp.OsmodalLoop := False;
end;
end.

View File

@ -23,7 +23,7 @@
<IsVisibleTab Value="True"/>
<EditorIndex Value="1"/>
<TopLine Value="185"/>
<CursorPos X="3" Y="187"/>
<CursorPos Y="199"/>
<UsageCount Value="26"/>
<Loaded Value="True"/>
<LoadedDesigner Value="True"/>

View File

@ -194,8 +194,8 @@ begin
GlobalCEFApp.WindowlessRenderingEnabled := True;
GlobalCEFApp.EnableHighDPISupport := True;
GlobalCEFApp.ExternalMessagePump := True;
GlobalCEFApp.MultiThreadedMessageLoop := False;
//GlobalCEFApp.DisableFeatures := 'NetworkService';
GlobalCEFApp.MultiThreadedMessageLoop := False;
GlobalCEFApp.DisableFeatures := 'NetworkService,VizDisplayCompositor';
GlobalCEFApp.OnScheduleMessagePumpWork := @GlobalCEFApp_OnScheduleMessagePumpWork;
end;

View File

@ -23,7 +23,7 @@
<ResourceBaseClass Value="Form"/>
<IsVisibleTab Value="True"/>
<TopLine Value="145"/>
<CursorPos X="5" Y="150"/>
<CursorPos Y="151"/>
<UsageCount Value="22"/>
<Loaded Value="True"/>
<LoadedDesigner Value="True"/>

View File

@ -147,7 +147,7 @@ begin
GlobalCEFApp := TCefApplication.Create;
GlobalCEFApp.WindowlessRenderingEnabled := True;
GlobalCEFApp.EnableHighDPISupport := True;
//GlobalCEFApp.DisableFeatures := 'NetworkService';
GlobalCEFApp.DisableFeatures := 'NetworkService,VizDisplayCompositor';
end;
procedure TMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);

View File

@ -39,7 +39,7 @@
<ResourceBaseClass Value="Form"/>
<IsVisibleTab Value="True"/>
<TopLine Value="161"/>
<CursorPos X="29" Y="173"/>
<CursorPos Y="179"/>
<UsageCount Value="42"/>
<Bookmarks Count="1">
<Item0 X="40" Y="262" ID="4"/>

View File

@ -175,7 +175,7 @@ begin
GlobalCEFApp := TCefApplication.Create;
GlobalCEFApp.WindowlessRenderingEnabled := True;
GlobalCEFApp.EnableHighDPISupport := True;
//GlobalCEFApp.DisableFeatures := 'NetworkService';
GlobalCEFApp.DisableFeatures := 'NetworkService,VizDisplayCompositor';
end;
procedure TForm1.GoBtnClick(Sender: TObject);

Binary file not shown.

View File

@ -21,7 +21,7 @@
</CompilerOptions>
<Description Value="CEF4Delphi is an open source project created by Salvador Díaz Fau to embed Chromium-based browsers in applications made with Delphi or Lazarus/FPC."/>
<License Value="MPL 1.1"/>
<Version Major="75" Release="13"/>
<Version Major="75" Minor="1" Release="4"/>
<Files Count="143">
<Item1>
<Filename Value="..\source\uCEFAccessibilityHandler.pas"/>

View File

@ -61,8 +61,8 @@ uses
const
CEF_SUPPORTED_VERSION_MAJOR = 75;
CEF_SUPPORTED_VERSION_MINOR = 0;
CEF_SUPPORTED_VERSION_RELEASE = 13;
CEF_SUPPORTED_VERSION_MINOR = 1;
CEF_SUPPORTED_VERSION_RELEASE = 4;
CEF_SUPPORTED_VERSION_BUILD = 0;
CEF_CHROMEELF_VERSION_MAJOR = 75;

View File

@ -422,7 +422,7 @@ type
function doOnBeforeBrowse(const browser: ICefBrowser; const frame: ICefFrame; const request: ICefRequest; user_gesture, isRedirect: Boolean): Boolean; virtual;
function doOnOpenUrlFromTab(const browser: ICefBrowser; const frame: ICefFrame; const targetUrl: ustring; targetDisposition: TCefWindowOpenDisposition; userGesture: Boolean): Boolean; virtual;
procedure doOnGetResourceRequestHandler(const browser: ICefBrowser; const frame: ICefFrame; const request: ICefRequest; is_navigation, is_download: boolean; const request_initiator: ustring; var disable_default_handling: boolean; var aResourceRequestHandler : ICefResourceRequestHandler; var aUseInternalHandler : boolean); virtual;
function doOnGetAuthCredentials(const browser: ICefBrowser; const frame: ICefFrame; isProxy: Boolean; const host: ustring; port: Integer; const realm, scheme: ustring; const callback: ICefAuthCallback): Boolean; virtual;
function doOnGetAuthCredentials(const browser: ICefBrowser; const originUrl: ustring; isProxy: Boolean; const host: ustring; port: Integer; const realm, scheme: ustring; const callback: ICefAuthCallback): Boolean; virtual;
function doOnQuotaRequest(const browser: ICefBrowser; const originUrl: ustring; newSize: Int64; const callback: ICefRequestCallback): Boolean; virtual;
function doOnCertificateError(const browser: ICefBrowser; certError: TCefErrorcode; const requestUrl: ustring; const sslInfo: ICefSslInfo; const callback: ICefRequestCallback): Boolean; virtual;
function doOnSelectClientCertificate(const browser: ICefBrowser; isProxy: boolean; const host: ustring; port: integer; certificatesCount: NativeUInt; const certificates: TCefX509CertificateArray; const callback: ICefSelectClientCertificateCallback): boolean; virtual;
@ -3652,14 +3652,14 @@ begin
if Assigned(FOnFullScreenModeChange) then FOnFullScreenModeChange(Self, browser, fullscreen);
end;
function TChromium.doOnGetAuthCredentials(const browser : ICefBrowser;
const frame : ICefFrame;
isProxy : Boolean;
const host : ustring;
port : Integer;
const realm : ustring;
const scheme : ustring;
const callback : ICefAuthCallback): Boolean;
function TChromium.doOnGetAuthCredentials(const browser : ICefBrowser;
const originUrl : ustring;
isProxy : Boolean;
const host : ustring;
port : Integer;
const realm : ustring;
const scheme : ustring;
const callback : ICefAuthCallback): Boolean;
begin
Result := False;
@ -3672,8 +3672,8 @@ begin
end;
end
else
if (frame <> nil) and frame.IsMain and Assigned(FOnGetAuthCredentials) then
FOnGetAuthCredentials(Self, browser, frame, isProxy, host, port, realm, scheme, callback, Result);
if Assigned(FOnGetAuthCredentials) then
FOnGetAuthCredentials(Self, browser, originUrl, isProxy, host, port, realm, scheme, callback, Result);
end;
function TChromium.doCanSendCookie(const browser : ICefBrowser;

View File

@ -111,7 +111,7 @@ type
// ICefRequestHandler
TOnBeforeBrowse = procedure(Sender: TObject; const browser: ICefBrowser; const frame: ICefFrame; const request: ICefRequest; user_gesture, isRedirect: Boolean; out Result: Boolean) of object;
TOnOpenUrlFromTab = procedure(Sender: TObject; const browser: ICefBrowser; const frame: ICefFrame; const targetUrl: ustring; targetDisposition: TCefWindowOpenDisposition; userGesture: Boolean; out Result: Boolean) of Object;
TOnGetAuthCredentials = procedure(Sender: TObject; const browser: ICefBrowser; const frame: ICefFrame; isProxy: Boolean; const host: ustring; port: Integer; const realm, scheme: ustring; const callback: ICefAuthCallback; out Result: Boolean) of object;
TOnGetAuthCredentials = procedure(Sender: TObject; const browser: ICefBrowser; const originUrl: ustring; isProxy: Boolean; const host: ustring; port: Integer; const realm, scheme: ustring; const callback: ICefAuthCallback; out Result: Boolean) of object;
TOnQuotaRequest = procedure(Sender: TObject; const browser: ICefBrowser; const originUrl: ustring; newSize: Int64; const callback: ICefRequestCallback; out Result: Boolean) of object;
TOnCertificateError = procedure(Sender: TObject; const browser: ICefBrowser; certError: TCefErrorcode; const requestUrl: ustring; const sslInfo: ICefSslInfo; const callback: ICefRequestCallback; out Result: Boolean) of Object;
TOnSelectClientCertificate = procedure(Sender: TObject; const browser: ICefBrowser; isProxy: boolean; const host: ustring; port: integer; certificatesCount: NativeUInt; const certificates: TCefX509CertificateArray; const callback: ICefSelectClientCertificateCallback; var aResult : boolean) of object;

View File

@ -389,7 +389,7 @@ type
function doOnBeforeBrowse(const browser: ICefBrowser; const frame: ICefFrame; const request: ICefRequest; user_gesture, isRedirect: Boolean): Boolean; virtual;
function doOnOpenUrlFromTab(const browser: ICefBrowser; const frame: ICefFrame; const targetUrl: ustring; targetDisposition: TCefWindowOpenDisposition; userGesture: Boolean): Boolean; virtual;
procedure doOnGetResourceRequestHandler(const browser: ICefBrowser; const frame: ICefFrame; const request: ICefRequest; is_navigation, is_download: boolean; const request_initiator: ustring; var disable_default_handling: boolean; var aResourceRequestHandler : ICefResourceRequestHandler; var aUseInternalHandler : boolean); virtual;
function doOnGetAuthCredentials(const browser: ICefBrowser; const frame: ICefFrame; isProxy: Boolean; const host: ustring; port: Integer; const realm, scheme: ustring; const callback: ICefAuthCallback): Boolean; virtual;
function doOnGetAuthCredentials(const browser: ICefBrowser; const originUrl: ustring; isProxy: Boolean; const host: ustring; port: Integer; const realm, scheme: ustring; const callback: ICefAuthCallback): Boolean; virtual;
function doOnQuotaRequest(const browser: ICefBrowser; const originUrl: ustring; newSize: Int64; const callback: ICefRequestCallback): Boolean; virtual;
function doOnCertificateError(const browser: ICefBrowser; certError: TCefErrorcode; const requestUrl: ustring; const sslInfo: ICefSslInfo; const callback: ICefRequestCallback): Boolean; virtual;
function doOnSelectClientCertificate(const browser: ICefBrowser; isProxy: boolean; const host: ustring; port: integer; certificatesCount: NativeUInt; const certificates: TCefX509CertificateArray; const callback: ICefSelectClientCertificateCallback): boolean; virtual;
@ -518,6 +518,9 @@ type
procedure ResolveHost(const aURL : ustring);
function IsSameBrowser(const aBrowser : ICefBrowser) : boolean;
procedure ShowDevTools(inspectElementAt: TPoint);
procedure CloseDevTools;
procedure Find(aIdentifier : integer; const aSearchText : ustring; aForward, aMatchCase, aFindNext : Boolean);
procedure StopFinding(aClearSelection : Boolean);
@ -2907,6 +2910,47 @@ begin
if assigned(FOnPdfPrintFinished) then FOnPdfPrintFinished(self, aResultOK);
end;
procedure TFMXChromium.ShowDevTools(inspectElementAt: TPoint);
var
TempPoint : TCefPoint;
TempClient : ICefClient;
TempPPoint : PCefPoint;
begin
try
try
if Initialized then
begin
InitializeSettings(FDevBrowserSettings);
WindowInfoAsPopUp(FDevWindowInfo, WindowHandle, DEVTOOLS_WINDOWNAME);
TempClient := TCustomClientHandler.Create(Self, True);
if (inspectElementAt.x <> low(integer)) and
(inspectElementAt.y <> low(integer)) then
begin
TempPoint.x := inspectElementAt.x;
TempPoint.y := inspectElementAt.y;
TempPPoint := @TempPoint;
end
else
TempPPoint := nil;
FBrowser.Host.ShowDevTools(@FDevWindowInfo, TempClient, @FDevBrowserSettings, TempPPoint);
end;
except
on e : exception do
if CustomExceptionHandler('TFMXChromium.ShowDevTools', e) then raise;
end;
finally
TempClient := nil;
end;
end;
procedure TFMXChromium.CloseDevTools;
begin
if Initialized then FBrowser.Host.CloseDevTools;
end;
function TFMXChromium.doOnClose(const browser: ICefBrowser): Boolean;
var
TempAction : TCefCloseBrowserAction;
@ -3218,14 +3262,14 @@ begin
if Assigned(FOnFullScreenModeChange) then FOnFullScreenModeChange(Self, browser, fullscreen);
end;
function TFMXChromium.doOnGetAuthCredentials(const browser : ICefBrowser;
const frame : ICefFrame;
isProxy : Boolean;
const host : ustring;
port : Integer;
const realm : ustring;
const scheme : ustring;
const callback : ICefAuthCallback): Boolean;
function TFMXChromium.doOnGetAuthCredentials(const browser : ICefBrowser;
const originUrl : ustring;
isProxy : Boolean;
const host : ustring;
port : Integer;
const realm : ustring;
const scheme : ustring;
const callback : ICefAuthCallback): Boolean;
begin
Result := False;
@ -3238,8 +3282,8 @@ begin
end;
end
else
if (frame <> nil) and frame.IsMain and Assigned(FOnGetAuthCredentials) then
FOnGetAuthCredentials(Self, browser, frame, isProxy, host, port, realm, scheme, callback, Result);
if Assigned(FOnGetAuthCredentials) then
FOnGetAuthCredentials(Self, browser, originUrl, isProxy, host, port, realm, scheme, callback, Result);
end;
function TFMXChromium.doCanSendCookie(const browser : ICefBrowser;

View File

@ -324,7 +324,7 @@ type
function doOnBeforeBrowse(const browser: ICefBrowser; const frame: ICefFrame; const request: ICefRequest; user_gesture, isRedirect: Boolean): Boolean;
function doOnOpenUrlFromTab(const browser: ICefBrowser; const frame: ICefFrame; const targetUrl: ustring; targetDisposition: TCefWindowOpenDisposition; userGesture: Boolean): Boolean;
procedure doOnGetResourceRequestHandler(const browser: ICefBrowser; const frame: ICefFrame; const request: ICefRequest; is_navigation, is_download: boolean; const request_initiator: ustring; var disable_default_handling: boolean; var aResourceRequestHandler : ICefResourceRequestHandler; var aUseInternalHandler : boolean);
function doOnGetAuthCredentials(const browser: ICefBrowser; const frame: ICefFrame; isProxy: Boolean; const host: ustring; port: Integer; const realm, scheme: ustring; const callback: ICefAuthCallback): Boolean;
function doOnGetAuthCredentials(const browser: ICefBrowser; const originUrl: ustring; isProxy: Boolean; const host: ustring; port: Integer; const realm, scheme: ustring; const callback: ICefAuthCallback): Boolean;
function doOnQuotaRequest(const browser: ICefBrowser; const originUrl: ustring; newSize: Int64; const callback: ICefRequestCallback): Boolean;
function doOnCertificateError(const browser: ICefBrowser; certError: TCefErrorcode; const requestUrl: ustring; const sslInfo: ICefSslInfo; const callback: ICefRequestCallback): Boolean;
function doOnSelectClientCertificate(const browser: ICefBrowser; isProxy: boolean; const host: ustring; port: integer; certificatesCount: NativeUInt; const certificates: TCefX509CertificateArray; const callback: ICefSelectClientCertificateCallback): boolean;
@ -1678,7 +1678,7 @@ type
function OnBeforeBrowse(const browser: ICefBrowser; const frame: ICefFrame; const request: ICefRequest; user_gesture, isRedirect: Boolean): Boolean;
function OnOpenUrlFromTab(const browser: ICefBrowser; const frame: ICefFrame; const targetUrl: ustring; targetDisposition: TCefWindowOpenDisposition; userGesture: Boolean): Boolean;
procedure GetResourceRequestHandler(const browser: ICefBrowser; const frame: ICefFrame; const request: ICefRequest; is_navigation, is_download: boolean; const request_initiator: ustring; var disable_default_handling: boolean; var aResourceRequestHandler : ICefResourceRequestHandler);
function GetAuthCredentials(const browser: ICefBrowser; const frame: ICefFrame; isProxy: Boolean; const host: ustring; port: Integer; const realm, scheme: ustring; const callback: ICefAuthCallback): Boolean;
function GetAuthCredentials(const browser: ICefBrowser; const originUrl: ustring; isProxy: Boolean; const host: ustring; port: Integer; const realm, scheme: ustring; const callback: ICefAuthCallback): Boolean;
function OnQuotaRequest(const browser: ICefBrowser; const originUrl: ustring; newSize: Int64; const callback: ICefRequestCallback): Boolean;
function OnCertificateError(const browser: ICefBrowser; certError: TCefErrorcode; const requestUrl: ustring; const sslInfo: ICefSslInfo; const callback: ICefRequestCallback): Boolean;
function OnSelectClientCertificate(const browser: ICefBrowser; isProxy: boolean; const host: ustring; port: integer; certificatesCount: NativeUInt; const certificates: TCefX509CertificateArray; const callback: ICefSelectClientCertificateCallback): boolean;
@ -2014,6 +2014,7 @@ type
function CanSetPreference(const name: ustring): Boolean;
function SetPreference(const name: ustring; const value: ICefValue; out error: ustring): Boolean;
procedure ClearCertificateExceptions(const callback: ICefCompletionCallback);
procedure ClearHttpAuthCredentials(const callback: ICefCompletionCallback);
procedure CloseAllConnections(const callback: ICefCompletionCallback);
procedure ResolveHost(const origin: ustring; const callback: ICefResolveCallback);
procedure LoadExtension(const root_directory: ustring; const manifest: ICefDictionaryValue; const handler: ICefExtensionHandler);

View File

@ -75,6 +75,7 @@ type
function CanSetPreference(const name: ustring): Boolean;
function SetPreference(const name: ustring; const value: ICefValue; out error: ustring): Boolean;
procedure ClearCertificateExceptions(const callback: ICefCompletionCallback);
procedure ClearHttpAuthCredentials(const callback: ICefCompletionCallback);
procedure CloseAllConnections(const callback: ICefCompletionCallback);
procedure ResolveHost(const origin: ustring; const callback: ICefResolveCallback);
procedure LoadExtension(const root_directory: ustring; const manifest: ICefDictionaryValue; const handler: ICefExtensionHandler);
@ -220,6 +221,11 @@ begin
PCefRequestContext(FData)^.clear_certificate_exceptions(PCefRequestContext(FData), CefGetData(callback));
end;
procedure TCefRequestContextRef.ClearHttpAuthCredentials(const callback: ICefCompletionCallback);
begin
PCefRequestContext(FData)^.clear_http_auth_credentials(PCefRequestContext(FData), CefGetData(callback));
end;
procedure TCefRequestContextRef.CloseAllConnections(const callback: ICefCompletionCallback);
begin
PCefRequestContext(FData)^.close_all_connections(PCefRequestContext(FData), CefGetData(callback));

View File

@ -57,7 +57,7 @@ type
function OnBeforeBrowse(const browser: ICefBrowser; const frame: ICefFrame; const request: ICefRequest; user_gesture, isRedirect: Boolean): Boolean; virtual;
function OnOpenUrlFromTab(const browser: ICefBrowser; const frame: ICefFrame; const targetUrl: ustring; targetDisposition: TCefWindowOpenDisposition; userGesture: Boolean): Boolean; virtual;
procedure GetResourceRequestHandler(const browser: ICefBrowser; const frame: ICefFrame; const request: ICefRequest; is_navigation, is_download: boolean; const request_initiator: ustring; var disable_default_handling: boolean; var aResourceRequestHandler : ICefResourceRequestHandler); virtual;
function GetAuthCredentials(const browser: ICefBrowser; const frame: ICefFrame; isProxy: Boolean; const host: ustring; port: Integer; const realm, scheme: ustring; const callback: ICefAuthCallback): Boolean; virtual;
function GetAuthCredentials(const browser: ICefBrowser; const originUrl: ustring; isProxy: Boolean; const host: ustring; port: Integer; const realm, scheme: ustring; const callback: ICefAuthCallback): Boolean; virtual;
function OnQuotaRequest(const browser: ICefBrowser; const originUrl: ustring; newSize: Int64; const callback: ICefRequestCallback): Boolean; virtual;
function OnCertificateError(const browser: ICefBrowser; certError: TCefErrorcode; const requestUrl: ustring; const sslInfo: ICefSslInfo; const callback: ICefRequestCallback): Boolean; virtual;
function OnSelectClientCertificate(const browser: ICefBrowser; isProxy: boolean; const host: ustring; port: integer; certificatesCount: NativeUInt; const certificates: TCefX509CertificateArray; const callback: ICefSelectClientCertificateCallback): boolean; virtual;
@ -79,7 +79,7 @@ type
function OnBeforeBrowse(const browser: ICefBrowser; const frame: ICefFrame; const request: ICefRequest; user_gesture, isRedirect: Boolean): Boolean; override;
function OnOpenUrlFromTab(const browser: ICefBrowser; const frame: ICefFrame; const targetUrl: ustring; targetDisposition: TCefWindowOpenDisposition; userGesture: Boolean): Boolean; override;
procedure GetResourceRequestHandler(const browser: ICefBrowser; const frame: ICefFrame; const request: ICefRequest; is_navigation, is_download: boolean; const request_initiator: ustring; var disable_default_handling: boolean; var aResourceRequestHandler : ICefResourceRequestHandler); override;
function GetAuthCredentials(const browser: ICefBrowser; const frame: ICefFrame; isProxy: Boolean; const host: ustring; port: Integer; const realm, scheme: ustring; const callback: ICefAuthCallback): Boolean; override;
function GetAuthCredentials(const browser: ICefBrowser; const originUrl: ustring; isProxy: Boolean; const host: ustring; port: Integer; const realm, scheme: ustring; const callback: ICefAuthCallback): Boolean; override;
function OnQuotaRequest(const browser: ICefBrowser; const originUrl: ustring; newSize: Int64; const callback: ICefRequestCallback): Boolean; override;
function OnCertificateError(const browser: ICefBrowser; certError: TCefErrorcode; const requestUrl: ustring; const sslInfo: ICefSslInfo; const callback: ICefRequestCallback): Boolean; override;
function OnSelectClientCertificate(const browser: ICefBrowser; isProxy: boolean; const host: ustring; port: integer; certificatesCount: NativeUInt; const certificates: TCefX509CertificateArray; const callback: ICefSelectClientCertificateCallback): boolean; override;
@ -183,15 +183,15 @@ begin
end;
end;
function cef_request_handler_get_auth_credentials( self : PCefRequestHandler;
browser : PCefBrowser;
frame : PCefFrame;
isProxy : Integer;
const host : PCefString;
port : Integer;
const realm : PCefString;
const scheme : PCefString;
callback : PCefAuthCallback): Integer; stdcall;
function cef_request_handler_get_auth_credentials( self : PCefRequestHandler;
browser : PCefBrowser;
const origin_url : PCefString;
isProxy : Integer;
const host : PCefString;
port : Integer;
const realm : PCefString;
const scheme : PCefString;
callback : PCefAuthCallback): Integer; stdcall;
var
TempObject : TObject;
begin
@ -200,7 +200,7 @@ begin
if (TempObject <> nil) and (TempObject is TCefRequestHandlerOwn) then
Result := Ord(TCefRequestHandlerOwn(TempObject).GetAuthCredentials(TCefBrowserRef.UnWrap(browser),
TCefFrameRef.UnWrap(frame),
CefString(origin_url),
isProxy <> 0,
CefString(host),
port,
@ -363,14 +363,14 @@ begin
end;
end;
function TCefRequestHandlerOwn.GetAuthCredentials(const browser : ICefBrowser;
const frame : ICefFrame;
isProxy : Boolean;
const host : ustring;
port : Integer;
const realm : ustring;
const scheme : ustring;
const callback : ICefAuthCallback): Boolean;
function TCefRequestHandlerOwn.GetAuthCredentials(const browser : ICefBrowser;
const originUrl : ustring;
isProxy : Boolean;
const host : ustring;
port : Integer;
const realm : ustring;
const scheme : ustring;
const callback : ICefAuthCallback): Boolean;
begin
Result := False;
end;
@ -489,19 +489,19 @@ begin
FEvents := nil;
end;
function TCustomRequestHandler.GetAuthCredentials(const browser : ICefBrowser;
const frame : ICefFrame;
isProxy : Boolean;
const host : ustring;
port : Integer;
function TCustomRequestHandler.GetAuthCredentials(const browser : ICefBrowser;
const originUrl : ustring;
isProxy : Boolean;
const host : ustring;
port : Integer;
const realm : ustring;
const scheme : ustring;
const callback : ICefAuthCallback): Boolean;
const scheme : ustring;
const callback : ICefAuthCallback): Boolean;
begin
if (FEvents <> nil) then
Result := IChromiumEvents(FEvents).doOnGetAuthCredentials(browser, frame, isProxy, host, port, realm, scheme, callback)
Result := IChromiumEvents(FEvents).doOnGetAuthCredentials(browser, originUrl, isProxy, host, port, realm, scheme, callback)
else
Result := inherited GetAuthCredentials(browser, frame, isProxy, host, port, realm, scheme, callback);
Result := inherited GetAuthCredentials(browser, originUrl, isProxy, host, port, realm, scheme, callback);
end;
function TCustomRequestHandler.OnBeforeBrowse(const browser : ICefBrowser;

View File

@ -1761,7 +1761,7 @@ type
on_before_browse : function(self: PCefRequestHandler; browser: PCefBrowser; frame: PCefFrame; request: PCefRequest; user_gesture, isRedirect: Integer): Integer; stdcall;
on_open_urlfrom_tab : function(self: PCefRequestHandler; browser:PCefBrowser; frame: PCefFrame; const target_url: PCefString; target_disposition: TCefWindowOpenDisposition; user_gesture: Integer): Integer; stdcall;
get_resource_request_handler : function(self: PCefRequestHandler; browser: PCefBrowser; frame: PCefFrame; request: PCefRequest; is_navigation, is_download: Integer; const request_initiator: PCefString; disable_default_handling: PInteger): PCefResourceRequestHandler; stdcall;
get_auth_credentials : function(self: PCefRequestHandler; browser: PCefBrowser; frame: PCefFrame; isProxy: Integer; const host: PCefString; port: Integer; const realm, scheme: PCefString; callback: PCefAuthCallback): Integer; stdcall;
get_auth_credentials : function(self: PCefRequestHandler; browser: PCefBrowser; const origin_url: PCefString; isProxy: Integer; const host: PCefString; port: Integer; const realm, scheme: PCefString; callback: PCefAuthCallback): Integer; stdcall;
on_quota_request : function(self: PCefRequestHandler; browser: PCefBrowser; const origin_url: PCefString; new_size: Int64; callback: PCefRequestCallback): Integer; stdcall;
on_certificate_error : function(self: PCefRequestHandler; browser: PCefBrowser; cert_error: TCefErrorcode; const request_url: PCefString; ssl_info: PCefSslInfo; callback: PCefRequestCallback): Integer; stdcall;
on_select_client_certificate : function(self: PCefRequestHandler; browser: PCefBrowser; isProxy: integer; const host: PCefString; port: integer; certificatesCount: NativeUInt; const certificates: PPCefX509Certificate; callback: PCefSelectClientCertificateCallback): integer; stdcall;
@ -1881,6 +1881,7 @@ type
can_set_preference : function(self: PCefRequestContext; const name: PCefString): Integer; stdcall;
set_preference : function(self: PCefRequestContext; const name: PCefString; value: PCefValue; error: PCefString): Integer; stdcall;
clear_certificate_exceptions : procedure(self: PCefRequestContext; callback: PCefCompletionCallback); stdcall;
clear_http_auth_credentials : procedure(self: PCefRequestContext; callback: PCefCompletionCallback); stdcall;
close_all_connections : procedure(self: PCefRequestContext; callback: PCefCompletionCallback); stdcall;
resolve_host : procedure(self: PCefRequestContext; const origin: PCefString; callback: PCefResolveCallback); stdcall;
load_extension : procedure(self: PCefRequestContext; const root_directory: PCefString; manifest: PCefDictionaryValue; handler: PCefExtensionHandler); stdcall;

View File

@ -1,10 +1,10 @@
{
"UpdateLazPackages" : [
{
"ForceNotify" : true,
"InternalVersion" : 15,
"ForceNotify" : false,
"InternalVersion" : 16,
"Name" : "cef4delphi_lazarus.lpk",
"Version" : "75.0.13.0"
"Version" : "75.1.4.0"
}
],
"UpdatePackageData" : {