From e25672e6b5bad2930becc73e7ee92c4e0fbd9352 Mon Sep 17 00:00:00 2001 From: Salvador Diaz Fau Date: Sat, 12 Aug 2017 16:22:34 +0200 Subject: [PATCH] Update to CEF 3.3112.1656.g9ec3e42 and new demos --- demos/DOMVisitor/00-DeleteDCUs.bat | 8 + demos/DOMVisitor/DOMVisitor.dpr | 202 +++++ demos/DOMVisitor/DOMVisitor.dproj | 537 ++++++++++++ demos/DOMVisitor/DOMVisitor.dproj.local | 9 + demos/DOMVisitor/DOMVisitor.dsk | 764 +++++++++++++++++ demos/DOMVisitor/DOMVisitor.identcache | Bin 0 -> 225 bytes demos/DOMVisitor/DOMVisitor.res | Bin 0 -> 58468 bytes demos/DOMVisitor/DOMVisitor.stat | 10 + demos/DOMVisitor/cef.inc | 384 +++++++++ demos/DOMVisitor/uDOMVisitor.dfm | 86 ++ demos/DOMVisitor/uDOMVisitor.pas | 193 +++++ demos/JSEval/00-DeleteDCUs.bat | 8 + .../uTestExtension.pas => JSEval/JSEval.dpr} | 72 +- demos/JSEval/JSEval.dproj | 539 ++++++++++++ demos/JSEval/JSEval.dproj.local | 10 + demos/JSEval/JSEval.dsk | 764 +++++++++++++++++ demos/JSEval/JSEval.identcache | Bin 0 -> 322 bytes demos/JSEval/JSEval.res | Bin 0 -> 58468 bytes demos/JSEval/JSEval.stat | 10 + demos/JSEval/cef.inc | 384 +++++++++ demos/JSEval/uJSEval.dfm | 73 ++ demos/JSEval/uJSEval.pas | 297 +++++++ .../uSimpleTextViewer.dfm | 0 .../uSimpleTextViewer.pas | 0 demos/JSExtension/JSExtension.dpr | 1 - demos/JSExtension/JSExtension.dproj | 34 +- demos/JSExtension/JSExtension.dproj.local | 16 +- demos/JSExtension/JSExtension.dsk | 186 ++--- demos/JSExtension/JSExtension.identcache | Bin 575 -> 462 bytes demos/JSExtension/JSExtension.stat | 10 +- demos/JSExtension/uJSExtension.pas | 2 +- demos/MDIBrowser/MDIBrowser.dproj.local | 10 +- demos/MiniBrowser/MiniBrowser.dpr | 144 +--- demos/MiniBrowser/MiniBrowser.dproj | 40 +- demos/MiniBrowser/MiniBrowser.dproj.local | 5 +- demos/MiniBrowser/MiniBrowser.dsk | 176 ++-- demos/MiniBrowser/MiniBrowser.identcache | Bin 688 -> 342 bytes demos/MiniBrowser/MiniBrowser.stat | 12 +- demos/MiniBrowser/uMiniBrowser.dfm | 4 +- demos/MiniBrowser/uMiniBrowser.pas | 136 +--- .../00-DeleteDCUs.bat | 8 + .../SchemeRegistrationBrowser.dpr | 93 +++ .../SchemeRegistrationBrowser.dproj | 538 ++++++++++++ .../SchemeRegistrationBrowser.dproj.local | 10 + .../SchemeRegistrationBrowser.dsk | 768 ++++++++++++++++++ .../SchemeRegistrationBrowser.identcache | Bin 0 -> 413 bytes .../SchemeRegistrationBrowser.res | Bin 0 -> 58468 bytes .../SchemeRegistrationBrowser.stat | 10 + demos/SchemeRegistrationBrowser/cef.inc | 384 +++++++++ .../uHelloScheme.pas | 0 .../uSchemeRegistrationBrowser.dfm | 79 ++ .../uSchemeRegistrationBrowser.pas | 175 ++++ source/CEF4Delphi.dproj | 22 +- source/CEF4Delphi.dsk | 112 +-- source/CEF4Delphi.identcache | Bin 13026 -> 13026 bytes source/CEF4Delphi.stat | 6 +- source/uCEFApplication.pas | 2 +- 57 files changed, 6709 insertions(+), 624 deletions(-) create mode 100644 demos/DOMVisitor/00-DeleteDCUs.bat create mode 100644 demos/DOMVisitor/DOMVisitor.dpr create mode 100644 demos/DOMVisitor/DOMVisitor.dproj create mode 100644 demos/DOMVisitor/DOMVisitor.dproj.local create mode 100644 demos/DOMVisitor/DOMVisitor.dsk create mode 100644 demos/DOMVisitor/DOMVisitor.identcache create mode 100644 demos/DOMVisitor/DOMVisitor.res create mode 100644 demos/DOMVisitor/DOMVisitor.stat create mode 100644 demos/DOMVisitor/cef.inc create mode 100644 demos/DOMVisitor/uDOMVisitor.dfm create mode 100644 demos/DOMVisitor/uDOMVisitor.pas create mode 100644 demos/JSEval/00-DeleteDCUs.bat rename demos/{MiniBrowser/uTestExtension.pas => JSEval/JSEval.dpr} (52%) create mode 100644 demos/JSEval/JSEval.dproj create mode 100644 demos/JSEval/JSEval.dproj.local create mode 100644 demos/JSEval/JSEval.dsk create mode 100644 demos/JSEval/JSEval.identcache create mode 100644 demos/JSEval/JSEval.res create mode 100644 demos/JSEval/JSEval.stat create mode 100644 demos/JSEval/cef.inc create mode 100644 demos/JSEval/uJSEval.dfm create mode 100644 demos/JSEval/uJSEval.pas rename demos/{MiniBrowser => JSEval}/uSimpleTextViewer.dfm (100%) rename demos/{MiniBrowser => JSEval}/uSimpleTextViewer.pas (100%) create mode 100644 demos/SchemeRegistrationBrowser/00-DeleteDCUs.bat create mode 100644 demos/SchemeRegistrationBrowser/SchemeRegistrationBrowser.dpr create mode 100644 demos/SchemeRegistrationBrowser/SchemeRegistrationBrowser.dproj create mode 100644 demos/SchemeRegistrationBrowser/SchemeRegistrationBrowser.dproj.local create mode 100644 demos/SchemeRegistrationBrowser/SchemeRegistrationBrowser.dsk create mode 100644 demos/SchemeRegistrationBrowser/SchemeRegistrationBrowser.identcache create mode 100644 demos/SchemeRegistrationBrowser/SchemeRegistrationBrowser.res create mode 100644 demos/SchemeRegistrationBrowser/SchemeRegistrationBrowser.stat create mode 100644 demos/SchemeRegistrationBrowser/cef.inc rename demos/{MiniBrowser => SchemeRegistrationBrowser}/uHelloScheme.pas (100%) create mode 100644 demos/SchemeRegistrationBrowser/uSchemeRegistrationBrowser.dfm create mode 100644 demos/SchemeRegistrationBrowser/uSchemeRegistrationBrowser.pas diff --git a/demos/DOMVisitor/00-DeleteDCUs.bat b/demos/DOMVisitor/00-DeleteDCUs.bat new file mode 100644 index 00000000..76dedadd --- /dev/null +++ b/demos/DOMVisitor/00-DeleteDCUs.bat @@ -0,0 +1,8 @@ +del /s /q *.dcu +del /s /q *.dcp +del /s /q *.bpl +del /s /q *.bpi +del /s /q *.hpp +del /s /q *.exe +del /s /q *.log +del /s /q *.~* diff --git a/demos/DOMVisitor/DOMVisitor.dpr b/demos/DOMVisitor/DOMVisitor.dpr new file mode 100644 index 00000000..fc340ed7 --- /dev/null +++ b/demos/DOMVisitor/DOMVisitor.dpr @@ -0,0 +1,202 @@ +// ************************************************************************ +// ***************************** CEF4Delphi ******************************* +// ************************************************************************ +// +// CEF4Delphi is based on DCEF3 which uses CEF3 to embed a chromium-based +// browser in Delphi applications. +// +// The original license of DCEF3 still applies to CEF4Delphi. +// +// For more information about CEF4Delphi visit : +// https://www.briskbard.com/index.php?lang=en&pageid=cef +// +// Copyright © 2017 Salvador Díaz Fau. All rights reserved. +// +// ************************************************************************ +// ************ vvvv Original license and comments below vvvv ************* +// ************************************************************************ +(* + * Delphi Chromium Embedded 3 + * + * Usage allowed under the restrictions of the Lesser GNU General Public License + * or alternatively the restrictions of the Mozilla Public License 1.1 + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for + * the specific language governing rights and limitations under the License. + * + * Unit owner : Henri Gourvest + * 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 DOMVisitor; + +{$I cef.inc} + +uses + {$IFDEF DELPHI16_UP} + Vcl.Forms, + WinApi.Windows, + System.SysUtils, + {$ELSE} + Forms, + Windows, + SysUtils, + {$ENDIF } + uCEFApplication, + uCEFMiscFunctions, + uCEFSchemeRegistrar, + uCEFRenderProcessHandler, + uCEFv8Handler, + uCEFInterfaces, + uCEFDomVisitor, + uCEFDomNode, + uCEFConstants, + uCEFTypes, + uCEFTask, + uCEFProcessMessage, + uDOMVisitor in 'uDOMVisitor.pas' {DOMVisitorFrm}; + +{$R *.res} + +// CEF3 needs to set the LARGEADDRESSAWARE flag which allows 32-bit processes to use up to 3GB of RAM. +{$SetPEFlags IMAGE_FILE_LARGE_ADDRESS_AWARE} + +var + TempProcessHandler : TCefCustomRenderProcessHandler; + +procedure SimpleDOMIteration(const aDocument: ICefDomDocument); +var + TempHead, TempChild : ICefDomNode; +begin + try + if (aDocument <> nil) then + begin + TempHead := aDocument.Head; + + if (TempHead <> nil) then + begin + TempChild := TempHead.FirstChild; + + while (TempChild <> nil) do + begin + CefLog('CEF4Delphi', 1, CEF_LOG_SEVERITY_ERROR, 'Head child element : ' + TempChild.Name); + TempChild := TempChild.NextSibling; + end; + end; + end; + except + on e : exception do + if CustomExceptionHandler('SimpleDOMIteration', e) then raise; + end; +end; + +procedure SimpleNodeSearch(const aDocument: ICefDomDocument); +const + NODE_ID = 'lst-ib'; // node found in google.com homepage +var + TempNode : ICefDomNode; +begin + try + if (aDocument <> nil) then + begin + TempNode := aDocument.GetElementById(NODE_ID); + + if (TempNode <> nil) then + CefLog('CEF4Delphi', 1, CEF_LOG_SEVERITY_ERROR, NODE_ID + ' element name : ' + TempNode.Name); + + TempNode := aDocument.GetFocusedNode; + + if (TempNode <> nil) then + CefLog('CEF4Delphi', 1, CEF_LOG_SEVERITY_ERROR, 'Focused element name : ' + TempNode.Name); + end; + except + on e : exception do + if CustomExceptionHandler('SimpleNodeSearch', e) then raise; + end; +end; + +procedure DOMVisitor_OnDocAvailable(const browser: ICefBrowser; const document: ICefDomDocument); +var + msg: ICefProcessMessage; +begin + // This function is called from a different process. + // document is only valid inside this function. + // As an example, this function only writes the document title to the 'debug.log' file. + CefLog('CEF4Delphi', 1, CEF_LOG_SEVERITY_ERROR, 'document.Title : ' + document.Title); + + // Simple DOM iteration example + SimpleDOMIteration(document); + + // Simple DOM searches + SimpleNodeSearch(document); + + // Sending back some custom results to the browser process + // Notice that the 'domvisitor' message name needs to be recognized in + // Chromium1ProcessMessageReceived + msg := TCefProcessMessageRef.New('domvisitor'); + msg.ArgumentList.SetString(0, 'document.Title : ' + document.Title); + browser.SendProcessMessage(PID_BROWSER, msg); +end; + +procedure ProcessHandler_OnCustomMessage(const browser: ICefBrowser; sourceProcess: TCefProcessId; const message: ICefProcessMessage); +var + TempFrame : ICefFrame; + TempVisitor : TCefFastDomVisitor2; +begin + if (browser <> nil) then + begin + TempFrame := browser.MainFrame; + + if (TempFrame <> nil) then + begin + TempVisitor := TCefFastDomVisitor2.Create(browser, DOMVisitor_OnDocAvailable); + TempFrame.VisitDom(TempVisitor); + end; + end; +end; + +begin + // This ProcessHandler is used for the extension and the DOM visitor demos. + // It can be removed if you don't want those features. + TempProcessHandler := TCefCustomRenderProcessHandler.Create; + TempProcessHandler.MessageName := 'retrievedom'; // same message name than TMiniBrowserFrm.VisitDOMMsg + TempProcessHandler.OnCustomMessage := ProcessHandler_OnCustomMessage; + + GlobalCEFApp := TCefApplication.Create; + GlobalCEFApp.RemoteDebuggingPort := 9000; + GlobalCEFApp.RenderProcessHandler := TempProcessHandler as ICefRenderProcessHandler; + + // In case you want to use custom directories for the CEF3 binaries, cache, cookies and user data. +{ + GlobalCEFApp.FrameworkDirPath := 'cef'; + GlobalCEFApp.ResourcesDirPath := 'cef'; + GlobalCEFApp.LocalesDirPath := 'cef\locales'; + GlobalCEFApp.cache := 'cef\cache'; + GlobalCEFApp.cookies := 'cef\cookies'; + GlobalCEFApp.UserDataPath := 'cef\User Data'; +} + + // Enabling the debug log file for then DOM visitor demo. + // This adds lots of warnings to the console, specially if you run this inside VirtualBox. + // Remove it if you don't want to use the DOM visitor + GlobalCEFApp.LogFile := 'debug.log'; + GlobalCEFApp.LogSeverity := LOGSEVERITY_ERROR; + + + if GlobalCEFApp.StartMainProcess then + begin + Application.Initialize; + Application.MainFormOnTaskbar := True; + Application.CreateForm(TDOMVisitorFrm, DOMVisitorFrm); + Application.Run; + end; + + GlobalCEFApp.Free; +end. diff --git a/demos/DOMVisitor/DOMVisitor.dproj b/demos/DOMVisitor/DOMVisitor.dproj new file mode 100644 index 00000000..b53a2231 --- /dev/null +++ b/demos/DOMVisitor/DOMVisitor.dproj @@ -0,0 +1,537 @@ + + + {3B58D3C2-1F7F-4146-A307-5F778CD7C586} + 18.0 + VCL + DOMVisitor.dpr + True + Debug + Win32 + 1 + Application + + + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Cfg_1 + true + true + + + true + Base + true + + + true + Cfg_2 + true + true + + + DOMVisitor + System;Xml;Data;Datasnap;Web;Soap;Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;$(DCC_Namespace) + CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments= + $(BDS)\bin\delphi_PROJECTICON.ico + 3082 + .\$(Platform)\$(Config) + false + false + false + false + false + + + $(BDS)\bin\default_app.manifest + true + CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments= + 1033 + 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;GR32_DSGN_RSXE5;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;GR32_RSXE5;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) + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) + + + 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) + + + DEBUG;$(DCC_Define) + true + false + true + true + true + + + true + true + 1033 + true + false + + + false + RELEASE;$(DCC_Define) + 0 + 0 + + + true + true + + + + MainSource + + +
DOMVisitorFrm
+ dfm +
+ + Cfg_2 + Base + + + Base + + + Cfg_1 + Base + +
+ + Delphi.Personality.12 + Application + + + + DOMVisitor.dpr + + + Microsoft Office 2000 Sample Automation Server Wrapper Components + Microsoft Office XP Sample Automation Server Wrapper Components + + + + + + DOMVisitor.exe + true + + + + + 1 + + + 1 + + + + + Contents\Resources + 1 + + + + + classes + 1 + + + + + Contents\MacOS + 0 + + + 1 + + + Contents\MacOS + 1 + + + + + 1 + + + 1 + + + 1 + + + + + res\drawable-xxhdpi + 1 + + + + + library\lib\mips + 1 + + + + + 0 + + + 1 + + + Contents\MacOS + 1 + + + 1 + + + library\lib\armeabi-v7a + 1 + + + 1 + + + + + 0 + + + Contents\MacOS + 1 + .framework + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + + + library\lib\x86 + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + library\lib\armeabi + 1 + + + + + 0 + + + 1 + + + Contents\MacOS + 1 + + + + + 1 + + + 1 + + + 1 + + + + + res\drawable-normal + 1 + + + + + res\drawable-xhdpi + 1 + + + + + res\drawable-large + 1 + + + + + 1 + + + 1 + + + 1 + + + + + ../ + 1 + + + ../ + 1 + + + + + res\drawable-hdpi + 1 + + + + + library\lib\armeabi-v7a + 1 + + + + + Contents + 1 + + + + + ../ + 1 + + + + + 1 + + + 1 + + + 1 + + + + + res\values + 1 + + + + + res\drawable-small + 1 + + + + + res\drawable + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + + + res\drawable + 1 + + + + + 0 + + + 0 + + + Contents\Resources\StartUp\ + 0 + + + 0 + + + 0 + + + 0 + + + + + library\lib\armeabi-v7a + 1 + + + + + 0 + .bpl + + + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + 1 + .dylib + + + 1 + .dylib + + + + + res\drawable-mdpi + 1 + + + + + res\drawable-xlarge + 1 + + + + + res\drawable-ldpi + 1 + + + + + 0 + .dll;.bpl + + + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + 1 + .dylib + + + 1 + .dylib + + + + + + + + + + + + True + False + + + 12 + + + + +
diff --git a/demos/DOMVisitor/DOMVisitor.dproj.local b/demos/DOMVisitor/DOMVisitor.dproj.local new file mode 100644 index 00000000..fa70fe1d --- /dev/null +++ b/demos/DOMVisitor/DOMVisitor.dproj.local @@ -0,0 +1,9 @@ + + + + 2017/08/12 12:09:33.000.056,=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\Unit1.pas + 2017/08/12 12:12:06.000.226,C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\DOMVisitorBrowser\uDOMVisitor.pas=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\Unit1.pas + 2017/08/12 12:12:06.000.226,C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\DOMVisitorBrowser\uDOMVisitor.dfm=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\Unit1.dfm + 2017/08/12 12:12:14.000.517,C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\DOMVisitorBrowser\DOMVisitor.dproj=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\Project1.dproj + + diff --git a/demos/DOMVisitor/DOMVisitor.dsk b/demos/DOMVisitor/DOMVisitor.dsk new file mode 100644 index 00000000..6f086556 --- /dev/null +++ b/demos/DOMVisitor/DOMVisitor.dsk @@ -0,0 +1,764 @@ +[Closed Files] +File_0=TSourceModule,'C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\MiniBrowser\uMiniBrowser.pas',0,1,390,72,421,0,0,, +File_1=TSourceModule,'C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\SchemeRegistrationBrowser\uSchemeRegistrationBrowser.pas',0,1,13,95,52,0,0,, +File_2=TSourceModule,'C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\JSExtension\uJSExtension.pas',0,1,154,79,172,0,0,, +File_3=TSourceModule,'C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\source\uCEFChromium.pas',0,1,1075,38,1089,0,0,, +File_4=TSourceModule,'C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\source\uCEFPDFPrintCallback.pas',0,1,78,80,113,0,0,, +File_5=TSourceModule,'C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\source\uCEFInterfaces.pas',0,1,120,3,143,0,0,, +File_6=TSourceModule,'C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\source\uCEFTypes.pas',0,1,1704,3,1727,0,0,, +File_7=TSourceModule,'C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\source\uCEFTask.pas',0,1,156,3,83,0,0,, +File_8=TSourceModule,'C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\MiniBrowser\uHelloScheme.pas',0,1,116,20,133,0,0,, +File_9=TSourceModule,'C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\MiniBrowser\uTestExtension.pas',0,1,16,1,45,0,0,, + +[Modules] +Module0=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\DOMVisitor\DOMVisitor.dproj +Module1=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\DOMVisitor\uDOMVisitor.pas +Module2=default.htm +Count=3 +EditWindowCount=1 + +[C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\DOMVisitor\DOMVisitor.dproj] +ModuleType=TBaseProject + +[C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\DOMVisitor\uDOMVisitor.pas] +ModuleType=TSourceModule +FormState=1 +FormOnTop=0 + +[default.htm] +ModuleType=TURLModule + +[EditWindow0] +ViewCount=3 +CurrentEditView=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\DOMVisitor\DOMVisitor.dpr +View0=0 +View1=1 +View2=2 +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=0 +Width=10000 +Height=9428 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=10000 +ClientHeight=9428 +DockedToMainForm=1 +BorlandEditorCodeExplorer=BorlandEditorCodeExplorer@EditWindow0 +TopPanelSize=0 +LeftPanelSize=0 +RightPanelSize=2008 +RightPanelClients=DockSite2,DockSite4 +RightPanelData=00000800010100000000AA1900000000000001D80700000000000001000000004312000009000000446F636B53697465320100000000A123000009000000446F636B5369746534FFFFFFFF +BottomPanelSize=0 +BottomPanelClients=DockSite1,MessageView +BottomPanelData=0000080001020200000009000000446F636B53697465310F0000004D65737361676556696577466F726D3B36000000000000025B06000000000000FFFFFFFF +BottomMiddlePanelSize=0 +BottomMiddlePanelClients=DockSite0,GraphDrawingModel +BottomMiddelPanelData=0000080001020200000009000000446F636B536974653010000000477261706844726177696E67566965779D1D00000000000002F306000000000000FFFFFFFF +TabDockLeftClients=DockSite3=0,PropertyInspector=1 + +[View0] +CustomEditViewType=TWelcomePageView +WelcomePageURL=bds:/default.htm + +[View1] +CustomEditViewType=TEditView +Module=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\DOMVisitor\DOMVisitor.dpr +CursorX=2 +CursorY=184 +TopLine=151 +LeftCol=1 +Elisions= +Bookmarks= +EditViewName=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\DOMVisitor\DOMVisitor.dpr + +[View2] +CustomEditViewType=TEditView +Module=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\DOMVisitor\uDOMVisitor.pas +CursorX=73 +CursorY=148 +TopLine=100 +LeftCol=1 +Elisions= +Bookmarks= +EditViewName=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\DOMVisitor\uDOMVisitor.pas + +[Watches] +Count=0 + +[WatchWindow] +WatchColumnWidth=120 +WatchShowColumnHeaders=1 +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=0 +Width=3820 +Height=2377 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=3820 +ClientHeight=2377 +TBDockHeight=213 +LRDockWidth=13602 +Dockable=1 +StayOnTop=0 + +[Breakpoints] +Count=0 + +[EmbarcaderoWin32Debugger_AddressBreakpoints] +Count=0 + +[EmbarcaderoWin64Debugger_AddressBreakpoints] +Count=0 + +[Main Window] +PercentageSizes=1 +Create=1 +Visible=1 +Docked=0 +State=2 +Left=148 +Top=269 +Width=8930 +Height=8520 +MaxLeft=-8 +MaxTop=-11 +MaxWidth=8930 +MaxHeight=8520 +ClientWidth=10000 +ClientHeight=9753 +BottomPanelSize=9121 +BottomPanelClients=EditWindow0 +BottomPanelData=0000080000000000000000000000000000000000000000000000000100000000000000000C0000004564697457696E646F775F30FFFFFFFF + +[ProjectManager] +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=0 +Width=2008 +Height=4226 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=2008 +ClientHeight=4226 +TBDockHeight=5897 +LRDockWidth=2352 +Dockable=1 +StayOnTop=0 + +[MessageView] +PercentageSizes=1 +Create=1 +Visible=0 +Docked=1 +State=0 +Left=0 +Top=23 +Width=2773 +Height=1424 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=2773 +ClientHeight=1424 +TBDockHeight=1424 +LRDockWidth=2773 +Dockable=1 +StayOnTop=0 + +[ToolForm] +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=0 +Width=2008 +Height=4339 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=2008 +ClientHeight=4339 +TBDockHeight=7152 +LRDockWidth=2000 +Dockable=1 +StayOnTop=0 + +[ClipboardHistory] +PercentageSizes=1 +Create=1 +Visible=0 +Docked=0 +State=0 +Left=0 +Top=0 +Width=1906 +Height=4989 +MaxLeft=-8 +MaxTop=-11 +ClientWidth=1781 +ClientHeight=4563 +TBDockHeight=4989 +LRDockWidth=1906 +Dockable=1 +StayOnTop=0 + +[ProjectStatistics] +PercentageSizes=1 +Create=1 +Visible=0 +Docked=0 +State=0 +Left=0 +Top=0 +Width=2062 +Height=5740 +MaxLeft=-8 +MaxTop=-11 +ClientWidth=1938 +ClientHeight=5314 +TBDockHeight=5740 +LRDockWidth=2062 +Dockable=1 +StayOnTop=0 + +[ClassBrowserTool] +PercentageSizes=1 +Create=1 +Visible=0 +Docked=1 +State=0 +Left=-8 +Top=-30 +Width=1844 +Height=3139 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=1844 +ClientHeight=3139 +TBDockHeight=3139 +LRDockWidth=1844 +Dockable=1 +StayOnTop=0 + +[MetricsView] +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=0 +Width=2336 +Height=1177 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=2336 +ClientHeight=1177 +TBDockHeight=4832 +LRDockWidth=3562 +Dockable=1 +StayOnTop=0 + +[QAView] +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=0 +Width=2336 +Height=1177 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=2336 +ClientHeight=1177 +TBDockHeight=4832 +LRDockWidth=3562 +Dockable=1 +StayOnTop=0 + +[PropertyInspector] +PercentageSizes=1 +Create=1 +Visible=0 +Docked=1 +State=0 +Left=78 +Top=386 +Width=1883 +Height=7164 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=1758 +ClientHeight=6738 +TBDockHeight=7164 +LRDockWidth=1883 +Dockable=1 +StayOnTop=0 +SplitPos=142 + +[frmDesignPreview] +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=0 +Width=2008 +Height=6816 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=2008 +ClientHeight=6816 +TBDockHeight=5964 +LRDockWidth=2508 +Dockable=1 +StayOnTop=0 + +[TFileExplorerForm] +PercentageSizes=1 +Create=1 +Visible=0 +Docked=1 +State=0 +Left=-945 +Top=1 +Width=2844 +Height=6200 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=2844 +ClientHeight=6200 +TBDockHeight=6200 +LRDockWidth=2844 +Dockable=1 +StayOnTop=0 + +[TemplateView] +PercentageSizes=1 +Create=1 +Visible=0 +Docked=1 +State=0 +Left=-1151 +Top=243 +Width=273 +Height=359 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=273 +ClientHeight=359 +TBDockHeight=359 +LRDockWidth=273 +Dockable=1 +StayOnTop=0 +Name=120 +Description=334 +filter=1 + +[DebugLogView] +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=0 +Width=3820 +Height=2377 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=3820 +ClientHeight=2377 +TBDockHeight=415 +LRDockWidth=4953 +Dockable=1 +StayOnTop=0 + +[ThreadStatusWindow] +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=0 +Width=3820 +Height=2377 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=3820 +ClientHeight=2377 +TBDockHeight=213 +LRDockWidth=7406 +Dockable=1 +StayOnTop=0 +Column0Width=145 +Column1Width=100 +Column2Width=115 +Column3Width=250 + +[LocalVarsWindow] +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=0 +Width=3820 +Height=2377 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=3820 +ClientHeight=2377 +TBDockHeight=1536 +LRDockWidth=3484 +Dockable=1 +StayOnTop=0 + +[CallStackWindow] +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=0 +Width=3820 +Height=2377 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=3820 +ClientHeight=2377 +TBDockHeight=2063 +LRDockWidth=3484 +Dockable=1 +StayOnTop=0 + +[FindReferencsForm] +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=0 +Width=2336 +Height=942 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=2336 +ClientHeight=942 +TBDockHeight=2321 +LRDockWidth=2820 +Dockable=1 +StayOnTop=0 + +[RefactoringForm] +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=0 +Width=2336 +Height=1177 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=2336 +ClientHeight=1177 +TBDockHeight=3206 +LRDockWidth=2820 +Dockable=1 +StayOnTop=0 + +[ToDo List] +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=0 +Width=2336 +Height=1177 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=2336 +ClientHeight=1177 +TBDockHeight=1155 +LRDockWidth=3680 +Dockable=1 +StayOnTop=0 +Column0Width=314 +Column1Width=30 +Column2Width=150 +Column3Width=172 +Column4Width=129 +SortOrder=4 +ShowHints=1 +ShowChecked=1 + +[DataExplorerContainer] +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=0 +Width=2008 +Height=6816 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=2008 +ClientHeight=6816 +TBDockHeight=4888 +LRDockWidth=7148 +Dockable=1 +StayOnTop=0 + +[GraphDrawingModel] +PercentageSizes=1 +Create=1 +Visible=0 +Docked=1 +State=0 +Left=249 +Top=709 +Width=2859 +Height=3206 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=2859 +ClientHeight=3206 +TBDockHeight=3206 +LRDockWidth=2859 +Dockable=1 +StayOnTop=0 + +[BreakpointWindow] +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=0 +Width=3820 +Height=2377 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=3820 +ClientHeight=2377 +TBDockHeight=1547 +LRDockWidth=8742 +Dockable=1 +StayOnTop=0 +Column0Width=200 +Column1Width=75 +Column2Width=200 +Column3Width=200 +Column4Width=200 +Column5Width=75 +Column6Width=75 + +[StructureView] +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=0 +Width=1773 +Height=6738 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=1773 +ClientHeight=6738 +TBDockHeight=3677 +LRDockWidth=1898 +Dockable=1 +StayOnTop=0 + +[ModelViewTool] +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=0 +Width=2008 +Height=6816 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=2008 +ClientHeight=6816 +TBDockHeight=4888 +LRDockWidth=5305 +Dockable=1 +StayOnTop=0 + +[BorlandEditorCodeExplorer@EditWindow0] +PercentageSizes=1 +Create=1 +Visible=0 +Docked=0 +State=0 +Left=0 +Top=0 +Width=1828 +Height=6177 +MaxLeft=-8 +MaxTop=-11 +ClientWidth=1703 +ClientHeight=5751 +TBDockHeight=6177 +LRDockWidth=1828 +Dockable=1 +StayOnTop=0 + +[DockHosts] +DockHostCount=5 + +[DockSite0] +HostDockSite=DockBottomCenterPanel +DockSiteType=1 +PercentageSizes=1 +Create=1 +Visible=0 +Docked=1 +State=0 +Left=0 +Top=0 +Width=2336 +Height=1480 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=2336 +ClientHeight=1480 +TBDockHeight=1480 +LRDockWidth=2336 +Dockable=1 +StayOnTop=0 +TabPosition=1 +ActiveTabID=RefactoringForm +TabDockClients=RefactoringForm,FindReferencsForm,ToDo List,MetricsView,QAView + +[DockSite1] +HostDockSite=DockBottomPanel +DockSiteType=1 +PercentageSizes=1 +Create=1 +Visible=0 +Docked=1 +State=0 +Left=0 +Top=23 +Width=3820 +Height=2679 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=3820 +ClientHeight=2679 +TBDockHeight=2679 +LRDockWidth=3820 +Dockable=1 +StayOnTop=0 +TabPosition=1 +ActiveTabID=DebugLogView +TabDockClients=DebugLogView,BreakpointWindow,ThreadStatusWindow,CallStackWindow,WatchWindow,LocalVarsWindow + +[DockSite2] +HostDockSite=DockRightPanel +DockSiteType=1 +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=23 +Width=2008 +Height=4529 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=2008 +ClientHeight=4529 +TBDockHeight=7119 +LRDockWidth=2008 +Dockable=1 +StayOnTop=0 +TabPosition=1 +ActiveTabID=ProjectManager +TabDockClients=ProjectManager,ModelViewTool,DataExplorerContainer,frmDesignPreview,TFileExplorerForm + +[DockSite3] +HostDockSite=LeftDockTabSet +DockSiteType=1 +PercentageSizes=1 +Create=1 +Visible=0 +Docked=1 +State=0 +Left=0 +Top=0 +Width=1898 +Height=7164 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=1773 +ClientHeight=6738 +TBDockHeight=7164 +LRDockWidth=1898 +Dockable=1 +StayOnTop=0 +TabPosition=1 +ActiveTabID=StructureView +TabDockClients=StructureView,ClassBrowserTool + +[DockSite4] +HostDockSite=DockRightPanel +DockSiteType=1 +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=454 +Width=2008 +Height=4339 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=2008 +ClientHeight=4339 +TBDockHeight=7119 +LRDockWidth=2008 +Dockable=1 +StayOnTop=0 +TabPosition=1 +ActiveTabID=ToolForm +TabDockClients=ToolForm,TemplateView + diff --git a/demos/DOMVisitor/DOMVisitor.identcache b/demos/DOMVisitor/DOMVisitor.identcache new file mode 100644 index 0000000000000000000000000000000000000000..92b0ef3fe7b79f90312fb05756a566a427f6c393 GIT binary patch literal 225 zcmcJ|F%E+;429u{19j@eO6XQm3AK|KlUQm{gCje>KbfEx;7z~uhOcwZEkh4)B~dUn zl*HgUSf;HijCnx`7)coBYO$R!;gv%BhVgOt^ef*4kuodz>G?^TDht@zw}RS~V|W4g Kr^O-%)nW(nr%W*b literal 0 HcmV?d00001 diff --git a/demos/DOMVisitor/DOMVisitor.res b/demos/DOMVisitor/DOMVisitor.res new file mode 100644 index 0000000000000000000000000000000000000000..20ba553086005b9f4e8e7a6bee3fe14bfc0a7654 GIT binary patch literal 58468 zcmce81wd6v`}ZXTL{yBm6;u#Jkq{LNkWfGo1VNCL5JgI*l$H{uq&uWRy1PrdyHn|| zd++&XE_;>rb$8wO-Tybc!<;+$n>llyd1^$VP$+5;5o9BR$3Fxv0(?0or~`h0z>L~T zjIYE+zy=;AP+}-~@RtuI3Z4W|!l=98w*dHi6FkF^Lp+T|p6KAPCX7^`)fzzP|LJj1ojxhXD5%Jp4is z6TMHVudAn~rLG>UAR|+uAR}7=o?~8UYd_)U=GpmIUD#MztN40(O}TyefY`ltMxJYY zK%T2RA@8i65N8Jmk%ooYkQ(sbY=e3lZc zN8FtgkN_WF#M;uzYI7fMF0P6JzP^aVyAp)ubo;k<`1be|mf5{6z($6JA@=X>q+uWL z-r4O)PE4GPiK;}H|Dx^YKH_7lu-O@zW8&fxe|dgoT&*cw}NBKG^=P zz;v$4iC?c438-GbW8iz9^#b{=|@Zf z*11^>@>pRA868_Fm2@7_g3+DTztJDG6BsQ!8%#nyMw_Q^YK;O+@Gn zlASS+lol@{-tLpg;J_Nf$=(g?Vv}N1F$poTo_X0ha-T~}!TYVj8tIQA;UP0fXwWob zZuA9Flo>?AgJ*CU9*PYh{ytO4GnHXPLbz(Zw4eY^M+frJzZxrcrxOvq)Bn>bCe(!mb=F!M zn=s|2W&E%$K6JFT>kkbKV2g{|v6@e7uy=2DB6n}~{T{op&(#~yMFnl>_SRNRZB5NH ze7nu*K!3mR)YMe};^HFG-#3CSEA7XWmknSB`bROdGc(}*4|lb-wBFj>=EvuT`UaBe z>1naW#U=N(wY8Mh)z##Mg$0-Kuj6;Kvva=DUwpe6@J08LqEPunD3sZcgcM(CQwrgt(eN(xC$&ml?!=LWedDiQ2Ja2cf8_*hOVUrPm5_a=}s(58@v_ zkc@vMC;#!0!XpEIettGW5H`2@mFJTuX^C`obmiaKylt_!wMEQ~j1Vm~HAGQP4i`1S zv&rk%fPUFv&5TVNl$DepZrw@_X8-p=RrTpHKw}ESJ_aK`fUdbZIU(L20mvJZP^_+Y z6jldBbK_vFmzyt+HhQ?af^WnFu`n~wzH>+D@L!E!p#SQelfA=;pSL#>U?H8v_d3W4LeI=l3ViHXBk|1EHGauIradga0Lr1%s>UaI+T z`~7h|*$4I5`kO3RSPkJ@n93vw5bs?STfSW>u%c)3j?T$g*m`8a^fv$fiw^>7S9o?hg0`4ZR* zQ@Ax%mTST`H8daEP}9Fh;lT3Nv& zlM`s<4qqRV3C^MQbu1zYXg(8N2U1hLge-zHK!Cd!*FO_oGq$3n5?cz^$;;DQF)AX` zJMPmb>0tGt3SRA zJF6UY0>B&^_|XrXgVC^md%z#y>p}c!$#V!7IJ4k7!1J@dZW&pa$KakJUbsduz%!bW zc7tERw|{4mg^mOJG&Ja=Z*24@_t@xY#Md+D5B-;cvvGqb7(`58e?ivPu;867fp2yQ z8R%cbo!f=^3%Gf}^YPrN?_+qmq^&2##v)=R#&Ki8cQFa-!gmDmpF7orNl#8k!#;z9f~7uvilr?n zEX0-rUPn%{5({yZ6fGh(Rm->tG2_l^!1rjV4kOiIOvsNsygz`8@H~fgeLN-so$3VV zefe5(ULI1Ao4aOgY=WZ`6{V#`4b|01RA>p7g`pL<=5XErX=Gz;!-fUruT_I8;^#fk4aHSD^yUh&^n3$M2c6|RZZLDvI z?rLj8TAKjfl`F!C0bb&tMAb*-D-E^vn6~C-r1JA;ug!hKXE29do$Vd1ecj#Q+v!0J z^$Rf~f?bG+VBg=wZmgM6`D$BB8>R{Ho(*+%pS`?%$bak~{;sX9JJQqD)eQI!H(7L4|@iuLS_`t{+#A*8*f1!-<n#s-21b>@p*N% zbvp+K27;$1Cb9GL^9ba5db<0tndyy~h_D89WOySwJF{iIzi$vTKR1U=jE^HjgM*lk z_ICG#gv6iX#`nEB9U2_s0Q^wO($dm8;Dr!08V$ZBEH1+5mE~o?=gzHu85@h~Xzzd` z;C~fbTif;n-c16`#e8{r#btSU*=25S&SZRi{9a{c)$YIR6pJ!Nt)Qq-GpL=YJ`^b` zA4P;R0~`~KzY_3uVLKRMAFwYpiW7x^{~~}eNDVsL;L|o(m>>BxSk49Ff6J$Vrhft6`=X*A_eI4#B*Y~g?~C1k$<57kW81cE6n|*+zyBb(e_xzS z_oYshiILH~iJ>8)`}{fbR7K?*U#AA1^Jd%|~6lLXbSYVzh!1m7C8pj&~*%+(y zQYVFr>jo6v|7jr5)zQ=PbaPvVXIOxb4+8l&H)j_lEF==}mx+Ma%*DRaEyljmDZ-i> zW@DY~;;^AXVPNbJ2$a{M?Cs~}g*e*T&p&#k_!t2ArL~}zPJyp8Q-UKM%^(RhzLv{<+xTz#zmQw1s{6czR*AwY1*@41dRK6IfYV zxw`}WaC{$6Prz5^A!;fu*fTV(f8ZtXXY$X}R^*9N12#4)4aj%?I1K(^4PU;{dHYxE zU~Ogd46Hfg3C0fc^9Sc$4Z?BhpYybMOq}e^*oe?#ER-370|JmhKYy%-x~AOEHiNOT zDLp7(`UvVphev>UHy{_z{r6+zF|VmDobSA3z@5)x|Yz^Z4)I+h5E~Psf$jRMjBQ9=Cqu zsqlULuPNLQ;Cu&sOeNrrbJqb4`z9|%M|}z?%+JU1>KUmW*fS@gJkSC7r;&45<{XEo%p9pD;>h=^`UO-`9E0BciOUIBDY8?u7D z)F6&Wg#0c(LVg{}1TQs5aNmN-t1(>J(h>%_bF=Rc-$xkWUtv2a4_s#H!j-A1G~mXs z13Xz`d}1#cp2*$Z^HOG7I+Bx_3D%|_VLj7;TYJbG!vOi={=PL_gnTkS#6->F)+jr3 z9+%Znzl>W8IDciiA>7y)P<^wGiiM#8TUS+!1$-e=n3s=;h}=6B78fG==I+O>lUFb%>ep$z1fVwU?SE%2D!Pjd;cEY!ZY52!t zG~9!ES=oq<%{%e%uyE_>$Or`T@=kVe{EhdFA0MtCJ`bM;0KF9qkSB(DP^Sjh8saK1 zUBs2O0REii^oE`g-wvj>mPP1vFxS+C1jOCV<7H%c?ugb6tqG z+6Zn8_&y;226ci-@pHI5_-A<;i_70UF8-af`rkx>@W5fOk!MI!I5zss8V@u3{^Kx6>u76!jXD8s=3WgwUj_W_hcVfZq( z@$QQY77=#ljeWm)d`pw;wWOFBBoRb!FCWdAPqB}ZfsO&jkN)}pvHzg1RrbLkEcEr~sbq&6IxCcIb zaJds49Cj`zBNNDZ89;U_L|7PVaeDwifA|f}0r?k3Gux}{iL!EF!>@56=lM5d| z8p7oT`ETscr9}*&rNiIo6El4+Iww67Cj(}ur(shYNQ0{K}rjYfZnMb zw+G<(OH0^I5rfkuR8}k@HgCS-WI#i`F`OP5(w}$M8+lMZg!+s|Ko4Mhs6Xbow6PcD zB#Ty{j93W1zm%lpIzWGLJV{)t=JC$fR;0J93($jn%x%6ppg;d- z@-CF8H@CTat8qO#qHv`R%nQnr^|f`~Mn)z-l@Wkkb*HPN0|Un&9vlQTxez0E_cQk1 z?SACHi4yl}*AnAOS329<5jb~n_O2u+r~E;_|8X4}8ydBNtc>*a^dRG3z5rcI16J*E z21b~_6A=*rGWjn=Vg4?x_OpVOnySWi*bf}LrKt&BR9GbW<9I*&-P+o!(bwIBhHC)j z^+^yD;)^j)RWiUksm2Q3>_vpYdH=`Q3wVH9wAQoy)%4WQYh$CMz&(BDq+dFQK3=NM!Iem6^7JTOmIGMhys~gy<%FrIJ#b{gW!u5AHMeAN3Wov0E zRcn2{eP}4#Pftw&Iy?sSUHwRRS6Aof&y^SdY@EN!2kmx^jgC2i@t5KFK;{Q@eifXv z>j(xAM!eh)pV!ycz`3^!bcGw^fBo`huD7SxJUl$|mvsw&h6UJQ4o*x=7y=yiD?q9G z)A0eO<)tMwcvs~kBO}_tHnZ!``ukt<3kr(%jf{-)O-@Xz0NsT4+}ynO`1pk4z`(!_ zK*#>^m`EQf&g2h_@}?^&6x9q0wX+X}B84#@@P{y(0XhvM>K6mPe*W+6`#@i?U)Vny zh2n%`A!Y;!GP4tjphcmmQFuMZhB@m;Jq9x@zjBd0=a+xpz<0fsKug3z*x0 zN5%5pwersioegF0?VrgaubfEgkOD!!NRuzDML(d|Mz-Ng6g{CHA z1nO9snlf$Q^dTX5x%EJ31nIy86RH zLU*-+U2@yMf%S(zfG$mf!_>sA3F;Z3ZVB4%puPk8bJzi!>BjmS03F*4z9 z&m68X&~F(7+`5P!C^LTb8dn$UyBy!Y$LXBB+}$^9qdxt8uxdYuA#P19G^9Sz}#<$isvv=A%;N%5btz#awG-V=vE;CHIMH(NAfFqjI>R_M%sW)N&Jk3awx>TIfAjU zj~}bLZP~JgML5u}Kw1|8Qg=7^Np^O2h9B{6{teE3 zGEWb$+K`|ipw|e(wNHvqK&q>{{=Z4ML@jrMbpwrQWy3{-{*CL=(t}Ooyd>HxxovHuV=*+L-{{Ehs09`7` zYsEm_Gt~XoR#hQI1%(JW7sT=F4pZP0LlhPHsR`=oi-11pb6Gjk-U{@&@*DmK|8(4c zv%aEiEvCDp6M^=As6U6%#laC%>;f^s(`D zo&1job;oAFrvdsILjM>%cIevxeJb#6tj)js=-}(%)APVD6#9zd>q7qzeA!u=Ca{;A zF|9!Vg2NB=OzCMEODrs`C-CneFyNy((8b~QJn+pxYAUONzuI?O2-L$uACkWcP!HYL zy9W5<@4hz{reFThL|1!s6Rz)b^#l5He1N(}MVX;L)H8TlgKhoiO4p0P_nDiOh2(;L0(i&;TG~^;xw^XZ#euUe8rT71qoa`Y0qCv0UdsFd;%7T-VA|( z!4eRA1n@zCQqqv8$_@V&emJfNpi%hH-nN39JIsf^=Utr}_6B@8K7~Gi_&xPA z>@ZJ3x_m7goUO^f^Aah5uaTEmxEvN1@h}qDphAO#alBGSY8oOZRr`jZ-|?rXq=NBkehELc)7|9kMWli4;*s{F5hY*FSy?5&Hyw@HWcL_~ElVpl8s=`XlDezvU#0SJDA~Xg`ED z(*fG`A@Kq3Dg76t2pjMl-Hdtjv$|^DGQyHNh5GU;I9gig^Bw}G6&Jq~!6!yot=!{6|Z$>tCnJ&Ut_!u4-%T=`Zs{uK@O=P<79mCo2V z`zx%F3HsUKqyD&;pj|I4C}lYdV1wr@Ou?O*DscYdWa8wcloWU-;Q8mW;u7S_dH4=C zzN;Vce*^O;52=8EfZqnRlR|%9e1JR>v{%A>e2fbFeulwv$S2<9{3DNXk*Q=A*e)@- zfXB&#{we@#U_g)?p8o;*cWub?!wBuEFuu?z`nHE4{vY`RJSKb!&)fFa72Lfayss^! zm+PD8Wlq-oH$Pmwy%o;08~9%11N0MC0e%Ua&x0q*nTt3dU0{DL0P+ds(cap=6UO8B z_YXK(QdqPG`3qbniU9upCgzEleM;$pDAFa^B+1n{o|w^qJ~yqvr|oShZ$ zc=bTesRA;a)cqVZ+(VGhg7)Db{f~c^x490!9G`A3`@84s7dOr{QK8HQu%^Jrz62=; z@*~6*74^yYJMxXE#KdG#$X`P{G_*&<7!#F?Id|$a7Se=&!yf%l`hb2MjI=fA=&+0> zXrr$NxSzA1Gc$XRHd4H^0e04(5s+lrl?J=2eCkN<6MZcb47xiY2$*zzHE z=)Vqa>gg$Y*c;a}&|-J`ko&++|9=^w4*)Mm-coi(!3y*_fN~?m)7jPz*WMP7_0Lj3 zOAi5mgpn>_yN7rA`hgvN2-uV3V=^&Lp_Fo!?8*Y|Ja3k&2gr6lGq0e=J>cBngP z2lD{yS_^d1KlNYuaW25OpQp2CSQPW1oTn(`t=JE6`6{Wm5N3S-E8=eyAaT~?pLDFt!9j}eDZQi zQvM2DpOK*<1g;mPfAG#0xFfolnUQ(#&+z?9eq&>kJb0h0@H>G0B_Zb1cB7E(@UnFl;OFeE0hkIlM+$;VHd?!b6zAqhM z?csL|?q^J8W@hvJ3dX;y1MY}i9UK_!g=+-Ig707s_-o*OOJLgG)`pFaN?W%yk6u$% z4qubJAF(ESH)>V%ZuH7SiKx|Qs?p2uY!a7~5^|S;Zw+Pv+%~k2bO&@s2 zyaR0Qdp`r28*RSJ2U>?)Z z|L4c`hq(U=KfI>|_Ri?g(9j3qvqSf%1N|Qt0KRW~PfxE9@a1uunVBgAxW>U6qv1Qi z2lx!;w+`kyIypI&3w)!j!TfKyy1J76AH(~{-3JGUk|ZUi{8n08K?~?F1Gt06P*6~O z^3$idJ@)nv|GM7{g5(o@b7X@5h6!{wf@vRcK7y$kVD?}NX9E5JA0*&~gaY@eK;T4y zyILSneNTbE67X0;q55D7Ea&(%AN~dw2YhMUD;O7(MqQdy-}BWeuudv$YjQxsCertKOv11rA@K9<q z4p+*iDo5*2#-=`f(5WBZ{i0^M%ou_Tu>jnKWlLJe$IyH4D8 zrpY*Jx$VZCMmENp?P9GiH(9;dwx10088On))6;vcr>CX~qK>li$gHZr*Rf;A90=YL zQ7+yRAvIf*>?$~yHIZoT6PuHo6O)ydb$su`gXC83>)F^)xqxt<#^ilM^TgNX9Oa#9 zng?eK2WPq5X+;DJJc&O)Dd8+-+)>F|aM|XO=i9Quw`EGq6g-Y)1M?NUMi=)v1~}A| z-5d#ii4hYMGahttp#w+LU5>>jv6G}bkNFZied0{Lf@&%|NVYzi*4vZ#YJSA+sD{Sj z6CcXMxR}$=QIefqUdJ$+bLHQ(^2Ywpn^VjV&GBQ?xTjWYtm(27+ zQ&Yd#$&-e{JGM{uCMcE7mQk4+?dAH2H5f;UP-XC}u1q5)%ih}$pL_aLBj;m6!t9&~ zd-kcl_na4NR1#|xyH#3R zDtGMA!S;mplKuLoqokZ;M9lK0XkC;+wf%A)g7K41RnPbo9X!|p957pf?@_FMa%ByrwEi>cTV*kfAIeo^Wo2`@ zm_3y^U)G$DHadMgW&|lAMfI=AUUH&ul2PAoF6#X%v}|JHEb#PEJbChD7C5D;Iu{GK zIif2s*tm0fs(n7+xEC`O=WygQ>-~UN;1!FP$)ii;KV^-5 zeBYC!{-r@*k5MWyH7Dn&YlB_>ez9r!_o%*9Mk-0ym1s&GvbsxSHhH=t2)`SQ5sqVQ)1Ucx1sBUZ<($(%-5Q(Pb2+Q z{wQYI0DoPSq-(-+rReEkDomHg^)nJ^&EqMX5Mybxr;IV zm-4;{X-!L|d_4&;w{`W@6XY*Fz4~BXaLZyL%4}lYN*fi5%CF|t_7-y$El(ttay}p1 z^r3&(5snuIy_Hw>d*)--r`D%2>&pS3YWu*Ot2gK#m)pPMx6^pc_ zUDDN;7$v(HBq#SDM%7HRn+XyG&LpW3P)8qCuDCDY97xZqEJbphI9xcOG{}O~ajGk2 zoHKVJlnFChS68QCe6y7x@MD5{JL}|mQ|#!pT*~XkGKo0ZtjLUvgT604!&I_nh~o?{ z$dRG$kB>+jq3Dlokvzkc?}ajJbo)w7`1wF7=r}jWaA$6^Qdyqq)O-M9!glCrOzq4S z)ZU!^$XrTXcdBN0CZ}}D<7#mYjmf?@MQnFGBdgfWP8>}WB{fUBMd(gy#-^Z+B2GMe zL;N@TcZ7nc@7nto_T(7qUB@(u$zwY6*0T@-X0d=NT~xVU-ui@UntE6EYHV|~M4n3f zoJt=dvk+0()6i4mS3ad&LDAFNjRtJh)+96&6XQ3vdAZG!vOJMONGyn+oQ&+Xp<#mI z@)^hLYjr&G=u+^mo;7vb#A%??=WDKZYUR$B3dc%iE!BueOROINgc|f)IItSU!9`YG zoaP}tdEQ&6=AhMP!ttk%|=j}C`2Ug7WDKO{X2@vWbKuipq1NK^|7OH zD==}+SDhy%m}!loh;RL>Yl<0{NAjyLb?Z$3_CR*A)M05y$-q8mfuq)shR95>WL58w zrrm!Q<@@r?9s-7HJ-y!A9T)a-=QC5#=pJ=1InH98x^yukJY03&dU0G!y1DV>G1CEC zrTFN>%>;eiQ~{VO)r*)4I?mO_GjZ8-V$WJ)H9}lZMACh@)4^aW(e_g8pv}rCC_ym|P}XvQhh-bZqY0 zSH^cV+o!tIw8m1xwr4*^1x80#&Zoo~4G+d;jd*KmwkN8HQ6J!CjXdeaU&u^h<1H+R zG83D5Pn54%M&P=Bc7McYDYK6Z1bem>zf*G%uh1Hv7JKr7J#CM+=J5~wg=}{yxhctQ z;-kVKR6l<uM^VDj%CFa#bN>3u9EZF>|gR$Xq_4V16xLov? ztf@6sR5+6|b-DsUpD=bv*j+wLqtoM}M&?iqV+!;+6Y*tSXxj*vmVioc~L}*DSO-)9B+>%AmlSWL+*^}nX{SUNX>#yAxyD(7Cwwrv5 zZSN?ZkdQr@755W0HC}2;v(|B|D271S5Vd17cG|-h+$>8y+nJ-bfODqPcbe}QYUT(t ze*oQaVvd0QCV4v(&nhi6oxZj{k(8IcoV$)4sJ}(ky*0mZizFfD4Y66A(U;p=?MCe? zh{0^BP$jL@o7lr|%l0q}ZL=GWTca5qAaXh_<(9RkN{~M}Z$)VKGDSFU!c~+E^;#63 z!KGz%%vY{hi-q50;b1u)rW#h#h4$q?<#NsIj;F0b74x30MRsLE-c6TTC>Xp>sf6)G zJ|$C>Qs5?&A}dtS*h?d9dXY@w9>ZB~;_y43tQNGlyPRn>1$U1+Q;gI{guMFAu`HUz zg5bhlvWk9@w>Q0g1fEHsdHPI)kEX#+ftidif#>Dq?!k`{>#?3;B9VvdPS>T9^pTKE zb#QS|M!b8Yz>E@VR5(DQm%A`9W0AK~B5yofDUanaYqJX5E+c}9ha@{G05c)$b5Uch z(ckTiN@b!G|EXP$~fhxf#!0U*7RF3H$h9D*=sJ^qQErie8JJez6Vn=tky@P`u8=GYiyC`)oqnE-S1dt z!$d=wu7K)uoXSpGx0cqzj8=QdV#BOUNyaiAB&$-*{mvNYb_ZM_C9lY1Dmd*?j`vh1Un8N`P5X|cjU?_ zzvMne_tPV1D}Al_@9d_bqY(&b-g|v&R+5Z3L?QinT}Q*$XIdI=9(qinXC%(@7#dzR z;?S~ot9`M18>yKNwaCN6s^_qi75@c%_MuWk`>UokM-Fe%KG{!9jG`Rur74qYba2fJ>XbVLsMN*5pwPPEsF&9XRH)06ep}` zq;`B}on_g|pd=#t=A60Nt~PE>`R%^%*SV?U%h#WkwQbdYblc3W;Q+;P)zrEx1ExFj zU+qLeP6M-~BAtpJ%+wv{_I+8rN1#~Aw#t%`*o-?!KX$2IJkMya0v`iMqOua(p&~fp zW7n;Fa(i6sZpExD=y2b;ypeT9C@rkoJQQ;Xx4_fz2 zWpDZ1zh|$*eo}?41bZ%0AK<3ev>-TT#qS_mwX@=^-a|3nGn5KKj4?s64mJ7jhR=lP zK5GT%MK!4ZXZ=hb%wJa>md0-)Zm#3f7 zqyUdv(4D8wH2a*D4d|@|>6PEOUI~zGuk|Pp8?m58iII(QQ=ex4=&R)X@|oQu6E63W zn`{??NYSDpDKXDqEwlD|H%GU7Ux?mi%Vr@;QprlLuBZQ~8pC;JE6NKoNdnI90*%Ye(4?V(#~1WymlvahX^ zYWMZsSXf?uAL;ef-!tI+Vtu`(shV{volc~^NT{vASsH;EQS#r4CB`dO>1Nyrxern7 z_C0xu_|%rPn+N>H9}KsP9b*(YT$mf{5L+sK=0W6s*<|yxvYEtDQH5+VzG0`W4sq=x zCclo#cxa|#>*`&*jol3WnMZ0@LRw_h8*O$nad8$F4hQ+`OKr8-uYf!c0X^Y!)Z?S5 zeXoobf~h9cSFI0Ebtf*q^U2|0az5REiP3+5&d9!Q4`E_a54XJZ>0Y4~zSp+=n5nLb zBVd0zSdi{~r0_(fSaDt^z+X^7xk=5>QNVAX$4R@2?RVZVr8JyzH4BwkZ7t+?d2dZb zF~VNPPP-O(qT08v$*bMWku4?lQk+aGYy9lMb|5hvTQTBz(7+5tFoGLWT=C6Fa^Fk; zuk}t!x>d_NY3gex86jM^M#5oqwx-K-MHv!xv~hXZH7Z%~#qHlC2(&4?-qXq)<2e1+OP}zD zUUT?mWV95J;>iFnnn-ce$FE7U^m5+NrE%J0Y?kJ2XYZZlV5Z!;usDCgrSa?Q+XfQ+ ziA~2VL+&~EsZuZ`97G?<I~ z3<}GX>Q|M*ZQiJZ3b5VhPAl4`(OcTAY%$+ctC ze%|c5I#22j96MNl)}_(fn)$wXMY8mn`;Qws0<^0>3`l4v+&uT{ru<_QTAib2W>NH# ziOK>I(Mj_pm5HyHCp+~AjHpT4Us0o5b2U3tsWiKiBP$a{rHnG~xz?1EqB=)Z&qZ@E zepz}+o_C)6Y$VXW1^?N4G6!u#uf_N_3CHjV)cTLl74)8trM<0rh0PL%QGg9va1sG z0SPR3$y=k-#Gu}Kdv({qTRI)jFsXtL^CP+(5Bi>(e+|$j7>RoSv_ITZK~0V1s$RC` z(W`R#Gh<|q_V%=HMP&=Wg_jOrkTGx<5L7Ekv(S@_{4MW5|H!GPP|Nf#eL-`Z&R2W) zEQpTEk#`BoDuu2O5fKOw5%8H=@G06V(Ck~TDpA^FQ(9I^dh2dv1+VDVOO`>Ahlus( zh>B^)Sv4Bk1NOJD@eioZp$)L-fw9WZ3=5*&}vzZ6Z2) zD{U(V>WW5%;q>I&Z3-jzs`VS3%V0Tb)hYAI#C&&mz>6EyvLX`h2d;EnZAx8AeP*vb zu!1EbbvSucK$g^OVDP-@lB$O$kgk!Q^yf+*Po?x?IHF&iqis#OB}O=%yLMIFl%S1Q zl;M(*qT=q_>&t|C)33I;oEMWA7^<*D`i|#na>Oq3CpMg}paDl;{D~+NOiBck^vU=N z?wvto2g6zp*S0BChVu*h_<0gf_7;45=*hq14u~i-kw)Z(F^(d5F{{9(s zMii$m3jzO)d?(5iq2~z0RQk*NgAGQ!R9Tp>(SLN=b7g5l_}tNBZY}pJ8X3B8`^E& z?#3~GoL-i`g@nL=>mlH~v5>;+on~)uH!(Fi%^5Ce?{^+GQ?Sz{e$d@V3p-uyb4i}Y z(k#|Tl?I(rOvOk|;AeiL#z>o+?D6Qx%z%SmTaN0bu+gwr1H4*=X@+r<9&FdIN1aL& zWF>5>DURNTy*zS(nwT}Tj?60HWd`k`XUYlbCQtO#w3S~AUes-DY-=OqlQ^Q%yKS6v zC~i(O%zO{=ivq5EDV~Ol(p!{mgOZZYw{giN5<*wa=C+(Zn>Xzi`1wCqZah+dxODN{WaobcotB^hxRB>&Th8@Ib9RQcY?pT&VYl>pDk-=}L|I2yS2sB&h0%1S-zI>B8Bw#ykKTbouyM#* zM$7}5SyQwL@p7WH2yT+Ox?ZGYsft(CbDum+b)Cig?fDaZ&(zf|i$h!ms9%T{ zYLo=3npCxA)XHwlwU1Jy1axVAcJBKl>Cx-+OuV0BM?L z_Zs*|^7e`P&A7bT+pE(N=QAlxR((G@#o%)q=Vkl-as~t#A`E|N@Z*J6;WFtRRN@y? zlV4}DF>Mtku^MqUdS5R(E~C~c9_v&8Y76R%l{tz$#XN9VaVHzqHma)^Ud)9Y3m7HY zX;ZYFS4>>{eK@zRpSi;2j{)Ipqdw%T^Nm}G&+ZT;Gvc6n`0(MySJ(Z=wgFm9k(KCV zAViSgt>3LX+5A9Gw-<2OY(;F3q&~j0sgw~j=|)k@dY_RUwKr2RFd)7v*JYky+sJ&1 z&SjRANj zkh9v9pTAPTyWm>#N{N|LSuWs`+o`ITYB$rL5@^yq@;-3(!Nr=yv&`I-J8T5Rlp0$y zGTM81Y<5y@Q2?67zM8Ak6S-4s<5ZGqkBn`eK8#O~IDqxNXezOyarm6ez_|8m`>Wpe zHLaW+V}sRUSx@`wt(YOMu9b?~>SK*_vdPM)pSjXJX*!oBPPIQG+>FwI#y0gi+bu&w zm$<50e`d0+tJgS6sAg2(St^g;9P%cVI!n!WBVTAwd8V(JN-5cm5ZV)$E?kr|8Jp=p z8XO#a(%`p`TWYVMz^Q03jrQx!m~Obul*1~U82K)Rb6&*v75a;_=NApO;jQs!{TbHs zkF%G32ri2^MdXSX()o|DA1D!~+WYK6oTwZu}m8^^)5mo=Q@UpCz0oCt1TD%3`)#P~2NPIy&A6_0M$3BXb^| zx|QA>ogsZvq-Lfoh5NBz=PJ*wJ4LDKS?%kmNahj{Kl5xkt9jy<^-59^C!@AzsJf{+ z59!Xq@_HWr16PEz)6WZ18M(&nytE?0Br8a0r*a>gC~z)xA-~Hd2AicKX!~H{RYpjl zV64XR^#^O~!!Ldll+_RAyYp`7rU*ARfe7u^>SK=b*Ly}ypX;n}RYg}ElbW~TKJLT3 zZCw_JyqnP<#@U zbFbaFdbyNq^DByyg3KaMtMRb=ZX>)~D|U`W^1yGNw@F4w4qeVTLqI_0U~Nruh}?$h zvff17ZD2&?QGLIYU3y*~Q{-rh=DeuUp<{K__`v~P@vW$I@g-gN)l@6_5X;_tVEtiX zV2#(_>oi# zy7rh|6w}20)-^)4J&w2Zx5aD??>!R%r;_`d7 z374ouxlsGaIp668kr2}dzvVq~+sK5|6uUaAkK#Xfkt%)+HB;eetUmAdKvq}y)-9XI zUK0K@9`YDJuZLE}@~?+Sz4Y$7KkZ+cRXT9_0)?j6wY4Ohk8|@(PoL$;r9`LvhUG7= z7qD^l3JIAQiZq&YTela?lP0GY^rNcbq7?8NbS9rVUV}1V$av6@ikD5z7np0-}lV9%r%H0S1_sb|KXj2vyS@iL~ZBr8FEg8&{XfZH)nDvpm zt$9n-(;e}#fyd-&FD$-GsMp*t7P};OTJNf9ztUqJa-|!fhV!|DBJ|Z(m;|V1XnFN*bOVXVWFI4U}J86`r)2@;>;*&A< zMIGgJZiwZ|m3IX}F7a=<(2=U6i=vuIA%H4$e-o-Sz$%$Cn+$TS?bOx(>J z5#}!!+9zV~nC(5imx$h#pjmM_x}o>%{#zny(wE~IULdq_q-Xcpv?kKjewi)xYZN1G za!BRMA72hBvffhLtjt$`DyG=#u=XW+vY8 z2GhHqqZQj5k3CVN(a*FT-_?hfC(bz8%M{!SQm4ER`6xTy8aJ8gw=wmbBbNkv1*86L@+@>c019WsmqxB{7z;2J_-67%$*Q&uZwJKI;?`D zdQ%-KFIln)FOZt)=dE`iZPo15lh@bRZ%bt78akokCNf8|wnw(pXi;gb~GC2pGlfMlW?@M9n)+iF}3_2^Z2w&kng0- zR?>SF34+}Lg0+#mdxE|BD+F`JPCN2!jVLy2zszq*O-6jm;pn9`@55_61tQYSlqW1j zxu}TgCn}S)c&wm z!r<4?DD~TE3j*P%oSycTZ#k>^$iRTIzWCbPSn2TT45q28m&Yb&w>uZQx;e*n!cSwdnu!QTeQc;M8*fJ&8 z@HS&$7-}Zc(bQ;s1h5%uN=m_1Te#?7%Gl8txn^2$-5u_6o!Lg_%W>VotNk>kVDSQm z^WD4s@)E5pL@!)u+OMzBkVNL>Xs)-G6_SK5sa?Ce%~q7&u8_+9($ND)r^3&;*PFFc z%@|y352S8w=G1pkePvOYYq@Gh&2CeCz=)&wvsiF2DX`u}m-`>JHf5GicKkoMrPDo@n4TTLr6m6OwYJMR@_xUcni`HE#IxxEgfq)w#Z zxJ0Vxt>DU~V)r?m?vNgxqD^6?`^7b56Fzsh>#0BR801^>%?E&yDCB)>g(^B5ey8O zaV*&zR`1|8zJ33{_v%>*RNk=KV9A(v~M)E zGfpv4JbkzE7t^HStjW(DgM0R%`l)R#FD&^Xg4P4iwLGEZ-qoLu=Va@E>v>Z9Dov2~odK7jnn93Ll6Y}BsNH56H7tShky2kqPBF%@)<8O%0 zH=ch>H^QYNaHj_ejz}1!jiIA-I^;!M5hR_UO~$r2DhvBH_^}25?v;rn3J1JyhVBln zQ?#|_2`?itI^1&FqFh8{vnq#Nm$8cISCq)}2* zkdOw6p+S(8MoK^gX$0v~=`QJJ0O`(|cYgopc|XsWJNMjk_S$Q&wa)iBbA`nbW7z3H z3?9@OQ+&l}A_VVGFfxiTS|unSHBixf&~!8;zI=Di_N?jE<6(KWZ(&XA75I&f_cfYQ z5@BpGEmi>;VeDcq0k77AT+|Xt)!_Qr9BX5qZu}$}Xl!y#!-b9a=dRUkD3SLlR=#Kz6FtwT-I7PVA6{8jPO6BGyyx{A@ytoh(}L@hC55EPB;@ zh&qVmZ@XHPVvU~t#ZbPL@GFIAh|#iCxxvOwLrV*+0q9OlcgWqpsu9dN@^YkK8~S^1 zTxeU)+qf4bT3*BR#@zH}ITtbK@38i4*A&B|4=$B|uniBghYKJ06wT-jA*W;`9S%Rw zi>U*A9d@=txw?Nd5s@&Pg7)0_%5D0$gyQvn(o1!MSraBAGY?bC@Cq;8iz%f-Ka2-8 z+Ave#hii04VT4JJxRgc;Z{_JacpDbRf7UhMehJKFc+-$OVatEPU3cx?@KrHDk_wjE z;qO6ADGsN3Ku&U}r9n%tpJq?L#v*bF*13>NENZ&JP;pxz3&#{1A}ShLM%KQ+2_mT) z=nbmZ9)4>c()0tymrf*U1MuBGsoFyZG1kUeI&m8RYO~AW25gQ;9Q>t zWZv#HFNGm@XN*!)$WX!@C^rP$I_5n_aIzN7$*LLt<9)7dYe4hl&S^hWe~ni=IUq80 zvDh@($bYfK%h+B1$DfPui%I$Y>vqEm6~seBodfEkHr?HY(pJNw;cB`|-Myw~8R5=7 zyxuaK6=VBG6_+GHiVe(o*w_RLeAKCXLu(w+(qM;PkG~vNvLl)h0m-|C$qZdky`rAj z{8!7Ea4$zhAEsXQn7que(mCifYw3&<=nU^YrU^R!z*7Om2-?mr?}LG#Fq#H)zHZ|y zZW1t^Nk`m8t;CkqsfAEzde*w)@@?=Ev{c!8{=mDHQIkjN+XB04b@YbVJ9RuAQF4#` z4r4eg9&addHWfTYX}^evmb9N8Q5t-{hE(QuSc3KH!S8Tiy5=n<1!X^D3IW z=S#J(#Nzu#T312XN=CoI1wjVc=9}w2dr+WUMaxP5JXUZ=X}Aw$m>O8R`XjzHy);&x z_=*ym!Y!tt9t_Xi*IGs>F%vTpY8!Xmb;q;$xU|ph6yHd_6))iQJa3n!?0b-qY0js} z4q-Cx%xpBeJmL=|{rqugWG5odV=B-8(p=D~0|z(&AP=E6^KW&tUQrsHpLr~M%{w)K zkJbslunbcGbw#G8?Ns>TdtR?TJ;*cRx?LuMj8paKuC^7wVNQ&a*LkqAk>I;aMG`|9 zuYxB`HMJZ(noxA3R387k8&Kv`w|mbiA6Yy$ym*^>xO_f7X8$&aAV)vI-G)i7cB&8i zD4RBI_>#HE$(;{|AMQFeUG9<`Y-3l7olOed&2q^3Iyt_Y*Uz43YCkCR6;(G!zEZ0P3;1-&ePT}{hqH|JLMzxxhCcct(64cs23 zh|QOXy(yh5V76OR`!*?Rd~mJ*g#Sd&>NoiUHT3RNzDmNM4aIl|a(ChNrbGbxj)IWX zS12SKd-NMNW)98#j6DR<10(5VWMmv&n$D;H0awFH1QO&x-ar~Z+SOf`d_5bB_=Nv` z!EXtK0!+32XD@#Hn@j=TM@cGJ%ibO7fq{{e2gfx)5t~*z3@qShyVGz@(v<0DUUcCt z<@|#ta5JpnQx#v~>{CJQZ({WMa{&X3G3q&%Y!5z_YHs56v!`)=Dp1p}{_bKio4-G= z^(XmV%-3c!qz|B7J#Au73q@!fWq)aG%rJ33pK`$-#eu){0Io(OW$W6Cew>Tfm~;4U z>+dSy%XfGsTSt?0Vkh~5lOBWm3aM{8@BQG=A8JYYpFRj^P}%aE7gfvdT7d$Ebqw3H zU1^R!NKH*er0Ae|l&kzjdwlcXbW(+M*AYT3XPw)rym!a2aEru-p0yU~p>Im!YkR<- z7Q5LYHjf|5EP9?9wm&J)YO;JMyt(FO1meU2hgXB1YsniBRJlVi)cWMZigwgTfL7ba z6%+eZ<@s;Acv^MCwC3?_%v)~VKG}C>qEM)rs^4}Kv2kLsQEaaNO3%{-p&#B=UqqqnU+R~NJa{6iaGsOwL-D@ zt#JM>ggk!s)BgVEpF;j9w;m0(-UHz752nshL@W9Iw6VLh*{3nnx%ZxX@*Gw*PW5SL z+bTpGq^4^rjV?%(2vl&MlK!R0ZFH|D=6^Mq{2PO_%*w)UelIcTn~|G^zkg5Ms)PN6 zn}&=D+AGx5^L6gIG^&gX%LKXL25rxxVLYMz7{zRhAcs)@{5`g~xac=QByJMPZ5lEK z0Q=i}{@$DvHMfPNFRO13y*lex=J|7)-~&P!5e)3(NwOR&n$%k7O@ldVg|6!Hq)Nc! zIf3#IKY)+g9-JRGf-LQyTWT!o``x{T6HfOSv7dW zS{|<~j1~UE*B4bsIqK_I`s1)~KRE=dC}Cp$<~gGyF_fxtE$#^@oE8xPeMN8h*gWt! zQ`AumJnDcEsh69hvoJ$tYhy~l4`(CyG{EazD~lx6M&X4`l#&7=YQwH6SCCC_XxD{- zPC*>M445&mY&E2XIQVN=>Y2syf5Gmp`QCPVrO4>>_XB*T}usGR))Bv3>*oaEd1rdy1rq?C5L()2wM z;yLj3h5T&Q2Vfe(9<|WRX<0yEJ(AO&<7JwQ|gf`2D+g zgnnEm+tJc4C6{|rmOdtwQ%K>k>CxoB_fv4V5oOpL1y;`^dkTMN`sqQ!t4WdX8OBG~ zzEOq5P-i=Sq57X8tPuN-_?7u3E3Ms^u(jgw##|ZbzcZg=lj$-s3EX3QXe;tjUK_29 zcQn(*0)c8v3$9X<&`9me+?c0aPdIfWbKeV6H*XRN2mYQ(4+;eTmIn2%LbCfmI?*P? z3h_f!481Qu{5Mysah$2>7R5q{mKiM0P5#|pO~r=I{=m(2y%L*9JD|9G`-(ru@e~Sr ziboNT^UsK%VYx9GQ{zvw^Owzktuuyop&vFNZd#DpZ@4uka6oA%}OokY!YT=A(%x zGI6sEC@8Cq&IfCpZaLnZz#(H73xc@`AN&|gYl;%GRtk-p?)*xhhyqZD)wi7L%u zdo%Kz){^}DWC!Sg=|3_T#T$A)#+TyDTdcWzpA(pRTvnm3 zP0Y`4B;qcLFyVz$G=dr*L|7|#mgeN}0#AV0R4hczz~CeAg?GolsZ2c#I}Xztd*{lB z6(X;@%wwa5YBFZ|$rM)3Z{fCf*VREchKpH~KMa(E-6Afks~%Tb0G-|o&J9>{S~%xE zjNV=y?z2Tl%SV1C52u5Bg}!43n%CEQ1ry+41Pr=}7@NmEtS^hPt=E^DoGOC_t+HW$ z4$rkJ^7DLpPL)?0Qml2yR5+cQdH-u6KIp@>N+4c=ZSvlr?iaC0Hyn52#bq})Tb#R^ zXJ5g=7K+?r)CB)@mF+cHDsJm9Htd~1K? zHry$15<_jxlSa|>xW;#c3nv*_EX!R3QPa0PSh8bNdEWPt0EQwY5s<<)qC@^;%*5GG z(zL(ZKFmKy2hgudE#Wqn5Amrtc1YkdKO2pw?;gAiGLjO`s|Kx-v^4mM{bc9)5!dl* z3F0|an)yiBcU!=g;i|ekpeR^40}}sxB>kriX9=2u%f_NR8({klezTyYwqQj@Wi0&^I@O9%P^p{ z7+lQtT;}4LDRv=XV}XfbR)8w$G&ubruux63g}4Oqylg)bx4$}il<<<7>qJ{`=}P!M z=;eD|{Xw}i&Ncpn@3X#sm2G6Ghh{FfeLR}xUQ)|$4`SU_RmpefM4@f_LqFEZz6fdr ztiM|6E7W{j9GE*Y%hpL%$VD1Lsg~5s^IkzsH}}i0MAgVULgQ5h@YVpSn+?oMhDcw( zy7Vhj2;k);r_dw&U(;9tXLR*_x$pW^z$S=V8Ie~tnW(CNt;rCnMp#oE5}&_;Mf0s@qRY>odM6# zM|JKZqQCU~g}e87OnIgF=>_nhH)+bnc0~yuI2G+Pe=Sx8x(|Pt6 z^l%+2S{wTh9CzzdW_9VzG+_yEH`-lC@I7Y0Kbu>M1`(;Mzk>QOJelQJXtFREp{hIa z4+~{sW^A=e`|+3WftsY&Qna@84-zYi%wh%BV$X+5e$?U*4ytvFM(= z_?)luS&FEjWi48iT8PO$$%gw-j^e}b_1aHK8i5Gm6aF+k49&dwmEa%Dm2ZUvQspp| z`3wkqmUxfx`8>prtb9HATx^AnoZM&3i6%i6q=aA0I6!8ti5;PJ{7q3sRrN)Qy1i*l z8JPuk{$(4%P|#hZMLsOdlF~3g=27SijUZ&Z1tHPQFvXSmVaUQ1o+Y2cYlG5D#cr2& zhROABLxPPRXRXWOlK%J!ZV&sTeCVbpJ%&uGV_{dUG;N)$qaBIe$r?%7OoF~;fo(Xz zr&7-B@-jRD^|7hhMtZLz#zqIgXW-RR&EVl_Iq92K70YO5yUp?Om4vhwI7CkqJH>|e za&Obx>pA}P6dJp{DRIP~*3H|H3D5B0H}&_OHyZan0irC=jU~d49-$wGjrEUw=}HqI zge-aROrASBdZD)%g1}>6bALPx+W3JbtQC(X%K8ZpNYN2tPhN^Pt#nmO(VQoQ(eN>r z9i)-pFjr1qvS2hOWd`4kUVOmi#0MM=%bQrKp^ypDzSR$6Enzs?E%h{C>TgIUU|&Y0 z%btBwr&oAkj;698du;xp*E9&<(^G3|SNsJ9t63nnyWIOKue`cVp)2RoaxO*%O5taT-G7}io)CYBkF;TmHjq)_4| z4PvG30)!d?r)EaN!W9b6aoMFiySbYWoP;}s1z-|W%W`Z38rI?SZ%)5JNVM@GZ|OUb zr8L-OWGxFk*E0W9T53@W{&)4xS>w67yjqCK49f9KptxAU zwHAughB$p{Q2oe=3=JhQqs+e?QF4mp*z z6q)cLSFc%iC@DYV6MzxHiJ8fpEmiG)9k1vZtJ-^C9lyA_d5d zIR+{W8=U6r4RU9i=eAUou*-s?>s5vWByfu$^zryG3tJ>#at8aUc7$Kw2(1G+5t=EB z!nIgU7&1%S?oO-KOwDJIiNL@a?|qHn0kLj$#6u>JFHK@5&xIyL^1qt|ueeO{jbS=L zfvv!^WDNT`H&pyg!!eILj5Q0s<>#}IMSB#e zuES=m^J1ne_K)o|_t8k#orSEj;zAb-`BV$pZ31|z4QDBsG$y7x%{!}(q?{s#7J;)St9&C~fi&&(VQ5W8)zZn{Sz*=e?+Y3o9-)n=1|aSR>^t@?pni zi6C*ZcC~G1nH_R7Dxf6YRBH~HkQ?e}FsF=dI?PRTBEzS9%r{gn9h?o1c zc@ltKP?}N|t>YT4lOLo!M;gXzUeg#!w78~-!{AqOmzH;j?NK2u)9QNYh6SASH6qbw ze&OXH;O3Y-{4z|(Xnox)AXIs)kQ1uM-YG1*Duem7n>>D(LZd@B9LKNKyc$o^c>^nD^k-xM3>Sd?Eh%*<=JQ1j4p$zU@0_xR6)pskeP0T69vTv= z>>=>tb3lKaN+?kuVh@et$h$mOl=A|g#-qq|Si$=zLr058ew;k1{QWi<$SlTs$)I%7 zJ2trcYAGVYf|$r^O9~zSNA5~hb6BzYjO=R3m3%7*rTsj@wC~m?Ga-#%@#qnzL|}@Q z!dYUENqDY`l>iRT$naUnqB18e#;-VzPSmi%bOev-`{*?8f{>FWmG5u)1eTaL!Wajb zM|}f-nyA zB$?lgi@e$N=b;CjxlAZO53!115uh)X%k0lblAdyth5%6E zxLob@QtCI}7Wp&@|FBhY*(i}q33$+gPX!obD1p}mtno44PYg`JiGN`9IP(9s06n#n ze3LtS+L`=&(ve}kxZoU8)LRyaacX`kewcGq^gS+bhMFEzrR7choHR&-e5@zvWA(`0 zkNud+cigo#wxa&xW`;#tOYEDrZMWw2Qr{`l{#||rhZWYCf%5+yExVD|X;RH>vAf3Y z+@i?0zUek@4(LR`cxoP`xprT+3G$B(&ZZkbvu0*e(}^2the5_k`!=aezY<1tuSP8& z#_K@<49I^G`Ms3)d1`yz5mG2I{I)nL=qI9p)1rn@P@LcPIWat$^`$quXpl%hJnE0Y zefgoq9YedrZL#AU{FY6zs;%PP*K;(XqLSg?TmqVHUxdsR$E>11W~qlH3TXB|OPkg^ z&keepiIO?Z=An9>Esf{sw)>q*oQ-jmI#k+gPAb69-^>e^bnOgB_U8tKH442n3hgGQ zJ-NLPuBfQ+64!!vK2Tv!ETWHBAy??&rkNXv*}|guiSIjyu0*Jl{ra0;#m@0f<+X+9 zrFqWNJVw;sDK+{I9V+?6pn0nJ8!0Nw<$Gy`Ou`4Ug=?WL2ERfti?g_SCVulRVr~V5 zK*SL)imGJUJb76d2S@OaB%_D(Jig zTyIbW@__3l1%)_Bnx5q4o)N%nzC}>6uzvhFjg@PnhR5*8H<1~_S;54p2?&*Bf)$`^ ztpSu8F*z|Pv^x%j0{f|p9DCc%h}UBU-a5n|9G}Xz8b8k*og*W{3G_P#CFU0obuHGF zkCtyDvJ-49GZUKA7|(|19laQkfhX>)7kdNKavG#Te>xZkS62;-#1;8S;44@qvLXcn z#%r--;7;!thz6ECDkOV^z?BccrWlX2&gGJ_mr5UFzK0zdsz3`+Qsac5TfnJ2Fo z*2n5EzNB5dtw{gz^={7l+Ry%+;R2eNmG7W^B*hW7{D&1B{vzQRkC!rrjWxRQ3>$7H z#z-eEZ$Nx1&-_phzH)i{a3zW26BaPQOp2LG4}n!hj~)-AM{44vwPd*7qCXqFU<8z3 zz}av}<758ryyGNe*)zdKxCLx2)Kkqj%msQ9pFa$<*uuS>cP^!ceVlvnN=OoH^AGxD zSr^~(WqRAClvi>hEum+(-<3-vjm~>1g~OZjOqr(tO8h!z7i@P^D@haI_f{*b9hwS| zs&W=ym(YFAP*eYAQEs9z@^O`l@1)1QE!nw^00_+GUpe*(=_No7G?JHzzl9Fe&}sAl z6#p!9978u)^ekl&2t+||UMxu1y(=^KE4~aSj1{|KZ;EBnzK$BMS5uxeqK+U*WK9oM zOb^;Srk!1;YHk?e);E?2;H$B&-9=xA&Siib+G#X%uR=4!m3zEf!nVJ(*O&%=>dMSk zI2k29YP@z=zY_KmFVeOW^bLH?%r%h2X|i*QCy(Tgk3B+$gsO@zRWCc1?!IwwaNxuP zf{Tk2nAO_OsN948%HZZzmA|`LehY&YK|VNmqe&+wV8;?KII(2X9sn_la(;sq&{J;F zlR>++FYW#dd|IvA!g=KnbPSO+m(+}ZJI*ty{7i6v=te?HFy}s<@Z)l5Z65)gvi6Y>P zqaCbjLyXXOuXax5^QsyeRrMvQh^16g*bkM`z}Hy>S8d--?Ol>&nbO+>aNIkm;z4ON$)($Wc$$c)D;&2|Wxg zRX+qMFlMC|YCR`q7hHt^U%6I{Ok+GY$PN}NK9j?-g5jLlz^?~@eCSz#on<0bVyVA3%rECN7TIcSXA%{;Nzh11i5aiv-$^lIHs} zbHYKiRu>NM54|ZD%1aDbZhj?W3WhX>Fk&U41Lx*Qa_9#d(gS(ZdylP>SUHQZd3>E+ zwezbsRe&u3x+ii6XM|xEt+X`4+IaZ;8idnm^Rq&3W$H#IFiV~n8zP7Y0r&N($ukZI zfCb_uYSjwA2s}TV+b#U!I7mYpI;{VVjx_!GXrlEt$IYJ4MK~C4NLAAF%7-3f7;ZsF zmolTq`3B`q{+6MlFt8NEf|zah#CLDYUGF-+)pyXv2L=auJ_#oB5wF!}rVVy@rvtNQ zbQkZHQ&&!X?$|T|?twOqUq4CJ;4q3_4~+?8 z{%x4AgGjjZ*

gR=x%RL7?ZD2B-M-9G9nM-)FDb*&PJuS=q|@?H3~cP|&QG=I5E zTHnX|9DTmbe9=YR%)cSoF{?L#)f?84oyEqu@@br`%iJI2HP5l=7Au6KuP?(U3j9g8 zMgQ!L#^O|>q7VhSNn?ML(|BzW3l8Z{&s+;5Qy7_n0qRUiPhyv3SxM+?UOAGw8Q>Lf ztg;Z~deD;;7PCi%i?!rUR#drTakPb5*=6?&6swHs2wa}xCN4Cizb^*L3Wrv=-_a>azcZ`2dk)Ei zY-&&YOaO(q0PI@B%CaYEVN$6_tuY(0q6pK04qNW1J>2Ijo!-aqmav z=SVQQ0z3>5*VGOn5XR#qg6Qg^b6XGNlFOP7?{nM_&oUNgmkLwDSd|{&ynT}XIu;cA zY%S!oL|@Flgx6b+z;|mOK=XgA*J;~7rERdq5lk@>;$Rh1M>FH;X}iqd?hQY0KhHiz z{q(jy_*^rW@^oB%a8=me+tzC<_4F3i)=nI-9BAL{)lHXM<#5Es>+mgH35Q#ngAnUG zj>1#L{MSacbJWM!g(Bp}5rQJI8!{wxr_Vn7u5qyjzT>wiQVGp9f-y3(bHtuXzH}te z+kK$jKe<@>!1^IskvkTU-KO~BNg*uqe%7?vOl~T2E$c>qhkhYz*N*?0OWUT+P}6lyntJp9>^^#J2U2o{ z4l6g3CfUe_>N%=ryyrF$KgGu?9*oO=FXw+eoU4!#h=}0L%5eWD z^E|iHq~4dP284VN^En1(=(D(soQa9JY`si3eU6@UA3G7xt=L%^`whjBV9so*YEL8y zLPvi=%W+*^B}+Rz;3%WGzy+yR7XrVC(b2k@=n>t#Fkr;GW8zKv7c0glVb}zK_Aqi%*hLe4;KEbYQiaWpNRF78CJMN#povnsPAjzF-B!}>!8c;Q!5*K z$5^UlOkth0UsbbPI{a|CK7wHsUm*`-qx=2p6?zSG4g)tAZkQbpw_1G)O_(TnX&q@{ z@}xwZKg23H!95TCB>A$nDXL6{9SoQT@-WsGPC_m+96TJ}_lw1QN~v%xmG+%*%Sm>^ z^chrUM8xI7%Ly)7{r2&7`P)b4e~u~^1*|4c8T@LXX}!0LoKYHFf~M|dpVv!H!ak?b z64{U_L_MQL{sw+3{-Zhtedo^;aS8eqc4YtJZf^?^IG05dwTT+MEQ%WYYBfs~1;mPauQjurP$SC{!6cHv@zh=_te-X;=IEkb7S; zg@jkoHUob!On?wGa2fUdm;Yw^uoRz`u;BC-Er6y86MdQJy%@3(^Dyyhvo%i?_)U(v zYuLwnHBm8S<;shZgP` zguzQ_nHv_uwj*U-yZE9f7s4*2+8wG%0^JUHhOt#SSy_z>TJr4G#u^V`ZfOBp>fyOf z=r{_S1e%EG#)web%wqRpQ*&)~4wDs&7~i&c5vK$(FPOp3msEwHx|SC-!dE!{1-yjR z7a-6>RCM>qboRmHcLUX`-)x45rjqjt$j8F$ehbwFY!YxtQ_1=5ZhXj+Mqq#fTiR|xP90eUBcH2CX^1^Ldm{E`&l76w8EQ{0^iYGeL25_j2n!#uE336y1`K(BRb3SbNi*?3qvc2plN2L8n;U!uzrm#m_I^it)GgeFsWRN2lE71WD*|TqeyF@ z*m6T-qOLu?sQ~2MFaKdQ39ZwU_GR>N#0%n9_ECZ}xH3N&2Cr(m;`jeTjniWH8FaW) z7MFt}A!3+;2ooY?rVlnK~ z6|QQZBU>Wq7G3;CVM62qP}UE)HJZ!`5W*Bp?s*s9R z2>dfcgku3#_C82W(P&@CX0OmP6-lM%_z zXkV8Y?4Bgvy{K^TeV*I%VoV6z)aP%I6*W%H>|5vOfGW}rZ&BdGg+Eu^r@t)NI0!PF z6$uG-DD}Dk5xEj{G?fxwECx(6Suk}S?(96h`Yb-Rar$ZKRovsZ!;L%<1aLrY8j zxHB}c1WLj1pr9ayne#gAg2KmCc}d=5YWJVzCZru^SJ@ONm?R=8@RC&>AA0#+6)|6o3T=Wu$M z0%{)gh*s{z(pBGd0qBr4vI?F3JGWMyedH|Z&a0V|zJvrX5gR5fwamV@ZlZPrNOSp-?Yu_?W+owkY zXi=vluj-1r!QdzB33GG4jC2>YO=iq@g|VJeLm?+KZ^B!E5RWIHMG0AiIRK!StMmy| z7?6)mrEu=5s0_F=Q12l<7Xd4}$$!cdr4y{f=>p0!R4cAt?T0PyV}Z9+jt1LF0jtVo zk!Wz;Pi=jXz@vbu1vmGhVW+KTxv(ZX{-~MN$SOz8*UNXfjt2_73!p^klY^$k($6a~ zBikF`QHjunMVtN_4bR0Ya^C1?Wob8Hb(@M$f*a_iE|*};qd^kHL8V{>=1Wt-96QuN z`5ha!N^T5F7xuF7zKGM7I${$Ffk`-FGkwB0o&1Q{?W*jq^}uTiJTonO@1iNI$LM*8 zMNktR?%d%$one39JTkSnAf$yNj(&eo`FA9~R|wOg|7ts5%$z;Iye-93JGn+qV}Klt z4;+p=D+QrP zK(}Pna^ywjGVwRAm&sNF9PFgGe;SaFm)U}W@qhG+yZI^(UI&`!e_F7n1BWQ(EfRrn z#BQQ-cWFvk2K#2VR2cP?(|a9{Gkwv%{X~D4uXFAUVYT!>#Ph{=v zcO0pQqu1fnY2zP=+Y5$B#HCy*I7>?LJ0&-^*vH4`pNULRd_REJiG^Ci1tR{C1OYPW zQ--68m&Ta81X{1iYDT2RUH19)i1N!S;HMn2FKew-WzL|O7x>vwn4I|;=C#5wuhk)S z`k!eVVY&H@6tt5{*Djexoy9C*%k?Z^4V55Ihh=& z>jrlmEH?MJH!gVi?p1$4CQ^0>PT`ZD$d!G-AEvfvgg+UUd?lu#yY1o%z>4wmIgfJM zXid>b-0izzaVF(2KkkY3f1h2V`_$t<$6weH>b!bZ{i_~lfSS7Ntf9RjZvkuV@)at? ze8I5RaqKAP)z}s4lJCPPBRNCLA;RqX?RO}F!ouxygka1+#PvCmJ8z#Ccm7!tV z!@=>DTM!{cPZ{%jt?{iFHB2VlD{y+>b^p=Vh14haEB$1TWxu}RChSJg5i+-2m?%J3 zOIJj|cxNA3&$AV`ao~6@WrhXE^(1-6_lMXYmE!tl*igtcZSi)oc6xA^x|H*6*K$|0 zpUn`Q@8aC0GdtbLhXKp@4@MCayTV2_RS3lgUZPPh`EO@&?k$!{Z4{>|0LB%$fE3X1 zx8jG`Bdxl_>RCsh40a7rG?Wt{0rL1BQO%fHLcm=J05Yt(Jv&4)1|XbM+s{?PzetR| zpwf26r;fnWoB;h3kK2U0 zj@&l&mdixlX~kt6IW}KfY;mA#fZfWxRhfqAx^nLmt|xUWP^Bcy{JPuxydONHq;{F01b=lRW3``orB^@z+SjCufU z3%0xpf@1(wnL)w%K#+ND3zpM}?4Un7mon8y&yT@h*4q3pVitWVCwi&|;cutVWI($Q z-W}yWSLK%{h6`(^KWiGy5gvhVH$9i2!j>O)3>=nRaBAZbop|g5Nn*IIDB*tE^CtpS zsGWqRO$7Y9>g_$S7V7Kn%u`k+uBFKao0CFL4oSi4e7M6Bg%LR80jR8vZ>G&Z52!q< zJ-xn;ar&We@V~oHEXWx_1Z4X!r35O+#buApf z^d?up1xun7x%B0ay_H{Jj%?Olm9w>&sHpfV{;-aDz~QQ zzk6}f)Y6}gUEfWzbzl4TOS4>62o2F zefl)QauYbZz5-mgNAr)Bgl2n`Uv!U{5@@d#J>DnY@WE)EHFZJBo$r?)$3RE=l)K|=Om>ob(H{$C;8zO( zz`13mZkzJ|u^o@^GRdwT;WSNzzj#aLaLJCT0tTTmY%+EK_G(oPX2M_KBIclIEE3Dz zGH=SdtyO(FT&K56w=?aS=5u=R64t!_aHY{?C@Wkim!uYbk*h7{Trq3+RPGF<qkriMM#~UFS=LHlCo-klr?vK!hnHrih(L{8n_?dRRsQjfB6!(pP$@!Xh zi_51=VDzRTH~esK&gRkZ-F9xi^J3szzcXF@iqiC^Q|BYSCfnRuuUo2BP(0w7&z zVFuoE*6`R}a9&}l15@(!0~tl%B(3V<+|+aIUJlqM$2%J#8cgaM12_R54(%`j5UsbD z?ey_Iwc%kQ-2mK|I^okf#|Q@@mn2b>GZ4$-am{uVpy%UfU0XlQr3Ex5*HmuXlN4ZyMTS1FwR%#O?9)1Gwj7+na9?Pf%jNA^uz$hd$gxKE zrN}+5ZlvdZMI&vOby6|S1N=a3CQuZ;88IG6xV$Z=+Gue5-=Q3o2W-Iy{ZHC9m#e`} z@{$-TYZqb8W)APPT+ODkry|QJev<(z#yiXuty>=yP8j!`973>+vagdFx@1QFieCn z5i{CRTMVS`4)96H<(1K{W~Ue)55=I;vak$rEuPKBe~j;8=itD##LV47Fc%i=SwFrg zwWN@O4j~!gr6REKEM9A2ngK$4XmZhvDbK@*VK+}<3wfT?Ghu4fib?{86MVKlY`DG0 z8h0_@4sC2Mv+WVSUu1wUH=wVqXGmY$P%rt4|J7)*WthKd9O<|${?YT@<1Yo6YXWiE zb^61Cm6=NtJLSe%FG-x^oZqq4E(_~=gP~hMKtf=Y#DWf9QF<;+rAtFYAIO!c`Ztt$ z*76GoP=A8oto1$Nu@c^=Y;bqgAmV7skjzEk*Lcg;%dr2~0>tJovDwpS*}tVrHoxNj zBX>-LK}7__weR$m&*GgGuO7KnKBAUEv0^r|kH)tk8XO<#(MyJoGw&d6DJn(9wqVtx zbZflQSfHWBuoQ2QDd(%*+4NB-^;ZdOFJ2|I2&dy8H6^R#StJ~hX=hiww} z&pS203f?lHKjvR9MQn^5{?I7Hw*8A|8X2_TXn#LHGEI?y0ql|e;wYm~#B%&b015N` zRkG-<1{&K%;qUrR?N7pS2X)yLcAz+6vJK49l}vK5jf`cgSQPm~O^S zbIDdBi_X0#Q#@=Xs+MZUb9d+;zady;%nro~-M+fn&m$rdRbY$zE8cD;n7ICVe;df& zX>P}Ie_eoC^s_NJ$d=^|mTOZq+Te`*4&E7Qa7$+R|{`wk{pJ30z^jc2NIYA1__4oA-HQ74l~hn-o) zheG^0_MR9!{fdA!H+wn#is}iykZJ=r)-Di5B0jD3u56qV4 z-v`56HIGwUZYlZ5nYli!y&f>AXonZc z&W7pP;r?QZ$xOmzc4A>+tz%+vZY|h=YRmxuq|?yT_y+FJ+L>b}^Bs~{DH|+aI-lT= zMD&&U(iFeU#B?ZAjoTnwqe+|=xnC;KyZr(fAwKN5^n;)C+SU#Dfli6A3PpQbA9eyU zVJvrU94l8SMnG|f0#UPkv8cs^c4P1e%($WvjtB7O-m`AR5g)y+5Sv6JFO5#I?_$2j zCHK}$J>C1a{Io|daKJ&5FOJ?QQ|>;k*U9g}pV1@I40Ag08`IEte|F|}%a(U19(<&3 zdLbX!-?N$0_BCmcRKa4KRzoqewDfOn5Skw7u9`!{e8C3XXATzI-=AJ1gB-4F%yQps zANA+36etx!ASVyBcC2X=RUsl|OwTZE)&Be)_p^8Gw_LwN_{EDXG6s$w{Ch!mCPAiPW zy6K#x-0@}1X$tF+9{vXOAFT+VK)1w8m&QJ5WOrvqU%LL(;n9s@%`LJF4F!ENp#%hE zCHv}KmfIc}pwN~w>8G=vYbl0iv#5)PRwrc5(h@<2B?3}qK~e_;cO~*`10eOpfsMRU z?vR?;BO;eCpUVtsk2{%^zJ+xpns^Lb#>VD!{E7c1$|;JLN@RVu9e=s%N*rKORXh`_ zI{uF2npX*L@&?7QbM0o7-@Y*Jyv}+Uw*IUBg6q)6ob?*hHvu-Xe;qKEMl2HYp}qe@B@1m z9t=k}ekI=adt5em(PLzpdmN3aO81bsz2^RY@Z{iQ2`Wn9 zFSEAsZL)8_TyQCmfXAZ`1uLEd*WwZkHzXEIH8#$3ZTH`*qoWD)DT*r|J-TXE2$@#H zIL0ublA4`%>HhiL!s3uE;iD&&cG#0MeT@=`x;KoAQ)^KR&=ypl9&3yd~uptF}F#s4Z4*pglDMm=QgY%=@`x{4AA0lJ0D2+Fx zHx%v}1lJ#WOWSKByrN*S+!hcZT>Y2NXjRTY7XT6#yjMD!c6{g*T&Xh+*#Bp5wXc@=6eOCjY(pe-~EGS6Oz~Vz$0w7;HQ9rD<7O z-YYJsz@Lt1T7R6WFhH3}183yKtY$0TIhjJ=hHJQE_kC&G^Mayxap}eR$EFSTj|S2P zGW7m%2fEw0t)Y;7@bsV=-#CpY*b2~_n_F^BK%4)A4%V&JdpR-yqnh!r3bI&vr?20c zfj1$d9u|Po$YUEeZhLN~e*sa4CcDE4rCD<-_3Jf2_uYaGjY1<2kGB%XV4j zZjmC7Cr(7B)wpYv;jMaC$g=x#d8y0_3|;ert1I)^e6qi>GU4(&{TPnSZ9lS=8-%hheA$HdJ1<^8@0ZI2k@SxjNHUz zu+O2l#mbAC2a=x`TW%L`9;>_v#hOZ4^{3y_BZGB}_C{6jOc|Qv2!P9O`Qsh{NBi>) zE{~|`OhzO_-`HF19mz~`2LnjD@BMuow&bIpj}&Ic&QNj*sqNPa8fB7+>*tnh=RbOX zw8PT%ACw@ozg6Ck;s%%q+jD0`04B6;+a&At4Di8$>$ISF%Wdr%8rR`!E99^u25HP& zu%W4Y$N&i9*T2g4z~v3S*jKdgWrsV~@TmB~xa)+E(Ji5K)R}R=2EXgK(K>a!$-Spw z3#-ZSE3ydSb=%LiA=D*%z$1GsSSv`ILLLqAm_Q(0CD0NQcJG~hv_ulv3?|c5w^Bra$=Ij%DueJADXP>>|2Q&62lvpnDj!%D*Qo4Bs-Ee%xV+>Q} z6jPiuew*#NOlZPg5w9!YjJp0*+Dd_I6!m47G-zDtm0BqPG#zhI&eqxvvlte);=9=R zFad24)vc-e&D8zrM*tL*auKzf`*1$Dc03kH?dXV*+Mue25s5kzu8QOdC9$);bzA1)aH_wif~-Ppx0lyzFr%ncm*)7c}3|^uvdspRf>is}2qg{n4zx zlx;z?XANd^K1F8<7EVr1D}%z0E^8Yb4kDCcTl+(si{v26$g|W@s1JVRdx$MF+5;uYkcerP;S$qY=lis@Q@`qTC@I#lXSjqjFj0*YN@ zNX*8z1OjuKe(&rz*XSv=n&ldje8n0^4XichID(tud#CBICRI29B)Lco1?7<1{SaGO zBCY@YuJJhB#SSe8+=$s~U2ojs7a!4(G2z|69djRZVlvt!5}u~(-uuKOKj?FIg9@GU zul;wpY1mgJg!Y1?G_M)qPOy#ALvHrAWcFsPMCHobS5VlFM;TJE}ka zaJgrrqD38kq(O!KP!{t3xM{&+j?>_rrKdE$rt}Uj1L6bFFzflC_WHZ}Q+{3rKaSft z;cds;vm~v4r%R@M-69xiqQvLHbpS$F?@QhLI=NI{Bd_8~It=;OLaYT}ev!K+mRmH3 zmzTjJW%l|7#G6%=daWn|uCb(>1qc%w*)>gBQ_hL(@u;NswT?nhT8A^$Sk}9yie!7a zm%JSVZQ}@XpRGHo;p*2=mMPy__n>+yemsQ=3=Dh;oqE>!`|5!{NW6uco!vp~xJGL} z2mlt%PZHi=DTi|pOe0L8yd4q{SDQ%aHk4mMMU_bcPPG>Wj?B4S}ovrk!{znV(A`=5`q_TERxA^78$|#!!=O^Jb#OEQaJPEWl~H zQTTc!jOaS{X$!9Y2CtMB&_>wVDuwMR~-oi8h?Mj5yWzL#mP1gev@tA2J zXlN3+B9<;YbtZmz{oK0aqZ4*yIpZtE#U%wgUq3gWQ+~two2}6-1@13p_05mht$X5FD&+=SwBj%6KbumWkh{5 z0L`$S7>fKDomtV$rdI_)$DWht3FA)%1jHS115G*)Ew<<@@j%^nJly(>KhlW<0uOzW zDWWC`CX1IMk@@6TH`59}cquH!Oc7`h17;3>D*{GN6S1d2)|gl-@|kogfiDUJb|Bjm zzSwJB8zmwv&4^sgs(l^I!gGGlIdp439yv#^Y1-4iV<6h;CW3!MAFSB)v+8<`($`~NYBA)r7|A^FlS;5s;Pdq@L4oy_49CdKWGre8xDR8&V+q}gKxU} z$vAl)H+rmVZwid!iKxF`=B2;kl2=q1Y8}u(f*>BMok$dl1c}Q?ZYnqJID0yhFNyhy z?uSIj9g8D9)5F_AYHqQ%D9y@Gx~)HE7veiY^1geQ(f8?=kIbvMZMNfe43jfm4*d|d zq0p?chcQ$Kbw;)zLEvlj6lN!L-V0ZKx*L>0pds?h%|0j} zicKL7t8-4!zWh8G&At9$!j#RiVJmp^Rh2VDE@EWi zQai{~Eg~OuFQRP?Jm`B%eb2RpsBN=)Eazw$&jO_;y?W@D04RtjE&O82{|usw*a(D zLZoeCcB%rTn-+=Ym&eB_8(nuL*BY0`wj$yT^e_WkW=!2~F{ffNV^-}>y=nm=YJy5O z&#?_@gI_$(HhSyNdZ@~h2zw^eQmm5lNtgmJ^eHFVn6kH*H*SBb%$+MtHjJ=P!QzfC zQV=G{3T5Z)48ejo?gdbZ5b*DHV7FUWm>|m^U~O*Ni3p)%?JW#-4% zmHoYUW$!0PBHW%`P+%+%;yp{{Gwl|oAgMgRiP5WpjtFDP@PSVk@j92eaS)ZX6}uW= zzg3Fsk0SG0Tx?(Z#i{?KuBg-&H-hXKZk=;87LKDe{iN5F^rtKq5H4XC24@q)YRoSz zF2<6B$?-I&`Sq~M-8dQ{#p!-jg&_lJBlc`5J2iRmhn;sPt458h!B11G9BXi5&uRUh-t$dHB0m3ucBi+YCatxoSS z0Gzy^q}Dd;3C#EEh3@%BESgo4C?wlNeNUENQ)m1kp8|X+iL)J}1duv9BvEpsZeM@t zZb`M_c<+YvEHg-IgWdM{gGA;s!QE+st_KVGroJbW#gT4?k{)?PcRLHeJtY5JV=`_9 z;*e4)f(9E^!cPkHZwExSAGb?Z`v(yp`$v?Nj^%| zaW~`LfTj!IWsc zpp(UVUXtPOs8q)jZR#@jAvBv1Vc*Mn67^gNrj6|n7$$~Y6qs#Ky6%Z57XN#fRoTF+ zuH_@RDJ|xPBOSHD5)Ft0mBh&-$a6D#V&|{$O#HrhOtb$n*_x!~onN+I-cGg#Z^oL9 zM2HGAbm9eJHb}r{|5vI4y-CAPsZ7+1>WsjQo*w}(e*wZn6a!!vPF8MFKA>u3 zE^@gwF=;Lwyi=nRJ8-jpQB>PxltV$=S()90FEgY%Fh2YNH!6Fw3o@Wa zo1{%6?$P^UwdG<*saRX1v;Sn6wgM&jjfC_J>_NGre1@^{anw@;90*7Eor=3YV>^3< zSWr%%z4{8eB}4eS`AIURWi2s6LjXHV4Ev^IhXU8&Y(lz?iVMt*it=R+gOSTrs??j) ziy~AXv9E&#@q_of;pP;J-;aNyz!p)|$_B}!zDi7>cGL}r#3_deG=XR<;+Nv*YrEb% z-_JNnEw3-Fus{tp)!=G+GghoJyt}?*!l9yHj6iiA9ZbGSq8$7x&y{QaE2B0tU|cRT zeM*R`kPwE25l=;}I8bjuf;usg{17ZvMhLCTVbwHc^Se-}p|qQ9`TF5NVSzPUV$R*k z0Ep$WUKW3)*(hNV^x>e-r%5W5*L$< zb~bu1t0m+{S|2n|WSucc7jN{vG+fibeD+ee2nfejX7}3up8oMKOaIkZ#)2~d=TypG0|W4tZbVLoC8e>-Wa z@awg`WVJPC8q;m5;-k8ydusv_$bR*M{i}WF?qu%;=6WIF0n59VQ|B`xWf?Yl$4^(* zmWSI_@d;uGQqb^?nWjTQSFAQQ#UwMQfG6Uoi(##FG;~3vDU(tVnv0dm9(({3K-t;Z zff?zy*LF4@Z=ReXK&;cYC29170*J2}b9kE&CAheMn*jSQJb&`}N`t9_EHq%TI5nID z8CYlXVDF(3I3xcmOz@PYAor{&=#2bE-31m=3@QYtKxb+X*#^Us#Y&O+l(}Ji)#NE$ zdzZ{$Nh07oCNq*H^YgNX_`CIAFQ|iY7lmoU!gEOo0bd>DZ17@Rd*#p&ep6#plXZ0H zbM0UtokY5#d8ePmO%Be53bS+%fSOcIa)78eqZO5Tqbd6QmmPjNx_TRlZ?OxH?sw?; zKVokF2E2S_hURTLtT_Lidz!|&cBG7RLf`TJZB-}N?}I9q%SzgH;_I=-RQJ-{FZyB_ z5y|&2J0c0gUS6J0-f)NeP__XMy6X*7VCPY+ic9c|iH*!n`>Of-`-c--XkZiHVnsYP zuC_3&?%jWGE?ue<(G&<_JEkC&F>|*7Bed%38$yr>_ocJCqpe!Lt9}*~hlrZBhJ>n5 z`GX76A-S_r zm_*6818posGb7HwamK1#4-94{M`A}k!CP;TS zl}l+5v`MXP>)nv0UR=HZOO1k(u3l9|Ar7}TLTVW5;3*WInU`cHaHkW5&&ru;wjB-w z-gjhdb;g|>y;2_uTmtG^uCK$E6pP+ARct1;rCFq6PaCfwoH+lIgepc4=_KjI7um@{uv){H{s2``i z3|5W93>!P0!ZexR6ZoVjw|JT@@X9 z_$^^)vog}XI+q9x>q^xA@$L|7qZwO+?yV~=)=tDSN&5gL1Y_T460E+SbN`h5xgKnPph*YI(hGy{C}TiFPX}YIiG@T87>FTE z(L%;S?AsqMwSS(UPxa=@^1&GB9-k0$*%$@uPx8NEAF2E>@nKQnrgySsQ(vQPGZ}o{~ii>+jOfp^;IfWGDJ-$t>Zp0Hs_ zeXa&h;6VX10N?P#+55b2GvZ@Hv|nNUltxYwVrL`cZ82gB%rKqW-0Y@# zq>{-(3r40$OUx4<9A#WgniqCYu2>zm)+{3BuW;LkjGMHH#P`~UZ4&!fAzNMi<-1ak zAV^?@B)Ut^!pp0!zW7(nN=gdAeC9TP*)=GDp{RFf@i#uHay0%endkHP?I7uKQ$IR@LgRzN6#{s&Zcv63F1dzC6I)M7lk>gOleT2Wk-2ak=AA5SysQ zlidHXRFa|oeSM$mH%~_QCw)7QmQxCvg@N-fE z_s`kX%|7f}0qD!-ucaj=kz?tD9*&NiWTSQyDs9e<>MMCSY_~l&PRS!IUc@K`6~Hjh zkPs}$@*QdlYH9^OQn|W!kRa7y91CuoQ{Q_@vh_Zqf-%(gNe<@iSS$gu`dPDsUnrBZHjrZ!qJuY;$$606aiSOiZkdt=~ySXS`VL#S0UJshDDg zUGSjFA&Gx~)PO2mei-!gmb5ZExZr_(ffKJ>0)HXG2;Y-E@KYL(ARj5-ZNzF(l#AV+ z9kwm8jZ$LE7ojf0kaotB%6FvDaZg)cx1i0v#6SGev|CVW?Dd*;@o22e2}*4`AI@Fn z0_p~gWTu|BTPla-yHA6NCJavr$x15GP|=BnDhY5kgy`txq$*5rQ81E(bW>^?$a5R+ z>FK#he69Ni9HKu;N?4@A38CToRzQ-rfdEL%Hmzfpbk&cDw8(%KlZjQA;3KbjTFXW&Y_bk%q z5`1udK(dnA`V_}Fuya=8m14O2Tw9C8#XAsla&+My7)L07f?twVX2Fq=fq|}M=kp{( zVB!$b4N8J9*%)E6vM;AHf=SUWhE*qh)zrb2NlM;~a= zztoZUfHtK=V>N|riSNGV4o{^~vp0`hNi=1+YeP^%4I;}~^{Zx|?Kwe<2wtY)i=MNe zu0fo~H(TTZ$4A)-xu_XZ7=p`xk@d);(A}AcBI~YghN2yZwnEO%NpoXe?PCX_wrZ zZ^juP7sMLj)%Ty7Z^n}`CjI>wf+pk9N7?h)Al*W;o4hru{C~dkx3#g!2`AggG<;Kc zV+EQY;~{l*4GpGG4tatWE6`->0rMjOG31Oxo27NOJbBtW?l+O8tO-zl;1|(?%y*4$XZi@&|i@%(H zRPi`P6EDdloW;%dtEiEO7}nfbK=I70PCNnzv%&BLHCY(;xY<;V=Rj{^>)99H@%7)e z)%|{@)xDptN}<3{X#^Es1ka~mC7CTX$Da->VVF?(6Xd};Vj!pE3r{HEnU4KUjg^_b zqgYlYyLM(vUG^5jttRACRUU{Yun^J7kmWUFZ;0xq0{Qb%D6!IB{3GgKcWzK5k@!)a zCJ{}7m0q#=OC0kmaxmjes;1)m;YBMO9GVnao~rfQ$hcU08C)zZV^1o_#&eFAgB5D~ z%?x3t#S<0Z{VWhk`Z^G21YF5XSH(^OlN48Vii8=$0hreQa0Om#z9YDp2|#1YEtX5v zE^IoxsJ!H|IwM`M0-ovL2{xNvhV2~@RhtR#x2hu>IXp)a2* z0B=5Q#BfS_^)aVj`YQN0<>G^8@(y~~W2!Jw*^sXgga+1g?p{M&Sd>N6I|u6m=1~xl zyp0>xVfD?dH!>0if>}m_*=h@$N}Cpi26;RAe7t<*x*D85uO0GMr#sI^^Na9|s-~O* z#CtxAsn(}VxO6hxbdheqsN}w{1Dv{cwqrcw6A}$qWx;?$l?tj+-uSF~UUMqipI+VpzNcBd zlT~K_vjVR(qKB2F9jl?5HY|SfeHV1WJLh}zy7?JUR1I^#SYQL?eqxWyZ07OEp85?wZxxVJyi8ZfDzl{)3Pek*#AmH#J7B?(xvxekQfJPFln}V&_ z&c&gl=GQ>A`!8h>Dy)6;uu(k@G9pNsLro`bvFgJA?o98_!bkk`UN*8?+-L_XacCE- z${mEFfOrz}eeLbyfS$)wuXVb%Ys-4gVsc(FB4)gr;6T{drqQ1?*p{F}d^e>KG)=M< z{zZ$y`=ol2vch*ZlQ%DWHCN-Vir*s9v*?~z?Zun-S-M$Ay~~I|SE{ICmbP@XLJEV* z1ph+2Z&F9jU2}XP_Nslhn{=AnfT&cMAjz~Uw8Z@E@Yc~0bFSaUYlRCOoLr!qunqBM z)cA)LSwUjp83cS2ZZJJM-mJR0%ox{@8eXjrXNSkMtr8`l0V`1SC*&{|RJ}EX1i-ry z(4u(aAYo{p@lF_18_n-n6D!9K&Oi+tJ#bU14C8W`B|!PHX6*yg8i$UiAHAZcW9|#X z`TRSlnag((F%hlQVPnGvX2oDufUU-VKnMWonu^Zu zg?9@#Ul8eO6315xSzM+zovhqrU@LeMo_BVu;wl9fEG1OQN*+&_<_4bzag z`W@D1b#PM6ao+tDn&~?M$@?G)N~FN zT7yo}G1B*7ZhR{=Cr`k6#Bv^<4D*LCKtC(P^NylN*fx)am)p(Y+s@90H6FO&`swKW zC~{rc+shzK=wczpf455D4G2q5RhC?M6B+~g*w z?az4{*9s-(=C}bwp8#l+Tq43gG_o)OG-)2WKtix!E?vSm%8#rd)EHx|7!Fvv}B!+l{$OV>aksGA%VrY;R1a zEX@S6ce57v72AqB`LC?IiG7T8FD>0Ih{1fyX=!O)PU5%pwAv%kTz&CYxCylB5a!RM z_A*F2dqMIaGwDM`JgX7|VHV7HkQ`Pq`WO(~AF279y+tHuCCsz3ot^0mRi-x+ITHRk z=;ZI?wqS6*E<8hr`-W+kd~I!OD`2zU!1QWeuR=e2_v8YB36BxV%V)q-N}#27bOG4# z-nglTdDfy2-~}i-A#X@THMPb{ee2>7oyYfff|x}!s*-I*(s*m!pjLVii_y--<)Mm- zAPBNHLg6f@qeBV~6G$*%lH0(N?ji$54&0L0iXUK4%g&bPNbj1^B>)iy!Ov?eDlvI1 zTY@BF#Tq9qe`>|7IKzgKR5{D6Q8EK%?|G}jN{`*K3op@fQ(R1->6@&Zm7x7kcY95l z{BjO(!E^d%5CmHUk$X)5&_?rkSIKd=^)`TL{RCtHS)N~nCoiXGP(!|^Mn;*rs9PZR zlO2jPwB3y%#gq`>B3vDUXHjFWV57%|IqZV{Ps11EMpp}Z@kGgQ-GqHDoVWVCKXFFA zzVC-n5de*{mqGNOOz5eo7-85LAlyoxE;N~qamg*8P~=_n+`31J*$xFbaVbTlD}xT_ zW#utWA~@ZuYmxS=5^&8&HJHW;NM_uLojldoUv)y@4ic%YEpZlaJ9d4Yjal~GP8}EV zHdjnDseu(6NJQ2xnLJ01vDcWY;|`1b!ot>0GoQ{r8;H0B5a>(Z1Z5s7EUI4M7C z(*~Euz>vuqp&Vd>`}>&%X95o7by~C%F1N!aalWS@#^bTc{JQ$g2epE^=f=hZ2HvN? zs5@-Nm44RPgfFp*!Yr3LYdrF;O4`kl`H^z^lHlecR! zlM>!D8P2fwJOw@XUYqgwGR)is(<#NTbgX99416zV{317`I?Zrj-EL$%Ix> zF4+l0lgYo<3*2wIEk+j7ziMW*nhLRJ5#&>Ssk(d+Qf~DsRzp??g$OtE^Lre;UkoC2 z9;}xJzfvv@28AiCy74$hM^91R8tCOELF&V9Z|?3c&}C*&?VSb8fopwX#G$Gj5P7Y| zqw~e1vwjLR>N@jc!M(jQgC5X5jokn=%T&1_m^>V$JjvHj%(y@KSbaJb=lI<MA&q)MHz6=#~NI3yF34E8-StET3~TaXU)araTaRvKtgoJgv@VV z4AONZ;X;zPm(0`dDVWpoQB1gnnov1rU-^(*x#EBWL&o0qP6LKkdHgWH)Z5{-Xb*=w z(bMTN+QYq5hJGMyFgRbiJUp?gnYPtZ-RjFKPr7-52k?jhW`0&yR;x(U1)h!laA><( z)xv6`z%)TZ-y;~q;t397+POGJMs+3cybO9P87ZsFN8b-=ldx%&^G^+t9$n$J#>HxT z4PdMD#=FtD+@^8*q9G@p7Litg)uc0(JweOkU^<`Q$6ftvIx`t{kHayrM;y$oqt41t zof}!cf<*FVDptP*o!x>r)=PJ3X{h`N+E_>}FV3lz5c77xq6J1wc^sXno0*C@9sO^= z=IwT~YS|Q~q6FL`ZCn5oYex)zY)gAG!v$9oTwQl9E4SQ>cWLNWulWe|z# z43Z?WJgL|KTTIN=#R-x4#dj2u>uk%Fffv?-x?$~^y1h~BE#TMl_L%iQ0j2Gr7`2v{ zZNyG)ZWCZZ)#PAIB(;jA2|&m;TM{0FgeW6UGM^1kisnp&9S^{Egr5|u#@?$7c5b~_ zv4ly6#OnLz?3|ztKaJOd@kwGBO1Rm)))1GF;n~x#jSuuV1bDDB9=DQ3^%|2hYm67lA&Zc5et!oMO%R#d8y&cxVUc9 z`MULwwz>X0Erwjjq;EEwuihtW_!qif-v>T?39W-$So|4p;3M+AJA+WwI25T*u_qj1EvNs0> zZ8jm?4sBk`UHjkatvM5%q8Zt9uJ~l_ec1NjH*t>*0T|JBSkp`knG0tRu{1HNZ790O zZHIFLYcKYe4!tVA>gbV~Q^=%{={gEeP;;*}N;AevrzMcwl^5%Kn#RFl@f=;C$}n8h zU!8}?XF!>D{at&6slN-7@-^y_w#7ZQzHei-oX(Y5_qkgmexmD88SPotAE)A~1g zx#6!yy)X}H`BzZn-#kL62W2P{DwP)w-6SYJNl1#FO)f1hHRP<)hED9<5Y*f*?V)#8 z2X4O9Ye`Q$`=+ZWaoUr}YP!3#EwNiS+Z1UIXLpcB_Hh;JJLXxXF!YVd5JtUuh?^&i zz2*z;O+em;a1A^=#B39xe79P|6fa>@cr*~#`N_v72RL{a^1Gr}?x6O%`Gdtu#dYrj zv-Sbr(v;xf8{8+8kRKEUOzlr;o-BNSLPt;AEP7w;j0YBa7jQ+2EGwdi4Fc4G)@T?9 znB$&~mWC$a(UaF@O6O|&y1E=>NdtOzLjK79NZA71c*us_5$C0xhKhJlZ3_jnvLgd%H=_04oxnJX}fpQc`Vur=!g@iOp!- ze(&(tug${c<=~c}t8*-LD#G{DG5)~#7TAuPamQkS4Z{vPwSMH6d%3;8TqQa4{ql{; z+xOP;(xj1S1ajOX?H68b0sib>yA&pfreW3_s@Xbc+8Zzq(Uv250M5v`w(&B|=x3_o0jql;g+FB32DFJpE zeOY?2G=~2j!Y%hj6!f%}kg{m|!!0x8$s^D&=8BhYXDeXTss31Pd?KN@4gu2?rj67J zHBUltTG5B;wVBebCP&50g@3(+q}qBq#ONahfnk01IWfL6z`0Io<&{n#wuoN(vg(#a zNi!R{`h`-hg+g%Pz!f{}(7@JqAvY)IdiL-W2_Q9^Hy?$44868v=!B^ysm(&ZOrfIGT+q zGb^S5Ca;x0CPCO6##=JzlOX?r7h;8hcB10nB__R%Y{?=||0;!l?2#l@fBsy%+&T?Y z9^4KQ74b~f$t#g*m8Bx@c$hT9&w-NX{+o;ePo zTD-0Wb=x-uYHFO>+1cU7&CTE{y^05sm8n*b)YCUD#&S40g(O%;)ijqo(g6J5dPVWE zC%1u2zkx=~&k^@4?q2oTM*Ap5ftgUS=|T~TS5=`11Wb17{dTOYYt{MH^}5FDYR_a? zyGr+`U=?YpWoZd@fWF{)-k6VcGB(k@jid7&n=0?>miJzou0mdF<69ezl`#p50F`_l z<+I<1&pTuaT_KtxpUJh-`7f2BZ2dR2j77VQXlAWyDASURF-+H!P3tDQ09Ltqo?=b- ztaC~JW@Y8~!NGxtKzdeK(Y8yOMsN>0C-W3!JE>Lt2V83h+B(1q%;)g(o`?utedd?u z$8X>32z-evu`elL!yoq@{e^=Ku3n0a?v}o5DSn9TnqaP1>M|7BXa98zvH8CW+>d zb0S@`6FL+xla5W6$*kr$N&TYU;q7~U_SB|_uP1~&nkzY!A0=4JCNasAV#*_Y1*Od@ ze0NYi2C}?yN|QP?3R-1K_#><`5}1;O)Hv769oS+D*kcO%YThU(FyV(HaKTRk zQxuw_wCmCxiBrH9gT)Zj$rtlOG^T@ZuWv74A-5@K)h}l?+wN zjEjD`K&KF&_F6L`e$DZ~WKb0X#`i;^y`OAtYkCxW2hr(4E4JT*S25dq=skEN{DEuZ z6Nwfa26WX*0BEhFr$0T#!u{Trd39Mr3>rKEC3$tZN*S|IRq!_-_`SKg1*ieifD)h% zeq{j-@c+LzJ~;U5_|FCbumCt503ZMYumj5>00qV0dr`Om00j_;zxT?(b1(ot@aBKc zEMo>hpOrt`pFJ?s4|ta<3;_K7r)~=H3;A;pY|DS@5|{FEc0zbryQAz~T_hO!dH5I+ z)-IN=R`xEo5{!Df54lAd5hxFH7b|loR~KsuMqg_bqm(2ep13&*W$kR?+WgItEnc=`%lT= zmGl1Hs{d8{pXYBdkF2Y+v#SfYtgDNMyQ>rGKNtKn0z`QD z{`~#th?}Pc$Ym94UtL#6YjB8&2#X0@hzRiu30Yd&@LSpZ=S(Ma7h6wrTd-n|{}j5p zyINYKP_FLM?v{4;9@dr~p6-90!TT?gdH=sOgWUZOZ~o$yhr1`rL&?R)_22#Ze+)Qq zto+?CC~HekcaUTMu+rW7sV6uLt*tcO?Y-=stZl7P|2_ux)jvn&eZUL<3@%k`FKefN zSc^b7{n?jbG)F19c!4}|{|~VUgr~i<dg%vpb4mg+C&$42x<~-P_yWQd)j~kAP@cmBgy{S L{#(}nNdNx>?6uf> literal 0 HcmV?d00001 diff --git a/demos/DOMVisitor/DOMVisitor.stat b/demos/DOMVisitor/DOMVisitor.stat new file mode 100644 index 00000000..66cac7cd --- /dev/null +++ b/demos/DOMVisitor/DOMVisitor.stat @@ -0,0 +1,10 @@ +[Stats] +EditorSecs=251 +DesignerSecs=32 +InspectorSecs=4 +CompileSecs=9313 +OtherSecs=68 +StartTime=12/08/2017 12:24:08 +RealKeys=0 +EffectiveKeys=0 +DebugSecs=53 diff --git a/demos/DOMVisitor/cef.inc b/demos/DOMVisitor/cef.inc new file mode 100644 index 00000000..984ae795 --- /dev/null +++ b/demos/DOMVisitor/cef.inc @@ -0,0 +1,384 @@ +// ************************************************************************ +// ***************************** CEF4Delphi ******************************* +// ************************************************************************ +// +// CEF4Delphi is based on DCEF3 which uses CEF3 to embed a chromium-based +// browser in Delphi applications. +// +// The original license of DCEF3 still applies to CEF4Delphi. +// +// For more information about CEF4Delphi visit : +// https://www.briskbard.com/index.php?lang=en&pageid=cef +// +// Copyright © 2017 Salvador Díaz Fau. All rights reserved. +// +// ************************************************************************ +// ************ vvvv Original license and comments below vvvv ************* +// ************************************************************************ +(* + * Delphi Chromium Embedded 3 + * + * Usage allowed under the restrictions of the Lesser GNU General Public License + * or alternatively the restrictions of the Mozilla Public License 1.1 + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for + * the specific language governing rights and limitations under the License. + * + * Unit owner : Henri Gourvest + * Web site : http://www.progdigy.com + * Repository : http://code.google.com/p/delphichromiumembedded/ + * Group : http://groups.google.com/group/delphichromiumembedded + * + * Embarcadero Technologies, Inc is not permitted to use or redistribute + * this source code without explicit permission. + * + *) + + // The complete list of compiler versions is here : + // http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Compiler_Versions + +{$DEFINE DELPHI_VERSION_UNKNOW} + +{$IFDEF FPC} + {$DEFINE CEF_MULTI_THREADED_MESSAGE_LOOP} + {$DEFINE SUPPORTS_INLINE} +{$ENDIF} + +// Delphi 5 +{$IFDEF VER130} + {$UNDEF DELPHI_VERSION_UNKNOW} + {$DEFINE DELPHI5_UP} +{$ENDIF} + +// Delphi 6 +{$IFDEF VER140} + {$UNDEF DELPHI_VERSION_UNKNOW} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI6_UP} +{$ENDIF} + +// Delphi 7 +{$IFDEF VER150} + {$UNDEF DELPHI_VERSION_UNKNOW} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI6_UP} + {$DEFINE DELPHI7_UP} +{$ENDIF} + +// Delphi 8 +{$IFDEF VER160} + {$UNDEF DELPHI_VERSION_UNKNOW} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI6_UP} + {$DEFINE DELPHI7_UP} + {$DEFINE DELPHI8_UP} +{$ENDIF} + +// Delphi 2005 +{$IFDEF VER170} + {$UNDEF DELPHI_VERSION_UNKNOW} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI6_UP} + {$DEFINE DELPHI7_UP} + {$DEFINE DELPHI8_UP} + {$DEFINE DELPHI9_UP} +{$ENDIF} + +{$IFDEF VER180} + {$UNDEF DELPHI_VERSION_UNKNOW} + // Delphi 2007 + {$IFDEF VER185} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI6_UP} + {$DEFINE DELPHI7_UP} + {$DEFINE DELPHI8_UP} + {$DEFINE DELPHI9_UP} + {$DEFINE DELPHI10_UP} + {$DEFINE DELPHI11_UP} + // Delphi 2006 + {$ELSE} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI6_UP} + {$DEFINE DELPHI7_UP} + {$DEFINE DELPHI8_UP} + {$DEFINE DELPHI9_UP} + {$DEFINE DELPHI10_UP} + {$ENDIF} +{$ENDIF} + +// Delphi 2009 +{$IFDEF VER200} + {$UNDEF DELPHI_VERSION_UNKNOW} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI6_UP} + {$DEFINE DELPHI7_UP} + {$DEFINE DELPHI8_UP} + {$DEFINE DELPHI9_UP} + {$DEFINE DELPHI10_UP} + {$DEFINE DELPHI11_UP} + {$DEFINE DELPHI12_UP} +{$ENDIF} + +//Delphi 2010 +{$IFDEF VER210} + {$UNDEF DELPHI_VERSION_UNKNOW} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI6_UP} + {$DEFINE DELPHI7_UP} + {$DEFINE DELPHI8_UP} + {$DEFINE DELPHI9_UP} + {$DEFINE DELPHI10_UP} + {$DEFINE DELPHI11_UP} + {$DEFINE DELPHI12_UP} + {$DEFINE DELPHI14_UP} +{$ENDIF} + +// Delphi XE +{$IFDEF VER220} + {$UNDEF DELPHI_VERSION_UNKNOW} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI6_UP} + {$DEFINE DELPHI7_UP} + {$DEFINE DELPHI8_UP} + {$DEFINE DELPHI9_UP} + {$DEFINE DELPHI10_UP} + {$DEFINE DELPHI11_UP} + {$DEFINE DELPHI12_UP} + {$DEFINE DELPHI14_UP} + {$DEFINE DELPHI15_UP} +{$ENDIF} + +// Delphi XE2 +{$IFDEF VER230} + {$UNDEF DELPHI_VERSION_UNKNOW} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI6_UP} + {$DEFINE DELPHI7_UP} + {$DEFINE DELPHI8_UP} + {$DEFINE DELPHI9_UP} + {$DEFINE DELPHI10_UP} + {$DEFINE DELPHI11_UP} + {$DEFINE DELPHI12_UP} + {$DEFINE DELPHI14_UP} + {$DEFINE DELPHI15_UP} + {$DEFINE DELPHI16_UP} +{$ENDIF} + +// Delphi XE3 +{$IFDEF VER240} + {$UNDEF DELPHI_VERSION_UNKNOW} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI6_UP} + {$DEFINE DELPHI7_UP} + {$DEFINE DELPHI8_UP} + {$DEFINE DELPHI9_UP} + {$DEFINE DELPHI10_UP} + {$DEFINE DELPHI11_UP} + {$DEFINE DELPHI12_UP} + {$DEFINE DELPHI14_UP} + {$DEFINE DELPHI15_UP} + {$DEFINE DELPHI16_UP} + {$DEFINE DELPHI17_UP} +{$ENDIF} + +// Delphi XE4 +{$IFDEF VER250} + {$UNDEF DELPHI_VERSION_UNKNOW} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI6_UP} + {$DEFINE DELPHI7_UP} + {$DEFINE DELPHI8_UP} + {$DEFINE DELPHI9_UP} + {$DEFINE DELPHI10_UP} + {$DEFINE DELPHI11_UP} + {$DEFINE DELPHI12_UP} + {$DEFINE DELPHI14_UP} + {$DEFINE DELPHI15_UP} + {$DEFINE DELPHI16_UP} + {$DEFINE DELPHI17_UP} + {$DEFINE DELPHI18_UP} +{$ENDIF} + +// Delphi XE5 +{$IFDEF VER260} + {$UNDEF DELPHI_VERSION_UNKNOW} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI6_UP} + {$DEFINE DELPHI7_UP} + {$DEFINE DELPHI8_UP} + {$DEFINE DELPHI9_UP} + {$DEFINE DELPHI10_UP} + {$DEFINE DELPHI11_UP} + {$DEFINE DELPHI12_UP} + {$DEFINE DELPHI14_UP} + {$DEFINE DELPHI15_UP} + {$DEFINE DELPHI16_UP} + {$DEFINE DELPHI17_UP} + {$DEFINE DELPHI18_UP} + {$DEFINE DELPHI19_UP} +{$ENDIF} + +// Delphi XE6 +{$IFDEF VER270} + {$UNDEF DELPHI_VERSION_UNKNOW} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI6_UP} + {$DEFINE DELPHI7_UP} + {$DEFINE DELPHI8_UP} + {$DEFINE DELPHI9_UP} + {$DEFINE DELPHI10_UP} + {$DEFINE DELPHI11_UP} + {$DEFINE DELPHI12_UP} + {$DEFINE DELPHI14_UP} + {$DEFINE DELPHI15_UP} + {$DEFINE DELPHI16_UP} + {$DEFINE DELPHI17_UP} + {$DEFINE DELPHI18_UP} + {$DEFINE DELPHI19_UP} + {$DEFINE DELPHI20_UP} +{$ENDIF} + +// Delphi XE7 +{$IFDEF VER280} + {$UNDEF DELPHI_VERSION_UNKNOW} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI6_UP} + {$DEFINE DELPHI7_UP} + {$DEFINE DELPHI8_UP} + {$DEFINE DELPHI9_UP} + {$DEFINE DELPHI10_UP} + {$DEFINE DELPHI11_UP} + {$DEFINE DELPHI12_UP} + {$DEFINE DELPHI14_UP} + {$DEFINE DELPHI15_UP} + {$DEFINE DELPHI16_UP} + {$DEFINE DELPHI17_UP} + {$DEFINE DELPHI18_UP} + {$DEFINE DELPHI19_UP} + {$DEFINE DELPHI20_UP} + {$DEFINE DELPHI21_UP} +{$ENDIF} + +// Delphi XE8 +{$IFDEF VER290} + {$UNDEF DELPHI_VERSION_UNKNOW} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI6_UP} + {$DEFINE DELPHI7_UP} + {$DEFINE DELPHI8_UP} + {$DEFINE DELPHI9_UP} + {$DEFINE DELPHI10_UP} + {$DEFINE DELPHI11_UP} + {$DEFINE DELPHI12_UP} + {$DEFINE DELPHI14_UP} + {$DEFINE DELPHI15_UP} + {$DEFINE DELPHI16_UP} + {$DEFINE DELPHI17_UP} + {$DEFINE DELPHI18_UP} + {$DEFINE DELPHI19_UP} + {$DEFINE DELPHI20_UP} + {$DEFINE DELPHI21_UP} + {$DEFINE DELPHI22_UP} +{$ENDIF VER290} + +// Rad Studio 10 - Delphi Seattle +{$IFDEF VER300} + {$UNDEF DELPHI_VERSION_UNKNOW} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI6_UP} + {$DEFINE DELPHI7_UP} + {$DEFINE DELPHI8_UP} + {$DEFINE DELPHI9_UP} + {$DEFINE DELPHI10_UP} + {$DEFINE DELPHI11_UP} + {$DEFINE DELPHI12_UP} + {$DEFINE DELPHI14_UP} + {$DEFINE DELPHI15_UP} + {$DEFINE DELPHI16_UP} + {$DEFINE DELPHI17_UP} + {$DEFINE DELPHI18_UP} + {$DEFINE DELPHI19_UP} + {$DEFINE DELPHI20_UP} + {$DEFINE DELPHI21_UP} + {$DEFINE DELPHI22_UP} + {$DEFINE DELPHI23_UP} +{$ENDIF} + +// Rad Studio 10.1 - Delphi Berlin +{$IFDEF VER310} + {$UNDEF DELPHI_VERSION_UNKNOW} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI6_UP} + {$DEFINE DELPHI7_UP} + {$DEFINE DELPHI8_UP} + {$DEFINE DELPHI9_UP} + {$DEFINE DELPHI10_UP} + {$DEFINE DELPHI11_UP} + {$DEFINE DELPHI12_UP} + {$DEFINE DELPHI14_UP} + {$DEFINE DELPHI15_UP} + {$DEFINE DELPHI16_UP} + {$DEFINE DELPHI17_UP} + {$DEFINE DELPHI18_UP} + {$DEFINE DELPHI19_UP} + {$DEFINE DELPHI20_UP} + {$DEFINE DELPHI21_UP} + {$DEFINE DELPHI22_UP} + {$DEFINE DELPHI23_UP} + {$DEFINE DELPHI24_UP} +{$ENDIF} + +// Rad Studio 10.2 - Delphi Tokyo +{$IFDEF VER320} + {$UNDEF DELPHI_VERSION_UNKNOW} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI6_UP} + {$DEFINE DELPHI7_UP} + {$DEFINE DELPHI8_UP} + {$DEFINE DELPHI9_UP} + {$DEFINE DELPHI10_UP} + {$DEFINE DELPHI11_UP} + {$DEFINE DELPHI12_UP} + {$DEFINE DELPHI14_UP} + {$DEFINE DELPHI15_UP} + {$DEFINE DELPHI16_UP} + {$DEFINE DELPHI17_UP} + {$DEFINE DELPHI18_UP} + {$DEFINE DELPHI19_UP} + {$DEFINE DELPHI20_UP} + {$DEFINE DELPHI21_UP} + {$DEFINE DELPHI22_UP} + {$DEFINE DELPHI23_UP} + {$DEFINE DELPHI24_UP} + {$DEFINE DELPHI25_UP} +{$ENDIF} + + +{$IFDEF DELPHI_VERSION_UNKNOW} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI6_UP} + {$DEFINE DELPHI7_UP} + {$DEFINE DELPHI8_UP} + {$DEFINE DELPHI9_UP} + {$DEFINE DELPHI10_UP} + {$DEFINE DELPHI11_UP} + {$DEFINE DELPHI12_UP} + {$DEFINE DELPHI14_UP} + {$DEFINE DELPHI15_UP} + {$DEFINE DELPHI16_UP} + {$DEFINE DELPHI17_UP} + {$DEFINE DELPHI18_UP} + {$DEFINE DELPHI19_UP} + {$DEFINE DELPHI20_UP} + {$DEFINE DELPHI21_UP} + {$DEFINE DELPHI22_UP} + {$DEFINE DELPHI23_UP} + {$DEFINE DELPHI24_UP} + {$DEFINE DELPHI25_UP} +{$ENDIF} + +{$IFDEF DELPHI9_UP} + {$DEFINE SUPPORTS_INLINE} +{$ENDIF} + diff --git a/demos/DOMVisitor/uDOMVisitor.dfm b/demos/DOMVisitor/uDOMVisitor.dfm new file mode 100644 index 00000000..4c4a3e62 --- /dev/null +++ b/demos/DOMVisitor/uDOMVisitor.dfm @@ -0,0 +1,86 @@ +object DOMVisitorFrm: TDOMVisitorFrm + Left = 0 + Top = 0 + Caption = 'DOMVisitor' + ClientHeight = 579 + ClientWidth = 878 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'Tahoma' + Font.Style = [] + OldCreateOrder = False + Position = poScreenCenter + OnShow = FormShow + PixelsPerInch = 96 + TextHeight = 13 + object CEFWindowParent1: TCEFWindowParent + Left = 0 + Top = 30 + Width = 878 + Height = 530 + Align = alClient + TabOrder = 0 + ExplicitHeight = 549 + end + object AddressBarPnl: TPanel + Left = 0 + Top = 0 + Width = 878 + Height = 30 + Align = alTop + BevelOuter = bvNone + DoubleBuffered = True + Enabled = False + Padding.Left = 5 + Padding.Top = 5 + Padding.Right = 5 + Padding.Bottom = 5 + ParentDoubleBuffered = False + ShowCaption = False + TabOrder = 1 + object GoBtn: TButton + Left = 842 + Top = 5 + Width = 31 + Height = 20 + Margins.Left = 5 + Align = alRight + Caption = 'Go' + TabOrder = 0 + OnClick = GoBtnClick + end + object AddressEdt: TEdit + Left = 5 + Top = 5 + Width = 837 + Height = 20 + Align = alClient + TabOrder = 1 + Text = 'https://www.google.com' + ExplicitHeight = 21 + end + end + object StatusBar1: TStatusBar + Left = 0 + Top = 560 + Width = 878 + Height = 19 + Panels = < + item + Width = 50 + end> + ExplicitLeft = 584 + ExplicitTop = 552 + ExplicitWidth = 0 + end + object Chromium1: TChromium + OnProcessMessageReceived = Chromium1ProcessMessageReceived + OnBeforeContextMenu = Chromium1BeforeContextMenu + OnContextMenuCommand = Chromium1ContextMenuCommand + OnAfterCreated = Chromium1AfterCreated + Left = 16 + Top = 40 + end +end diff --git a/demos/DOMVisitor/uDOMVisitor.pas b/demos/DOMVisitor/uDOMVisitor.pas new file mode 100644 index 00000000..4bb95917 --- /dev/null +++ b/demos/DOMVisitor/uDOMVisitor.pas @@ -0,0 +1,193 @@ +// ************************************************************************ +// ***************************** CEF4Delphi ******************************* +// ************************************************************************ +// +// CEF4Delphi is based on DCEF3 which uses CEF3 to embed a chromium-based +// browser in Delphi applications. +// +// The original license of DCEF3 still applies to CEF4Delphi. +// +// For more information about CEF4Delphi visit : +// https://www.briskbard.com/index.php?lang=en&pageid=cef +// +// Copyright © 2017 Salvador Díaz Fau. All rights reserved. +// +// ************************************************************************ +// ************ vvvv Original license and comments below vvvv ************* +// ************************************************************************ +(* + * Delphi Chromium Embedded 3 + * + * Usage allowed under the restrictions of the Lesser GNU General Public License + * or alternatively the restrictions of the Mozilla Public License 1.1 + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for + * the specific language governing rights and limitations under the License. + * + * Unit owner : Henri Gourvest + * 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 uDOMVisitor; + +{$I cef.inc} + +interface + +uses + {$IFDEF DELPHI16_UP} + Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Menus, + Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls, System.Types, Vcl.ComCtrls, Vcl.ClipBrd, + System.UITypes, + {$ELSE} + Windows, Messages, SysUtils, Variants, Classes, Graphics, Menus, + Controls, Forms, Dialogs, StdCtrls, ExtCtrls, Types, ComCtrls, ClipBrd, + {$ENDIF} + uCEFChromium, uCEFWindowParent, uCEFInterfaces, uCEFApplication, uCEFTypes, uCEFConstants; + +const + MINIBROWSER_CREATED = WM_APP + $100; + MINIBROWSER_VISITDOM = WM_APP + $101; + + MINIBROWSER_CONTEXTMENU_VISITDOM = MENU_ID_USER_FIRST + 1; + +type + TDOMVisitorFrm = class(TForm) + CEFWindowParent1: TCEFWindowParent; + Chromium1: TChromium; + AddressBarPnl: TPanel; + GoBtn: TButton; + AddressEdt: TEdit; + StatusBar1: TStatusBar; + procedure GoBtnClick(Sender: TObject); + procedure FormShow(Sender: TObject); + procedure Chromium1AfterCreated(Sender: TObject; + const browser: ICefBrowser); + procedure Chromium1BeforeContextMenu(Sender: TObject; + const browser: ICefBrowser; const frame: ICefFrame; + const params: ICefContextMenuParams; const model: ICefMenuModel); + procedure Chromium1ContextMenuCommand(Sender: TObject; + const browser: ICefBrowser; const frame: ICefFrame; + const params: ICefContextMenuParams; commandId: Integer; + eventFlags: Cardinal; out Result: Boolean); + procedure Chromium1ProcessMessageReceived(Sender: TObject; + const browser: ICefBrowser; sourceProcess: TCefProcessId; + const message: ICefProcessMessage; out Result: Boolean); + private + { Private declarations } + protected + procedure BrowserCreatedMsg(var aMessage : TMessage); message MINIBROWSER_CREATED; + procedure VisitDOMMsg(var aMessage : TMessage); message MINIBROWSER_VISITDOM; + procedure WMMove(var aMessage : TWMMove); message WM_MOVE; + procedure WMMoving(var aMessage : TMessage); message WM_MOVING; + + procedure ShowStatusText(const aText : string); + public + { Public declarations } + end; + +var + DOMVisitorFrm: TDOMVisitorFrm; + +implementation + +{$R *.dfm} + +uses + uCEFProcessMessage; + +procedure TDOMVisitorFrm.Chromium1AfterCreated(Sender: TObject; + const browser: ICefBrowser); +begin + PostMessage(Handle, MINIBROWSER_CREATED, 0, 0); +end; + +procedure TDOMVisitorFrm.Chromium1BeforeContextMenu(Sender: TObject; + const browser: ICefBrowser; const frame: ICefFrame; + const params: ICefContextMenuParams; const model: ICefMenuModel); +begin + model.AddItem(MINIBROWSER_CONTEXTMENU_VISITDOM, 'Visit DOM in CEF'); +end; + +procedure TDOMVisitorFrm.Chromium1ContextMenuCommand(Sender: TObject; + const browser: ICefBrowser; const frame: ICefFrame; + const params: ICefContextMenuParams; commandId: Integer; + eventFlags: Cardinal; out Result: Boolean); +begin + Result := False; + + case commandId of + MINIBROWSER_CONTEXTMENU_VISITDOM : + PostMessage(Handle, MINIBROWSER_VISITDOM, 0, 0); + end; +end; + +procedure TDOMVisitorFrm.Chromium1ProcessMessageReceived(Sender: TObject; + const browser: ICefBrowser; sourceProcess: TCefProcessId; + const message: ICefProcessMessage; out Result: Boolean); +begin + if (message = nil) or (message.ArgumentList = nil) then exit; + + if (message.Name = 'domvisitor') then + begin + // Message received from the DOMVISITOR in CEF + ShowStatusText('DOM Visitor result text : ' + message.ArgumentList.GetString(0)); + Result := True; + end + else + Result := False; +end; + +procedure TDOMVisitorFrm.FormShow(Sender: TObject); +begin + Chromium1.CreateBrowser(CEFWindowParent1, ''); +end; + +procedure TDOMVisitorFrm.GoBtnClick(Sender: TObject); +begin + Chromium1.LoadURL(AddressEdt.Text); +end; + +procedure TDOMVisitorFrm.BrowserCreatedMsg(var aMessage : TMessage); +begin + AddressBarPnl.Enabled := True; + GoBtn.Click; +end; + +procedure TDOMVisitorFrm.VisitDOMMsg(var aMessage : TMessage); +var + TempMsg : ICefProcessMessage; +begin + // Only works using a TCefCustomRenderProcessHandler. + // Use the ArgumentList property if you need to pass some parameters. + TempMsg := TCefProcessMessageRef.New('retrievedom'); // Same name than TCefCustomRenderProcessHandler.MessageName + Chromium1.SendProcessMessage(PID_RENDERER, TempMsg); +end; + +procedure TDOMVisitorFrm.WMMove(var aMessage : TWMMove); +begin + inherited; + + if (Chromium1 <> nil) then Chromium1.NotifyMoveOrResizeStarted; +end; + +procedure TDOMVisitorFrm.WMMoving(var aMessage : TMessage); +begin + inherited; + + if (Chromium1 <> nil) then Chromium1.NotifyMoveOrResizeStarted; +end; + +procedure TDOMVisitorFrm.ShowStatusText(const aText : string); +begin + StatusBar1.Panels[0].Text := aText; +end; + +end. diff --git a/demos/JSEval/00-DeleteDCUs.bat b/demos/JSEval/00-DeleteDCUs.bat new file mode 100644 index 00000000..76dedadd --- /dev/null +++ b/demos/JSEval/00-DeleteDCUs.bat @@ -0,0 +1,8 @@ +del /s /q *.dcu +del /s /q *.dcp +del /s /q *.bpl +del /s /q *.bpi +del /s /q *.hpp +del /s /q *.exe +del /s /q *.log +del /s /q *.~* diff --git a/demos/MiniBrowser/uTestExtension.pas b/demos/JSEval/JSEval.dpr similarity index 52% rename from demos/MiniBrowser/uTestExtension.pas rename to demos/JSEval/JSEval.dpr index 4f182b6d..da0cce33 100644 --- a/demos/MiniBrowser/uTestExtension.pas +++ b/demos/JSEval/JSEval.dpr @@ -35,52 +35,60 @@ * *) -unit uTestExtension; +program JSEval; {$I cef.inc} -interface - uses {$IFDEF DELPHI16_UP} - Winapi.Windows, + Vcl.Forms, + WinApi.Windows, {$ELSE} + Forms, Windows, - {$ENDIF} - uCEFRenderProcessHandler, uCEFBrowserProcessHandler, uCEFInterfaces, uCEFProcessMessage, - uCEFv8Context, uCEFTypes, uCEFv8Handler; + {$ENDIF } + uCEFApplication, + uCEFRenderProcessHandler, + uCEFInterfaces, + uJSEval in 'uJSEval.pas' {JSEvalFrm}, + uSimpleTextViewer in 'uSimpleTextViewer.pas' {SimpleTextViewerFrm}; -type - TTestExtension = class - class procedure mouseover(const data: string); - class procedure sendresulttobrowser(const msgtext, msgname : string); - end; +{$R *.res} -implementation +// CEF3 needs to set the LARGEADDRESSAWARE flag which allows 32-bit processes to use up to 3GB of RAM. +{$SetPEFlags IMAGE_FILE_LARGE_ADDRESS_AWARE} -uses - uCEFMiscFunctions, uCEFConstants; - -class procedure TTestExtension.mouseover(const data: string); var - msg: ICefProcessMessage; + FProcessHandler : TCefCustomRenderProcessHandler; + begin - msg := TCefProcessMessageRef.New('mouseover'); - msg.ArgumentList.SetString(0, data); + FProcessHandler := TCefCustomRenderProcessHandler.Create; + FProcessHandler.MessageName := EVAL_JS; + FProcessHandler.OnCustomMessage := JSEvalFrm.RenderProcessHandler_OnCustomMessage; - // Sending a message back to the browser. It'll be received in the TChromium.OnProcessMessageReceived event. - // TCefv8ContextRef.Current returns the v8 context for the frame that is currently executing Javascript. - TCefv8ContextRef.Current.Browser.SendProcessMessage(PID_BROWSER, msg); -end; + GlobalCEFApp := TCefApplication.Create; + GlobalCEFApp.RenderProcessHandler := FProcessHandler as ICefRenderProcessHandler; -class procedure TTestExtension.sendresulttobrowser(const msgtext, msgname : string); -var - msg: ICefProcessMessage; -begin - msg := TCefProcessMessageRef.New(msgname); - msg.ArgumentList.SetString(0, msgtext); + // In case you want to use custom directories for the CEF3 binaries, cache, cookies and user data. +{ + GlobalCEFApp.FrameworkDirPath := 'cef'; + GlobalCEFApp.ResourcesDirPath := 'cef'; + GlobalCEFApp.LocalesDirPath := 'cef\locales'; + GlobalCEFApp.cache := 'cef\cache'; + GlobalCEFApp.cookies := 'cef\cookies'; + GlobalCEFApp.UserDataPath := 'cef\User Data'; +} - TCefv8ContextRef.Current.Browser.SendProcessMessage(PID_BROWSER, msg); -end; + if GlobalCEFApp.StartMainProcess then + begin + Application.Initialize; + {$IFDEF DELPHI11_UP} + Application.MainFormOnTaskbar := True; + {$ENDIF} + Application.CreateForm(TJSEvalFrm, JSEvalFrm); + Application.CreateForm(TSimpleTextViewerFrm, SimpleTextViewerFrm); + Application.Run; + end; + GlobalCEFApp.Free; end. diff --git a/demos/JSEval/JSEval.dproj b/demos/JSEval/JSEval.dproj new file mode 100644 index 00000000..4d931280 --- /dev/null +++ b/demos/JSEval/JSEval.dproj @@ -0,0 +1,539 @@ + + + {392E1E26-071C-490A-B4C9-403BEE1F6E45} + 18.0 + VCL + JSEval.dpr + True + Debug + Win32 + 1 + Application + + + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Cfg_1 + true + true + + + true + Base + true + + + true + Cfg_2 + true + true + + + JSEval + System;Xml;Data;Datasnap;Web;Soap;Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;$(DCC_Namespace) + CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments= + $(BDS)\bin\delphi_PROJECTICON.ico + 3082 + .\$(Platform)\$(Config) + false + false + false + false + false + + + $(BDS)\bin\default_app.manifest + true + CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments= + 1033 + 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;GR32_DSGN_RSXE5;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;GR32_RSXE5;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) + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) + + + 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) + + + DEBUG;$(DCC_Define) + true + false + true + true + true + + + true + true + 1033 + true + false + + + false + RELEASE;$(DCC_Define) + 0 + 0 + + + true + true + + + + MainSource + + +
JSEvalFrm
+
+ +
SimpleTextViewerFrm
+
+ + Cfg_2 + Base + + + Base + + + Cfg_1 + Base + +
+ + Delphi.Personality.12 + Application + + + + JSEval.dpr + + + Microsoft Office 2000 Sample Automation Server Wrapper Components + Microsoft Office XP Sample Automation Server Wrapper Components + + + + + + JSEval.exe + true + + + + + 1 + + + 1 + + + + + Contents\Resources + 1 + + + + + classes + 1 + + + + + Contents\MacOS + 0 + + + 1 + + + Contents\MacOS + 1 + + + + + 1 + + + 1 + + + 1 + + + + + res\drawable-xxhdpi + 1 + + + + + library\lib\mips + 1 + + + + + 0 + + + 1 + + + Contents\MacOS + 1 + + + 1 + + + library\lib\armeabi-v7a + 1 + + + 1 + + + + + 0 + + + Contents\MacOS + 1 + .framework + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + + + library\lib\x86 + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + library\lib\armeabi + 1 + + + + + 0 + + + 1 + + + Contents\MacOS + 1 + + + + + 1 + + + 1 + + + 1 + + + + + res\drawable-normal + 1 + + + + + res\drawable-xhdpi + 1 + + + + + res\drawable-large + 1 + + + + + 1 + + + 1 + + + 1 + + + + + ../ + 1 + + + ../ + 1 + + + + + res\drawable-hdpi + 1 + + + + + library\lib\armeabi-v7a + 1 + + + + + Contents + 1 + + + + + ../ + 1 + + + + + 1 + + + 1 + + + 1 + + + + + res\values + 1 + + + + + res\drawable-small + 1 + + + + + res\drawable + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + + + res\drawable + 1 + + + + + 0 + + + 0 + + + Contents\Resources\StartUp\ + 0 + + + 0 + + + 0 + + + 0 + + + + + library\lib\armeabi-v7a + 1 + + + + + 0 + .bpl + + + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + 1 + .dylib + + + 1 + .dylib + + + + + res\drawable-mdpi + 1 + + + + + res\drawable-xlarge + 1 + + + + + res\drawable-ldpi + 1 + + + + + 0 + .dll;.bpl + + + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + 1 + .dylib + + + 1 + .dylib + + + + + + + + + + + + True + False + + + 12 + + + + +
diff --git a/demos/JSEval/JSEval.dproj.local b/demos/JSEval/JSEval.dproj.local new file mode 100644 index 00000000..d03434be --- /dev/null +++ b/demos/JSEval/JSEval.dproj.local @@ -0,0 +1,10 @@ + + + + 2017/08/12 14:08:23.000.987,=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\Unit1.pas + 2017/08/12 14:09:25.000.836,C:\Users\usuario\Documents\Embarcadero\Studio\Projects\Unit1.pas=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\JSEval\uJSEval.pas + 2017/08/12 14:09:25.000.836,C:\Users\usuario\Documents\Embarcadero\Studio\Projects\Unit1.dfm=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\JSEval\uJSEval.dfm + 2017/08/12 14:09:30.000.669,C:\Users\usuario\Documents\Embarcadero\Studio\Projects\Project1.dproj=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\JSEval\JSEval.dproj + 2017/08/12 14:43:05.000.727,=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\JSEval\uSimpleTextViewer.pas + + diff --git a/demos/JSEval/JSEval.dsk b/demos/JSEval/JSEval.dsk new file mode 100644 index 00000000..147a060a --- /dev/null +++ b/demos/JSEval/JSEval.dsk @@ -0,0 +1,764 @@ +[Closed Files] +File_0=TSourceModule,'C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\DOMVisitor\uDOMVisitor.pas',0,1,94,53,127,0,0,, +File_1=TSourceModule,'C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\JSEval\uSimpleTextViewer.pas',0,1,1,1,1,0,0,, +File_2=TSourceModule,'C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\source\uCEFSchemeRegistrar.pas',0,1,29,1,58,0,0,, +File_3=TSourceModule,'C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\source\uCEFInterfaces.pas',0,1,83,1,112,0,0,, +File_4=TSourceModule,'C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\source\uCEFRenderProcessHandler.pas',0,1,60,46,89,0,0,, +File_5=TSourceModule,'C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\MiniBrowser\uMiniBrowser.pas',0,1,220,1,329,0,0,, +File_6=TSourceModule,'C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\JSExtension\uJSExtension.pas',0,1,154,79,172,0,0,, +File_7=TSourceModule,'C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\source\uCEFChromium.pas',0,1,1075,38,1089,0,0,, +File_8=TSourceModule,'C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\source\uCEFPDFPrintCallback.pas',0,1,78,80,113,0,0,, +File_9=TSourceModule,'C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\source\uCEFTypes.pas',0,1,1704,3,1727,0,0,, + +[Modules] +Module0=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\JSEval\JSEval.dproj +Module1=default.htm +Module2=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\JSEval\uJSEval.pas +Count=3 +EditWindowCount=1 + +[C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\JSEval\JSEval.dproj] +ModuleType=TBaseProject + +[default.htm] +ModuleType=TURLModule + +[C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\JSEval\uJSEval.pas] +ModuleType=TSourceModule +FormState=1 +FormOnTop=0 + +[EditWindow0] +ViewCount=3 +CurrentEditView=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\JSEval\JSEval.dpr +View0=0 +View1=1 +View2=2 +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=0 +Width=10000 +Height=9428 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=10000 +ClientHeight=9428 +DockedToMainForm=1 +BorlandEditorCodeExplorer=BorlandEditorCodeExplorer@EditWindow0 +TopPanelSize=0 +LeftPanelSize=0 +RightPanelSize=2008 +RightPanelClients=DockSite2,DockSite4 +RightPanelData=00000800010100000000AA1900000000000001D80700000000000001000000004312000009000000446F636B53697465320100000000A123000009000000446F636B5369746534FFFFFFFF +BottomPanelSize=0 +BottomPanelClients=DockSite1,MessageView +BottomPanelData=0000080001020200000009000000446F636B53697465310F0000004D65737361676556696577466F726D3B36000000000000025B06000000000000FFFFFFFF +BottomMiddlePanelSize=0 +BottomMiddlePanelClients=DockSite0,GraphDrawingModel +BottomMiddelPanelData=0000080001020200000009000000446F636B536974653010000000477261706844726177696E67566965779D1D00000000000002F306000000000000FFFFFFFF +TabDockLeftClients=DockSite3=0,PropertyInspector=1 + +[View0] +CustomEditViewType=TWelcomePageView +WelcomePageURL=bds:/default.htm + +[View1] +CustomEditViewType=TEditView +Module=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\JSEval\JSEval.dpr +CursorX=1 +CursorY=81 +TopLine=37 +LeftCol=1 +Elisions= +Bookmarks= +EditViewName=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\JSEval\JSEval.dpr + +[View2] +CustomEditViewType=TEditView +Module=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\JSEval\uJSEval.pas +CursorX=19 +CursorY=221 +TopLine=1 +LeftCol=1 +Elisions= +Bookmarks= +EditViewName=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\JSEval\uJSEval.pas + +[Watches] +Count=0 + +[WatchWindow] +WatchColumnWidth=120 +WatchShowColumnHeaders=1 +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=0 +Width=3820 +Height=2377 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=3820 +ClientHeight=2377 +TBDockHeight=213 +LRDockWidth=13602 +Dockable=1 +StayOnTop=0 + +[Breakpoints] +Count=0 + +[EmbarcaderoWin32Debugger_AddressBreakpoints] +Count=0 + +[EmbarcaderoWin64Debugger_AddressBreakpoints] +Count=0 + +[Main Window] +PercentageSizes=1 +Create=1 +Visible=1 +Docked=0 +State=2 +Left=148 +Top=269 +Width=8930 +Height=8520 +MaxLeft=-8 +MaxTop=-11 +MaxWidth=8930 +MaxHeight=8520 +ClientWidth=10000 +ClientHeight=9753 +BottomPanelSize=9121 +BottomPanelClients=EditWindow0 +BottomPanelData=0000080000000000000000000000000000000000000000000000000100000000000000000C0000004564697457696E646F775F30FFFFFFFF + +[ProjectManager] +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=0 +Width=2008 +Height=4226 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=2008 +ClientHeight=4226 +TBDockHeight=5897 +LRDockWidth=2352 +Dockable=1 +StayOnTop=0 + +[MessageView] +PercentageSizes=1 +Create=1 +Visible=0 +Docked=1 +State=0 +Left=0 +Top=23 +Width=2773 +Height=1424 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=2773 +ClientHeight=1424 +TBDockHeight=1424 +LRDockWidth=2773 +Dockable=1 +StayOnTop=0 + +[ToolForm] +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=0 +Width=2008 +Height=4339 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=2008 +ClientHeight=4339 +TBDockHeight=7152 +LRDockWidth=2000 +Dockable=1 +StayOnTop=0 + +[ClipboardHistory] +PercentageSizes=1 +Create=1 +Visible=0 +Docked=0 +State=0 +Left=0 +Top=0 +Width=1906 +Height=4989 +MaxLeft=-8 +MaxTop=-11 +ClientWidth=1781 +ClientHeight=4563 +TBDockHeight=4989 +LRDockWidth=1906 +Dockable=1 +StayOnTop=0 + +[ProjectStatistics] +PercentageSizes=1 +Create=1 +Visible=0 +Docked=0 +State=0 +Left=0 +Top=0 +Width=2062 +Height=5740 +MaxLeft=-8 +MaxTop=-11 +ClientWidth=1938 +ClientHeight=5314 +TBDockHeight=5740 +LRDockWidth=2062 +Dockable=1 +StayOnTop=0 + +[ClassBrowserTool] +PercentageSizes=1 +Create=1 +Visible=0 +Docked=1 +State=0 +Left=-8 +Top=-30 +Width=1844 +Height=3139 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=1844 +ClientHeight=3139 +TBDockHeight=3139 +LRDockWidth=1844 +Dockable=1 +StayOnTop=0 + +[MetricsView] +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=0 +Width=2336 +Height=1177 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=2336 +ClientHeight=1177 +TBDockHeight=4832 +LRDockWidth=3562 +Dockable=1 +StayOnTop=0 + +[QAView] +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=0 +Width=2336 +Height=1177 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=2336 +ClientHeight=1177 +TBDockHeight=4832 +LRDockWidth=3562 +Dockable=1 +StayOnTop=0 + +[PropertyInspector] +PercentageSizes=1 +Create=1 +Visible=0 +Docked=1 +State=0 +Left=78 +Top=386 +Width=1883 +Height=7164 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=1758 +ClientHeight=6738 +TBDockHeight=7164 +LRDockWidth=1883 +Dockable=1 +StayOnTop=0 +SplitPos=142 + +[frmDesignPreview] +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=0 +Width=2008 +Height=6816 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=2008 +ClientHeight=6816 +TBDockHeight=5964 +LRDockWidth=2508 +Dockable=1 +StayOnTop=0 + +[TFileExplorerForm] +PercentageSizes=1 +Create=1 +Visible=0 +Docked=1 +State=0 +Left=-945 +Top=1 +Width=2844 +Height=6200 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=2844 +ClientHeight=6200 +TBDockHeight=6200 +LRDockWidth=2844 +Dockable=1 +StayOnTop=0 + +[TemplateView] +PercentageSizes=1 +Create=1 +Visible=0 +Docked=1 +State=0 +Left=-1151 +Top=243 +Width=273 +Height=359 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=273 +ClientHeight=359 +TBDockHeight=359 +LRDockWidth=273 +Dockable=1 +StayOnTop=0 +Name=120 +Description=334 +filter=1 + +[DebugLogView] +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=0 +Width=3820 +Height=2377 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=3820 +ClientHeight=2377 +TBDockHeight=415 +LRDockWidth=4953 +Dockable=1 +StayOnTop=0 + +[ThreadStatusWindow] +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=0 +Width=3820 +Height=2377 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=3820 +ClientHeight=2377 +TBDockHeight=213 +LRDockWidth=7406 +Dockable=1 +StayOnTop=0 +Column0Width=145 +Column1Width=100 +Column2Width=115 +Column3Width=250 + +[LocalVarsWindow] +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=0 +Width=3820 +Height=2377 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=3820 +ClientHeight=2377 +TBDockHeight=1536 +LRDockWidth=3484 +Dockable=1 +StayOnTop=0 + +[CallStackWindow] +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=0 +Width=3820 +Height=2377 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=3820 +ClientHeight=2377 +TBDockHeight=2063 +LRDockWidth=3484 +Dockable=1 +StayOnTop=0 + +[FindReferencsForm] +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=0 +Width=2336 +Height=942 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=2336 +ClientHeight=942 +TBDockHeight=2321 +LRDockWidth=2820 +Dockable=1 +StayOnTop=0 + +[RefactoringForm] +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=0 +Width=2336 +Height=1177 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=2336 +ClientHeight=1177 +TBDockHeight=3206 +LRDockWidth=2820 +Dockable=1 +StayOnTop=0 + +[ToDo List] +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=0 +Width=2336 +Height=1177 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=2336 +ClientHeight=1177 +TBDockHeight=1155 +LRDockWidth=3680 +Dockable=1 +StayOnTop=0 +Column0Width=314 +Column1Width=30 +Column2Width=150 +Column3Width=172 +Column4Width=129 +SortOrder=4 +ShowHints=1 +ShowChecked=1 + +[DataExplorerContainer] +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=0 +Width=2008 +Height=6816 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=2008 +ClientHeight=6816 +TBDockHeight=4888 +LRDockWidth=7148 +Dockable=1 +StayOnTop=0 + +[GraphDrawingModel] +PercentageSizes=1 +Create=1 +Visible=0 +Docked=1 +State=0 +Left=249 +Top=709 +Width=2859 +Height=3206 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=2859 +ClientHeight=3206 +TBDockHeight=3206 +LRDockWidth=2859 +Dockable=1 +StayOnTop=0 + +[BreakpointWindow] +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=0 +Width=3820 +Height=2377 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=3820 +ClientHeight=2377 +TBDockHeight=1547 +LRDockWidth=8742 +Dockable=1 +StayOnTop=0 +Column0Width=200 +Column1Width=75 +Column2Width=200 +Column3Width=200 +Column4Width=200 +Column5Width=75 +Column6Width=75 + +[StructureView] +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=0 +Width=1773 +Height=6738 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=1773 +ClientHeight=6738 +TBDockHeight=3677 +LRDockWidth=1898 +Dockable=1 +StayOnTop=0 + +[ModelViewTool] +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=0 +Width=2008 +Height=6816 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=2008 +ClientHeight=6816 +TBDockHeight=4888 +LRDockWidth=5305 +Dockable=1 +StayOnTop=0 + +[BorlandEditorCodeExplorer@EditWindow0] +PercentageSizes=1 +Create=1 +Visible=0 +Docked=0 +State=0 +Left=0 +Top=0 +Width=1828 +Height=6177 +MaxLeft=-8 +MaxTop=-11 +ClientWidth=1703 +ClientHeight=5751 +TBDockHeight=6177 +LRDockWidth=1828 +Dockable=1 +StayOnTop=0 + +[DockHosts] +DockHostCount=5 + +[DockSite0] +HostDockSite=DockBottomCenterPanel +DockSiteType=1 +PercentageSizes=1 +Create=1 +Visible=0 +Docked=1 +State=0 +Left=0 +Top=0 +Width=2336 +Height=1480 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=2336 +ClientHeight=1480 +TBDockHeight=1480 +LRDockWidth=2336 +Dockable=1 +StayOnTop=0 +TabPosition=1 +ActiveTabID=RefactoringForm +TabDockClients=RefactoringForm,FindReferencsForm,ToDo List,MetricsView,QAView + +[DockSite1] +HostDockSite=DockBottomPanel +DockSiteType=1 +PercentageSizes=1 +Create=1 +Visible=0 +Docked=1 +State=0 +Left=0 +Top=23 +Width=3820 +Height=2679 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=3820 +ClientHeight=2679 +TBDockHeight=2679 +LRDockWidth=3820 +Dockable=1 +StayOnTop=0 +TabPosition=1 +ActiveTabID=DebugLogView +TabDockClients=DebugLogView,BreakpointWindow,ThreadStatusWindow,CallStackWindow,WatchWindow,LocalVarsWindow + +[DockSite2] +HostDockSite=DockRightPanel +DockSiteType=1 +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=23 +Width=2008 +Height=4529 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=2008 +ClientHeight=4529 +TBDockHeight=7119 +LRDockWidth=2008 +Dockable=1 +StayOnTop=0 +TabPosition=1 +ActiveTabID=ProjectManager +TabDockClients=ProjectManager,ModelViewTool,DataExplorerContainer,frmDesignPreview,TFileExplorerForm + +[DockSite3] +HostDockSite=LeftDockTabSet +DockSiteType=1 +PercentageSizes=1 +Create=1 +Visible=0 +Docked=1 +State=0 +Left=0 +Top=0 +Width=1898 +Height=7164 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=1773 +ClientHeight=6738 +TBDockHeight=7164 +LRDockWidth=1898 +Dockable=1 +StayOnTop=0 +TabPosition=1 +ActiveTabID=StructureView +TabDockClients=StructureView,ClassBrowserTool + +[DockSite4] +HostDockSite=DockRightPanel +DockSiteType=1 +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=454 +Width=2008 +Height=4339 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=2008 +ClientHeight=4339 +TBDockHeight=7119 +LRDockWidth=2008 +Dockable=1 +StayOnTop=0 +TabPosition=1 +ActiveTabID=ToolForm +TabDockClients=ToolForm,TemplateView + diff --git a/demos/JSEval/JSEval.identcache b/demos/JSEval/JSEval.identcache new file mode 100644 index 0000000000000000000000000000000000000000..1bab0393a9361da6ae70dc6319985809a66f9dfc GIT binary patch literal 322 zcmb`?u?hk)5CqVG|8tdgO9!uCTtT2Bvt-$`}*I4IG77 zKt+*bfvI@S^k@P$Uy(fq;sUN|=;NNtoqXR$yIoI|>McT`Tm*K`J~4s1m}{Z~z1u0$ ci+HFg-I;S<82q|Js5}$BTozXJ$NZi70PaF;&j0`b literal 0 HcmV?d00001 diff --git a/demos/JSEval/JSEval.res b/demos/JSEval/JSEval.res new file mode 100644 index 0000000000000000000000000000000000000000..20ba553086005b9f4e8e7a6bee3fe14bfc0a7654 GIT binary patch literal 58468 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 L{#(}nNdNx>?6uf> literal 0 HcmV?d00001 diff --git a/demos/JSEval/JSEval.stat b/demos/JSEval/JSEval.stat new file mode 100644 index 00000000..04f796dc --- /dev/null +++ b/demos/JSEval/JSEval.stat @@ -0,0 +1,10 @@ +[Stats] +EditorSecs=3396 +DesignerSecs=5 +InspectorSecs=2 +CompileSecs=19809 +OtherSecs=62 +StartTime=12/08/2017 14:17:43 +RealKeys=0 +EffectiveKeys=0 +DebugSecs=474 diff --git a/demos/JSEval/cef.inc b/demos/JSEval/cef.inc new file mode 100644 index 00000000..984ae795 --- /dev/null +++ b/demos/JSEval/cef.inc @@ -0,0 +1,384 @@ +// ************************************************************************ +// ***************************** CEF4Delphi ******************************* +// ************************************************************************ +// +// CEF4Delphi is based on DCEF3 which uses CEF3 to embed a chromium-based +// browser in Delphi applications. +// +// The original license of DCEF3 still applies to CEF4Delphi. +// +// For more information about CEF4Delphi visit : +// https://www.briskbard.com/index.php?lang=en&pageid=cef +// +// Copyright © 2017 Salvador Díaz Fau. All rights reserved. +// +// ************************************************************************ +// ************ vvvv Original license and comments below vvvv ************* +// ************************************************************************ +(* + * Delphi Chromium Embedded 3 + * + * Usage allowed under the restrictions of the Lesser GNU General Public License + * or alternatively the restrictions of the Mozilla Public License 1.1 + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for + * the specific language governing rights and limitations under the License. + * + * Unit owner : Henri Gourvest + * Web site : http://www.progdigy.com + * Repository : http://code.google.com/p/delphichromiumembedded/ + * Group : http://groups.google.com/group/delphichromiumembedded + * + * Embarcadero Technologies, Inc is not permitted to use or redistribute + * this source code without explicit permission. + * + *) + + // The complete list of compiler versions is here : + // http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Compiler_Versions + +{$DEFINE DELPHI_VERSION_UNKNOW} + +{$IFDEF FPC} + {$DEFINE CEF_MULTI_THREADED_MESSAGE_LOOP} + {$DEFINE SUPPORTS_INLINE} +{$ENDIF} + +// Delphi 5 +{$IFDEF VER130} + {$UNDEF DELPHI_VERSION_UNKNOW} + {$DEFINE DELPHI5_UP} +{$ENDIF} + +// Delphi 6 +{$IFDEF VER140} + {$UNDEF DELPHI_VERSION_UNKNOW} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI6_UP} +{$ENDIF} + +// Delphi 7 +{$IFDEF VER150} + {$UNDEF DELPHI_VERSION_UNKNOW} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI6_UP} + {$DEFINE DELPHI7_UP} +{$ENDIF} + +// Delphi 8 +{$IFDEF VER160} + {$UNDEF DELPHI_VERSION_UNKNOW} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI6_UP} + {$DEFINE DELPHI7_UP} + {$DEFINE DELPHI8_UP} +{$ENDIF} + +// Delphi 2005 +{$IFDEF VER170} + {$UNDEF DELPHI_VERSION_UNKNOW} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI6_UP} + {$DEFINE DELPHI7_UP} + {$DEFINE DELPHI8_UP} + {$DEFINE DELPHI9_UP} +{$ENDIF} + +{$IFDEF VER180} + {$UNDEF DELPHI_VERSION_UNKNOW} + // Delphi 2007 + {$IFDEF VER185} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI6_UP} + {$DEFINE DELPHI7_UP} + {$DEFINE DELPHI8_UP} + {$DEFINE DELPHI9_UP} + {$DEFINE DELPHI10_UP} + {$DEFINE DELPHI11_UP} + // Delphi 2006 + {$ELSE} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI6_UP} + {$DEFINE DELPHI7_UP} + {$DEFINE DELPHI8_UP} + {$DEFINE DELPHI9_UP} + {$DEFINE DELPHI10_UP} + {$ENDIF} +{$ENDIF} + +// Delphi 2009 +{$IFDEF VER200} + {$UNDEF DELPHI_VERSION_UNKNOW} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI6_UP} + {$DEFINE DELPHI7_UP} + {$DEFINE DELPHI8_UP} + {$DEFINE DELPHI9_UP} + {$DEFINE DELPHI10_UP} + {$DEFINE DELPHI11_UP} + {$DEFINE DELPHI12_UP} +{$ENDIF} + +//Delphi 2010 +{$IFDEF VER210} + {$UNDEF DELPHI_VERSION_UNKNOW} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI6_UP} + {$DEFINE DELPHI7_UP} + {$DEFINE DELPHI8_UP} + {$DEFINE DELPHI9_UP} + {$DEFINE DELPHI10_UP} + {$DEFINE DELPHI11_UP} + {$DEFINE DELPHI12_UP} + {$DEFINE DELPHI14_UP} +{$ENDIF} + +// Delphi XE +{$IFDEF VER220} + {$UNDEF DELPHI_VERSION_UNKNOW} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI6_UP} + {$DEFINE DELPHI7_UP} + {$DEFINE DELPHI8_UP} + {$DEFINE DELPHI9_UP} + {$DEFINE DELPHI10_UP} + {$DEFINE DELPHI11_UP} + {$DEFINE DELPHI12_UP} + {$DEFINE DELPHI14_UP} + {$DEFINE DELPHI15_UP} +{$ENDIF} + +// Delphi XE2 +{$IFDEF VER230} + {$UNDEF DELPHI_VERSION_UNKNOW} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI6_UP} + {$DEFINE DELPHI7_UP} + {$DEFINE DELPHI8_UP} + {$DEFINE DELPHI9_UP} + {$DEFINE DELPHI10_UP} + {$DEFINE DELPHI11_UP} + {$DEFINE DELPHI12_UP} + {$DEFINE DELPHI14_UP} + {$DEFINE DELPHI15_UP} + {$DEFINE DELPHI16_UP} +{$ENDIF} + +// Delphi XE3 +{$IFDEF VER240} + {$UNDEF DELPHI_VERSION_UNKNOW} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI6_UP} + {$DEFINE DELPHI7_UP} + {$DEFINE DELPHI8_UP} + {$DEFINE DELPHI9_UP} + {$DEFINE DELPHI10_UP} + {$DEFINE DELPHI11_UP} + {$DEFINE DELPHI12_UP} + {$DEFINE DELPHI14_UP} + {$DEFINE DELPHI15_UP} + {$DEFINE DELPHI16_UP} + {$DEFINE DELPHI17_UP} +{$ENDIF} + +// Delphi XE4 +{$IFDEF VER250} + {$UNDEF DELPHI_VERSION_UNKNOW} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI6_UP} + {$DEFINE DELPHI7_UP} + {$DEFINE DELPHI8_UP} + {$DEFINE DELPHI9_UP} + {$DEFINE DELPHI10_UP} + {$DEFINE DELPHI11_UP} + {$DEFINE DELPHI12_UP} + {$DEFINE DELPHI14_UP} + {$DEFINE DELPHI15_UP} + {$DEFINE DELPHI16_UP} + {$DEFINE DELPHI17_UP} + {$DEFINE DELPHI18_UP} +{$ENDIF} + +// Delphi XE5 +{$IFDEF VER260} + {$UNDEF DELPHI_VERSION_UNKNOW} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI6_UP} + {$DEFINE DELPHI7_UP} + {$DEFINE DELPHI8_UP} + {$DEFINE DELPHI9_UP} + {$DEFINE DELPHI10_UP} + {$DEFINE DELPHI11_UP} + {$DEFINE DELPHI12_UP} + {$DEFINE DELPHI14_UP} + {$DEFINE DELPHI15_UP} + {$DEFINE DELPHI16_UP} + {$DEFINE DELPHI17_UP} + {$DEFINE DELPHI18_UP} + {$DEFINE DELPHI19_UP} +{$ENDIF} + +// Delphi XE6 +{$IFDEF VER270} + {$UNDEF DELPHI_VERSION_UNKNOW} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI6_UP} + {$DEFINE DELPHI7_UP} + {$DEFINE DELPHI8_UP} + {$DEFINE DELPHI9_UP} + {$DEFINE DELPHI10_UP} + {$DEFINE DELPHI11_UP} + {$DEFINE DELPHI12_UP} + {$DEFINE DELPHI14_UP} + {$DEFINE DELPHI15_UP} + {$DEFINE DELPHI16_UP} + {$DEFINE DELPHI17_UP} + {$DEFINE DELPHI18_UP} + {$DEFINE DELPHI19_UP} + {$DEFINE DELPHI20_UP} +{$ENDIF} + +// Delphi XE7 +{$IFDEF VER280} + {$UNDEF DELPHI_VERSION_UNKNOW} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI6_UP} + {$DEFINE DELPHI7_UP} + {$DEFINE DELPHI8_UP} + {$DEFINE DELPHI9_UP} + {$DEFINE DELPHI10_UP} + {$DEFINE DELPHI11_UP} + {$DEFINE DELPHI12_UP} + {$DEFINE DELPHI14_UP} + {$DEFINE DELPHI15_UP} + {$DEFINE DELPHI16_UP} + {$DEFINE DELPHI17_UP} + {$DEFINE DELPHI18_UP} + {$DEFINE DELPHI19_UP} + {$DEFINE DELPHI20_UP} + {$DEFINE DELPHI21_UP} +{$ENDIF} + +// Delphi XE8 +{$IFDEF VER290} + {$UNDEF DELPHI_VERSION_UNKNOW} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI6_UP} + {$DEFINE DELPHI7_UP} + {$DEFINE DELPHI8_UP} + {$DEFINE DELPHI9_UP} + {$DEFINE DELPHI10_UP} + {$DEFINE DELPHI11_UP} + {$DEFINE DELPHI12_UP} + {$DEFINE DELPHI14_UP} + {$DEFINE DELPHI15_UP} + {$DEFINE DELPHI16_UP} + {$DEFINE DELPHI17_UP} + {$DEFINE DELPHI18_UP} + {$DEFINE DELPHI19_UP} + {$DEFINE DELPHI20_UP} + {$DEFINE DELPHI21_UP} + {$DEFINE DELPHI22_UP} +{$ENDIF VER290} + +// Rad Studio 10 - Delphi Seattle +{$IFDEF VER300} + {$UNDEF DELPHI_VERSION_UNKNOW} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI6_UP} + {$DEFINE DELPHI7_UP} + {$DEFINE DELPHI8_UP} + {$DEFINE DELPHI9_UP} + {$DEFINE DELPHI10_UP} + {$DEFINE DELPHI11_UP} + {$DEFINE DELPHI12_UP} + {$DEFINE DELPHI14_UP} + {$DEFINE DELPHI15_UP} + {$DEFINE DELPHI16_UP} + {$DEFINE DELPHI17_UP} + {$DEFINE DELPHI18_UP} + {$DEFINE DELPHI19_UP} + {$DEFINE DELPHI20_UP} + {$DEFINE DELPHI21_UP} + {$DEFINE DELPHI22_UP} + {$DEFINE DELPHI23_UP} +{$ENDIF} + +// Rad Studio 10.1 - Delphi Berlin +{$IFDEF VER310} + {$UNDEF DELPHI_VERSION_UNKNOW} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI6_UP} + {$DEFINE DELPHI7_UP} + {$DEFINE DELPHI8_UP} + {$DEFINE DELPHI9_UP} + {$DEFINE DELPHI10_UP} + {$DEFINE DELPHI11_UP} + {$DEFINE DELPHI12_UP} + {$DEFINE DELPHI14_UP} + {$DEFINE DELPHI15_UP} + {$DEFINE DELPHI16_UP} + {$DEFINE DELPHI17_UP} + {$DEFINE DELPHI18_UP} + {$DEFINE DELPHI19_UP} + {$DEFINE DELPHI20_UP} + {$DEFINE DELPHI21_UP} + {$DEFINE DELPHI22_UP} + {$DEFINE DELPHI23_UP} + {$DEFINE DELPHI24_UP} +{$ENDIF} + +// Rad Studio 10.2 - Delphi Tokyo +{$IFDEF VER320} + {$UNDEF DELPHI_VERSION_UNKNOW} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI6_UP} + {$DEFINE DELPHI7_UP} + {$DEFINE DELPHI8_UP} + {$DEFINE DELPHI9_UP} + {$DEFINE DELPHI10_UP} + {$DEFINE DELPHI11_UP} + {$DEFINE DELPHI12_UP} + {$DEFINE DELPHI14_UP} + {$DEFINE DELPHI15_UP} + {$DEFINE DELPHI16_UP} + {$DEFINE DELPHI17_UP} + {$DEFINE DELPHI18_UP} + {$DEFINE DELPHI19_UP} + {$DEFINE DELPHI20_UP} + {$DEFINE DELPHI21_UP} + {$DEFINE DELPHI22_UP} + {$DEFINE DELPHI23_UP} + {$DEFINE DELPHI24_UP} + {$DEFINE DELPHI25_UP} +{$ENDIF} + + +{$IFDEF DELPHI_VERSION_UNKNOW} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI6_UP} + {$DEFINE DELPHI7_UP} + {$DEFINE DELPHI8_UP} + {$DEFINE DELPHI9_UP} + {$DEFINE DELPHI10_UP} + {$DEFINE DELPHI11_UP} + {$DEFINE DELPHI12_UP} + {$DEFINE DELPHI14_UP} + {$DEFINE DELPHI15_UP} + {$DEFINE DELPHI16_UP} + {$DEFINE DELPHI17_UP} + {$DEFINE DELPHI18_UP} + {$DEFINE DELPHI19_UP} + {$DEFINE DELPHI20_UP} + {$DEFINE DELPHI21_UP} + {$DEFINE DELPHI22_UP} + {$DEFINE DELPHI23_UP} + {$DEFINE DELPHI24_UP} + {$DEFINE DELPHI25_UP} +{$ENDIF} + +{$IFDEF DELPHI9_UP} + {$DEFINE SUPPORTS_INLINE} +{$ENDIF} + diff --git a/demos/JSEval/uJSEval.dfm b/demos/JSEval/uJSEval.dfm new file mode 100644 index 00000000..cd3ee8b8 --- /dev/null +++ b/demos/JSEval/uJSEval.dfm @@ -0,0 +1,73 @@ +object JSEvalFrm: TJSEvalFrm + Left = 0 + Top = 0 + Caption = 'JSEval' + ClientHeight = 571 + ClientWidth = 878 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'Tahoma' + Font.Style = [] + OldCreateOrder = False + Position = poScreenCenter + OnShow = FormShow + PixelsPerInch = 96 + TextHeight = 13 + object CEFWindowParent1: TCEFWindowParent + Left = 0 + Top = 30 + Width = 878 + Height = 541 + Align = alClient + TabOrder = 0 + ExplicitHeight = 530 + end + object AddressBarPnl: TPanel + Left = 0 + Top = 0 + Width = 878 + Height = 30 + Align = alTop + BevelOuter = bvNone + DoubleBuffered = True + Enabled = False + Padding.Left = 5 + Padding.Top = 5 + Padding.Right = 5 + Padding.Bottom = 5 + ParentDoubleBuffered = False + ShowCaption = False + TabOrder = 1 + object GoBtn: TButton + Left = 842 + Top = 5 + Width = 31 + Height = 20 + Margins.Left = 5 + Align = alRight + Caption = 'Go' + TabOrder = 0 + OnClick = GoBtnClick + end + object AddressEdt: TEdit + Left = 5 + Top = 5 + Width = 837 + Height = 20 + Align = alClient + TabOrder = 1 + Text = 'https://www.google.com' + ExplicitHeight = 21 + end + end + object Chromium1: TChromium + OnProcessMessageReceived = Chromium1ProcessMessageReceived + OnBeforeContextMenu = Chromium1BeforeContextMenu + OnContextMenuCommand = Chromium1ContextMenuCommand + OnAfterCreated = Chromium1AfterCreated + Left = 16 + Top = 40 + end +end diff --git a/demos/JSEval/uJSEval.pas b/demos/JSEval/uJSEval.pas new file mode 100644 index 00000000..b0686cba --- /dev/null +++ b/demos/JSEval/uJSEval.pas @@ -0,0 +1,297 @@ +// ************************************************************************ +// ***************************** CEF4Delphi ******************************* +// ************************************************************************ +// +// CEF4Delphi is based on DCEF3 which uses CEF3 to embed a chromium-based +// browser in Delphi applications. +// +// The original license of DCEF3 still applies to CEF4Delphi. +// +// For more information about CEF4Delphi visit : +// https://www.briskbard.com/index.php?lang=en&pageid=cef +// +// Copyright © 2017 Salvador Díaz Fau. All rights reserved. +// +// ************************************************************************ +// ************ vvvv Original license and comments below vvvv ************* +// ************************************************************************ +(* + * Delphi Chromium Embedded 3 + * + * Usage allowed under the restrictions of the Lesser GNU General Public License + * or alternatively the restrictions of the Mozilla Public License 1.1 + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for + * the specific language governing rights and limitations under the License. + * + * Unit owner : Henri Gourvest + * 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 uJSEval; + +{$I cef.inc} + +interface + +uses + {$IFDEF DELPHI16_UP} + Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Menus, + Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls, System.Types, Vcl.ComCtrls, Vcl.ClipBrd, + System.UITypes, + {$ELSE} + Windows, Messages, SysUtils, Variants, Classes, Graphics, Menus, + Controls, Forms, Dialogs, StdCtrls, ExtCtrls, Types, ComCtrls, ClipBrd, + {$ENDIF} + uCEFChromium, uCEFWindowParent, uCEFInterfaces, uCEFApplication, uCEFTypes, uCEFConstants; + +const + MINIBROWSER_CREATED = WM_APP + $100; + MINIBROWSER_SHOWTEXTVIEWER = WM_APP + $101; + MINIBROWSER_EVALJSCODE = WM_APP + $102; + + MINIBROWSER_CONTEXTMENU_EVALJSCODE = MENU_ID_USER_FIRST + 1; + + EVAL_JS = 'JSContextEvalDemo'; + +type + TJSEvalFrm = class(TForm) + CEFWindowParent1: TCEFWindowParent; + Chromium1: TChromium; + AddressBarPnl: TPanel; + GoBtn: TButton; + AddressEdt: TEdit; + procedure Chromium1AfterCreated(Sender: TObject; const browser: ICefBrowser); + procedure GoBtnClick(Sender: TObject); + procedure FormShow(Sender: TObject); + + procedure Chromium1ProcessMessageReceived(Sender: TObject; + const browser: ICefBrowser; sourceProcess: TCefProcessId; + const message: ICefProcessMessage; out Result: Boolean); + procedure Chromium1BeforeContextMenu(Sender: TObject; + const browser: ICefBrowser; const frame: ICefFrame; + const params: ICefContextMenuParams; const model: ICefMenuModel); + procedure Chromium1ContextMenuCommand(Sender: TObject; + const browser: ICefBrowser; const frame: ICefFrame; + const params: ICefContextMenuParams; commandId: Integer; + eventFlags: Cardinal; out Result: Boolean); + + private + { Private declarations } + + protected + FText : string; + + procedure BrowserCreatedMsg(var aMessage : TMessage); message MINIBROWSER_CREATED; + procedure ShowTextViewerMsg(var aMessage : TMessage); message MINIBROWSER_SHOWTEXTVIEWER; + procedure EvalJSCodeMsg(var aMessage : TMessage); message MINIBROWSER_EVALJSCODE; + procedure WMMove(var aMessage : TWMMove); message WM_MOVE; + procedure WMMoving(var aMessage : TMessage); message WM_MOVING; + + procedure ParseEvalJsAnswer(const pMessage: ICefProcessMessage; pBrowser: ICefBrowser; pReturnValue : ICefv8Value; pException : ICefV8Exception); + + public + procedure RenderProcessHandler_OnCustomMessage(const pBrowser: ICefBrowser; uSourceProcess: TCefProcessId; const pMessage: ICefProcessMessage); + end; + +var + JSEvalFrm: TJSEvalFrm; + +implementation + +{$R *.dfm} + +uses + uSimpleTextViewer, uCefProcessMessage; + +// 99.9% of the code in this demo was created by xpert13 and shared in the CEF4Delphi forum. + +// Steps to evaluate some JavaScript code using the V8Context +// ---------------------------------------------------------- +// 1. Create a TCefCustomRenderProcessHandler in the DPR file, set a message name and the OnCustomMessage event. +// 2. Set the TCefCustomRenderProcessHandler in the GlobalCEFApp.RenderProcessHandler property. +// 3. To get the Javascript code in this demo we use a context menu that sends a MINIBROWSER_EVALJSCODE to the form. +// 4. The EvalJSCodeMsg asks for the Javascript code and sends it to the renderer using a process message. +// 5. RenderProcessHandler_OnCustomMessage receives the process message and calls ParseEvalJsAnswer to evaluate the code +// 6. ParseEvalJsAnswer evaluates the code and sends a message with the results to the browser process using a process message. +// 7. Chromium1ProcessMessageReceived receives the message, stores the results and sends a MINIBROWSER_SHOWTEXTVIEWER +// message to the form. +// 8. ShowTextViewerMsg shows the results safely using a SimpleTextViewer. + +procedure TJSEvalFrm.Chromium1AfterCreated(Sender: TObject; const browser: ICefBrowser); +begin + PostMessage(Handle, MINIBROWSER_CREATED, 0, 0); +end; + +procedure TJSEvalFrm.Chromium1BeforeContextMenu(Sender : TObject; + const browser : ICefBrowser; + const frame : ICefFrame; + const params : ICefContextMenuParams; + const model : ICefMenuModel); +begin + model.AddItem(MINIBROWSER_CONTEXTMENU_EVALJSCODE, 'Evaluate JavaScript code...'); +end; + +procedure TJSEvalFrm.Chromium1ContextMenuCommand(Sender : TObject; + const browser : ICefBrowser; + const frame : ICefFrame; + const params : ICefContextMenuParams; + commandId : Integer; + eventFlags : Cardinal; + out Result : Boolean); +begin + Result := False; + + case commandId of + MINIBROWSER_CONTEXTMENU_EVALJSCODE : PostMessage(Handle, MINIBROWSER_EVALJSCODE, 0, 0); + end; +end; + +procedure TJSEvalFrm.FormShow(Sender: TObject); +begin + Chromium1.CreateBrowser(CEFWindowParent1, ''); +end; + +procedure TJSEvalFrm.GoBtnClick(Sender: TObject); +begin + Chromium1.LoadURL(AddressEdt.Text); +end; + +procedure TJSEvalFrm.BrowserCreatedMsg(var aMessage : TMessage); +begin + AddressBarPnl.Enabled := True; + GoBtn.Click; +end; + +procedure TJSEvalFrm.ShowTextViewerMsg(var aMessage : TMessage); +begin + SimpleTextViewerFrm.Memo1.Lines.Text := FText; + SimpleTextViewerFrm.ShowModal; +end; + +procedure TJSEvalFrm.WMMove(var aMessage : TWMMove); +begin + inherited; + + if (Chromium1 <> nil) then Chromium1.NotifyMoveOrResizeStarted; +end; + +procedure TJSEvalFrm.WMMoving(var aMessage : TMessage); +begin + inherited; + + if (Chromium1 <> nil) then Chromium1.NotifyMoveOrResizeStarted; +end; + +procedure TJSEvalFrm.EvalJSCodeMsg(var aMessage : TMessage); +var + TempMsg : ICefProcessMessage; + TempScript : string; +begin + TempScript := InputBox('JSEval demo', 'Please type some JavaScript code', 'document.title;'); + + if (length(TempScript) > 0) then + begin + TempMsg := TCefProcessMessageRef.New(EVAL_JS); + TempMsg.ArgumentList.SetString(0, TempScript); + Chromium1.SendProcessMessage(PID_RENDERER, TempMsg); + end; +end; + +procedure TJSEvalFrm.RenderProcessHandler_OnCustomMessage(const pBrowser : ICefBrowser; + uSourceProcess : TCefProcessId; + const pMessage : ICefProcessMessage); +var + pV8Context : ICefv8Context; + pReturnValue : ICefv8Value; + pException : ICefV8Exception; + TempScript : string; +begin + if (pMessage = nil) or (pMessage.ArgumentList = nil) then exit; + + if (pMessage.Name = EVAL_JS) then + begin + TempScript := pMessage.ArgumentList.GetString(0); + + if (length(TempScript) > 0) then + begin + pV8Context := pBrowser.MainFrame.GetV8Context; + + if pV8Context.Enter then + begin + pV8Context.Eval(TempScript, '', 1, pReturnValue, pException); + ParseEvalJsAnswer(pMessage, pBrowser, pReturnValue, pException); + pV8Context.Exit; + end; + end; + end; +end; + +procedure TJSEvalFrm.ParseEvalJsAnswer(const pMessage : ICefProcessMessage; + pBrowser : ICefBrowser; + pReturnValue : ICefv8Value; + pException : ICefV8Exception); +var + pAnswer : ICefProcessMessage; + strResult : String; + bGoodDataType : Boolean; +begin + pAnswer := TCefProcessMessageRef.New(EVAL_JS); + + if (pReturnValue = nil) or not(pReturnValue.IsValid) then + begin + pAnswer.ArgumentList.SetBool(0, false); + pAnswer.ArgumentList.SetString(1, pException.Message); + end + else + begin + bGoodDataType := True; + + if pReturnValue.IsString then strResult := pReturnValue.GetStringValue + else if pReturnValue.IsBool then strResult := BoolToStr(pReturnValue.GetBoolValue) + else if pReturnValue.IsInt then strResult := IntToStr(pReturnValue.GetIntValue) + else if pReturnValue.IsUInt then strResult := IntToStr(pReturnValue.GetUIntValue) + else if pReturnValue.IsDouble then strResult := FloatToStr(pReturnValue.GetDoubleValue) + else bGoodDataType := False; + + if bGoodDataType then + begin + pAnswer.ArgumentList.SetBool(0, true); + pAnswer.ArgumentList.SetString(1, strResult); + end + else + begin + pAnswer.ArgumentList.SetBool(0, false); + pAnswer.ArgumentList.SetString(1, 'Result data type need to be string, int, uint or double!'); + end; + end; + + pBrowser.SendProcessMessage(PID_BROWSER, pAnswer); +end; + +procedure TJSEvalFrm.Chromium1ProcessMessageReceived(Sender : TObject; + const browser : ICefBrowser; + sourceProcess : TCefProcessId; + const message : ICefProcessMessage; + out Result : Boolean); +begin + if (message = nil) or (message.ArgumentList = nil) then exit; + + if (message.Name = EVAL_JS) then + begin + FText := message.ArgumentList.GetString(1); + PostMessage(Handle, MINIBROWSER_SHOWTEXTVIEWER, 0, 0); + Result := True; + end + else + Result := False; +end; + +end. diff --git a/demos/MiniBrowser/uSimpleTextViewer.dfm b/demos/JSEval/uSimpleTextViewer.dfm similarity index 100% rename from demos/MiniBrowser/uSimpleTextViewer.dfm rename to demos/JSEval/uSimpleTextViewer.dfm diff --git a/demos/MiniBrowser/uSimpleTextViewer.pas b/demos/JSEval/uSimpleTextViewer.pas similarity index 100% rename from demos/MiniBrowser/uSimpleTextViewer.pas rename to demos/JSEval/uSimpleTextViewer.pas diff --git a/demos/JSExtension/JSExtension.dpr b/demos/JSExtension/JSExtension.dpr index 10eb9877..e76266ee 100644 --- a/demos/JSExtension/JSExtension.dpr +++ b/demos/JSExtension/JSExtension.dpr @@ -88,7 +88,6 @@ begin GlobalCEFApp.cookies := 'cef\cookies'; GlobalCEFApp.UserDataPath := 'cef\User Data'; - if GlobalCEFApp.StartMainProcess then begin Application.Initialize; diff --git a/demos/JSExtension/JSExtension.dproj b/demos/JSExtension/JSExtension.dproj index d83158a5..c1ca85ff 100644 --- a/demos/JSExtension/JSExtension.dproj +++ b/demos/JSExtension/JSExtension.dproj @@ -138,27 +138,12 @@ true - - - 0 - .dll;.bpl - + 1 - .dylib - - - Contents\MacOS - 1 - .dylib 1 - .dylib - - - 1 - .dylib @@ -512,12 +497,27 @@ 1 - + + + 0 + .dll;.bpl + 1 + .dylib + + + Contents\MacOS + 1 + .dylib 1 + .dylib + + + 1 + .dylib diff --git a/demos/JSExtension/JSExtension.dproj.local b/demos/JSExtension/JSExtension.dproj.local index 9f8362c4..c1fdd06e 100644 --- a/demos/JSExtension/JSExtension.dproj.local +++ b/demos/JSExtension/JSExtension.dproj.local @@ -2,13 +2,13 @@ 2017/07/15 09:50:55.000.277,=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\Unit1.pas - 2017/07/25 21:43:25.930,=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\Unit1.pas - 2017/07/25 21:43:40.982,C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\JSExtension\Unit1.pas=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\Unit1.pas - 2017/07/25 21:43:40.982,C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\JSExtension\Unit1.dfm=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\Unit1.dfm - 2017/07/25 21:43:48.560,C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\JSExtension\JSExtension.dproj=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\Project1.dproj - 2017/07/25 21:44:09.830,C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\JSExtension\Unit1.pas= - 2017/07/25 21:44:16.573,=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\JSExtension\uJSExtension.pas - 2017/07/25 21:48:00.759,=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\JSExtension\uTestExtension.pas - 2017/07/25 22:14:06.097,=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\JSExtension\uSimpleTextViewer.pas + 2017/07/25 21:43:25.000.930,=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\Unit1.pas + 2017/07/25 21:43:40.000.982,C:\Users\usuario\Documents\Embarcadero\Studio\Projects\Unit1.pas=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\JSExtension\Unit1.pas + 2017/07/25 21:43:40.000.982,C:\Users\usuario\Documents\Embarcadero\Studio\Projects\Unit1.dfm=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\JSExtension\Unit1.dfm + 2017/07/25 21:43:48.000.560,C:\Users\usuario\Documents\Embarcadero\Studio\Projects\Project1.dproj=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\JSExtension\JSExtension.dproj + 2017/07/25 21:44:09.000.830,C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\JSExtension\Unit1.pas= + 2017/07/25 21:44:16.000.573,=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\JSExtension\uJSExtension.pas + 2017/07/25 21:48:00.000.759,=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\JSExtension\uTestExtension.pas + 2017/07/25 22:14:06.000.097,=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\JSExtension\uSimpleTextViewer.pas diff --git a/demos/JSExtension/JSExtension.dsk b/demos/JSExtension/JSExtension.dsk index 74f01db3..90e09997 100644 --- a/demos/JSExtension/JSExtension.dsk +++ b/demos/JSExtension/JSExtension.dsk @@ -1,59 +1,53 @@ [Closed Files] -File_0=TSourceModule,'c:\program files\embarcadero\studio\17.0\source\rtl\common\System.Generics.Collections.pas',0,1,1121,1,1143,0,0,, -File_1=TSourceModule,'C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\source\uCEFChromium.pas',0,1,1403,1,1425,0,0,, -File_2=TSourceModule,'C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\JSExtension\Unit1.pas',0,1,1,1,1,0,0,, -File_3=TSourceModule,'C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\source\uCEFTask.pas',0,1,156,3,83,0,0,, -File_4=TSourceModule,'C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\MiniBrowser\uHelloScheme.pas',0,1,116,20,133,0,0,, -File_5=TSourceModule,'C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\MiniBrowser\uTestExtension.pas',0,1,16,1,45,0,0,, -File_6=TSourceModule,'C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\MiniBrowser\uSimpleTextViewer.pas',0,1,1,51,31,0,0,, -File_7=TSourceModule,'C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\source\uCEFMiscFunctions.pas',0,1,647,1,680,0,0,, -File_8=TSourceModule,'C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\source\uCEFApplication.pas',0,1,524,99,559,0,0,, +File_0=TSourceModule,'C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\MiniBrowser\uMiniBrowser.pas',0,1,496,16,519,0,0,, +File_1=TSourceModule,'c:\program files\embarcadero\studio\17.0\source\rtl\common\System.Generics.Collections.pas',0,1,1121,1,1143,0,0,, +File_2=TSourceModule,'C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\source\uCEFChromium.pas',0,1,1403,1,1425,0,0,, +File_3=TSourceModule,'C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\JSExtension\Unit1.pas',0,1,1,1,1,0,0,, +File_4=TSourceModule,'C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\source\uCEFTask.pas',0,1,156,3,83,0,0,, +File_5=TSourceModule,'C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\MiniBrowser\uHelloScheme.pas',0,1,116,20,133,0,0,, +File_6=TSourceModule,'C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\MiniBrowser\uTestExtension.pas',0,1,16,1,45,0,0,, +File_7=TSourceModule,'C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\MiniBrowser\uSimpleTextViewer.pas',0,1,1,51,31,0,0,, +File_8=TSourceModule,'C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\source\uCEFMiscFunctions.pas',0,1,647,1,680,0,0,, +File_9=TSourceModule,'C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\source\uCEFApplication.pas',0,1,524,99,559,0,0,, [Modules] -Module0=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\JSExtension\uJSExtension.pas -Module1=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\MiniBrowser\uMiniBrowser.pas -Module2=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\JSExtension\JSExtension.dproj -Module3=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\JSExtension\uSimpleTextViewer.pas -Module4=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\JSExtension\uTestExtension.pas -Module5=default.htm -Count=6 +Module0=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\JSExtension\JSExtension.dproj +Module1=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\JSExtension\uJSExtension.pas +Module2=default.htm +Module3=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\JSExtension\uTestExtension.pas +Module4=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\JSExtension\uSimpleTextViewer.pas +Count=5 EditWindowCount=1 +[C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\JSExtension\JSExtension.dproj] +ModuleType=TBaseProject + [C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\JSExtension\uJSExtension.pas] ModuleType=TSourceModule FormState=1 FormOnTop=0 -[C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\MiniBrowser\uMiniBrowser.pas] -ModuleType=TSourceModule -FormState=1 -FormOnTop=1 - -[C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\JSExtension\JSExtension.dproj] -ModuleType=TBaseProject - -[C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\JSExtension\uSimpleTextViewer.pas] -ModuleType=TSourceModule -FormState=1 -FormOnTop=0 +[default.htm] +ModuleType=TURLModule [C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\JSExtension\uTestExtension.pas] ModuleType=TSourceModule FormState=0 FormOnTop=0 -[default.htm] -ModuleType=TURLModule +[C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\JSExtension\uSimpleTextViewer.pas] +ModuleType=TSourceModule +FormState=1 +FormOnTop=0 [EditWindow0] -ViewCount=6 -CurrentEditView=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\JSExtension\uJSExtension.pas +ViewCount=5 +CurrentEditView=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\JSExtension\JSExtension.dpr View0=0 View1=1 View2=2 View3=3 View4=4 -View5=5 PercentageSizes=1 Create=1 Visible=1 @@ -73,14 +67,14 @@ TopPanelSize=0 LeftPanelSize=0 RightPanelSize=2000 RightPanelClients=DockSite2,DockSite4 -RightPanelData=000008000101000000001E1500000000000001D00700000000000001000000004312000009000000446F636B53697465320100000000511D000009000000446F636B5369746534FFFFFFFF -BottomPanelSize=1551 +RightPanelData=00000800010100000000AA1900000000000001D00700000000000001000000004312000009000000446F636B53697465320100000000A123000009000000446F636B5369746534FFFFFFFF +BottomPanelSize=0 BottomPanelClients=DockSite1,MessageView -BottomPanelData=0000080001020100000009000000446F636B53697465313B36000000000000020F0600000000000001000000003B3600000F0000004D65737361676556696577466F726DFFFFFFFF +BottomPanelData=0000080001020200000009000000446F636B53697465310F0000004D65737361676556696577466F726D1234000000000000022506000000000000FFFFFFFF BottomMiddlePanelSize=0 BottomMiddlePanelClients=DockSite0,GraphDrawingModel BottomMiddelPanelData=0000080001020200000009000000446F636B536974653010000000477261706844726177696E67566965779D1D00000000000002F306000000000000FFFFFFFF -TabDockLeftClients=DockSite3=0,PropertyInspector=1 +TabDockLeftClients=PropertyInspector=0,DockSite3=1 [View0] CustomEditViewType=TWelcomePageView @@ -88,38 +82,27 @@ WelcomePageURL=bds:/default.htm [View1] CustomEditViewType=TEditView -Module=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\JSExtension\uJSExtension.pas -CursorX=60 -CursorY=236 -TopLine=15 -LeftCol=1 -Elisions= -Bookmarks= -EditViewName=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\JSExtension\uJSExtension.pas - -[View2] -CustomEditViewType=TEditView -Module=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\MiniBrowser\uMiniBrowser.pas -CursorX=16 -CursorY=519 -TopLine=496 -LeftCol=1 -Elisions= -Bookmarks= -EditViewName=Borland.FormDesignerView - -[View3] -CustomEditViewType=TEditView Module=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\JSExtension\JSExtension.dpr -CursorX=66 -CursorY=91 -TopLine=41 +CursorX=77 +CursorY=89 +TopLine=50 LeftCol=1 Elisions= Bookmarks= EditViewName=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\JSExtension\JSExtension.dpr -[View4] +[View2] +CustomEditViewType=TEditView +Module=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\JSExtension\uJSExtension.pas +CursorX=86 +CursorY=194 +TopLine=168 +LeftCol=1 +Elisions= +Bookmarks= +EditViewName=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\JSExtension\uJSExtension.pas + +[View3] CustomEditViewType=TEditView Module=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\JSExtension\uSimpleTextViewer.pas CursorX=22 @@ -130,7 +113,7 @@ Elisions= Bookmarks= EditViewName=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\JSExtension\uSimpleTextViewer.pas -[View5] +[View4] CustomEditViewType=TEditView Module=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\JSExtension\uTestExtension.pas CursorX=48 @@ -155,11 +138,11 @@ State=0 Left=0 Top=0 Width=3820 -Height=1043 +Height=1121 MaxLeft=-1 MaxTop=-1 ClientWidth=3820 -ClientHeight=1043 +ClientHeight=1121 TBDockHeight=213 LRDockWidth=13602 Dockable=1 @@ -216,18 +199,18 @@ StayOnTop=0 [MessageView] PercentageSizes=1 Create=1 -Visible=1 +Visible=0 Docked=1 State=0 Left=0 -Top=23 -Width=10000 -Height=1345 +Top=0 +Width=2773 +Height=1424 MaxLeft=-1 MaxTop=-1 -ClientWidth=10000 -ClientHeight=1345 -TBDockHeight=1345 +ClientWidth=2773 +ClientHeight=1424 +TBDockHeight=1424 LRDockWidth=2773 Dockable=1 StayOnTop=0 @@ -241,11 +224,11 @@ State=0 Left=0 Top=0 Width=2000 -Height=2668 +Height=4339 MaxLeft=-1 MaxTop=-1 ClientWidth=2000 -ClientHeight=2668 +ClientHeight=4339 TBDockHeight=7152 LRDockWidth=2000 Dockable=1 @@ -355,22 +338,17 @@ State=0 Left=78 Top=386 Width=1898 -Height=7119 +Height=7164 MaxLeft=-1 MaxTop=-1 -ClientWidth=1773 -ClientHeight=6693 -TBDockHeight=7119 +ClientWidth=1898 +ClientHeight=7164 +TBDockHeight=7164 LRDockWidth=1898 Dockable=1 StayOnTop=0 SplitPos=111 -[PropInspDesignerSelection] -ArrangeBy=Name -SelectedItem=Name,CustomHint -ExpandedItems=Anchors=0,BorderIcons=0,Constraints=0,LiveBindings=0,"LiveBindings Designer=0",Margins=0,Font=0,GlassFrame=0,HorzScrollBar=0,Padding=0,StyleElements=0,Touch=0,VertScrollBar=0,BevelEdges=0,ImageMargins=0 - [frmDesignPreview] PercentageSizes=1 Create=1 @@ -440,11 +418,11 @@ State=0 Left=0 Top=0 Width=3820 -Height=1043 +Height=1121 MaxLeft=-1 MaxTop=-1 ClientWidth=3820 -ClientHeight=1043 +ClientHeight=1121 TBDockHeight=415 LRDockWidth=4953 Dockable=1 @@ -459,11 +437,11 @@ State=0 Left=0 Top=0 Width=3820 -Height=1043 +Height=1121 MaxLeft=-1 MaxTop=-1 ClientWidth=3820 -ClientHeight=1043 +ClientHeight=1121 TBDockHeight=213 LRDockWidth=7406 Dockable=1 @@ -482,11 +460,11 @@ State=0 Left=0 Top=0 Width=3820 -Height=1043 +Height=1121 MaxLeft=-1 MaxTop=-1 ClientWidth=3820 -ClientHeight=1043 +ClientHeight=1121 TBDockHeight=1536 LRDockWidth=3484 Dockable=1 @@ -501,11 +479,11 @@ State=0 Left=0 Top=0 Width=3820 -Height=1043 +Height=1121 MaxLeft=-1 MaxTop=-1 ClientWidth=3820 -ClientHeight=1043 +ClientHeight=1121 TBDockHeight=2063 LRDockWidth=3484 Dockable=1 @@ -623,11 +601,11 @@ State=0 Left=0 Top=0 Width=3820 -Height=1043 +Height=1121 MaxLeft=-1 MaxTop=-1 ClientWidth=3820 -ClientHeight=1043 +ClientHeight=1121 TBDockHeight=1547 LRDockWidth=8742 Dockable=1 @@ -649,11 +627,11 @@ State=0 Left=0 Top=0 Width=1773 -Height=6693 +Height=6738 MaxLeft=-1 MaxTop=-1 ClientWidth=1773 -ClientHeight=6693 +ClientHeight=6738 TBDockHeight=3677 LRDockWidth=1898 Dockable=1 @@ -735,12 +713,12 @@ State=0 Left=0 Top=23 Width=3820 -Height=1345 +Height=1424 MaxLeft=-1 MaxTop=-1 ClientWidth=3820 -ClientHeight=1345 -TBDockHeight=1345 +ClientHeight=1424 +TBDockHeight=1424 LRDockWidth=3820 Dockable=1 StayOnTop=0 @@ -783,12 +761,12 @@ State=0 Left=0 Top=0 Width=1898 -Height=7119 +Height=7164 MaxLeft=-1 MaxTop=-1 ClientWidth=1773 -ClientHeight=6693 -TBDockHeight=7119 +ClientHeight=6738 +TBDockHeight=7164 LRDockWidth=1898 Dockable=1 StayOnTop=0 @@ -807,11 +785,11 @@ State=0 Left=0 Top=454 Width=2000 -Height=2668 +Height=4339 MaxLeft=-1 MaxTop=-1 ClientWidth=2000 -ClientHeight=2668 +ClientHeight=4339 TBDockHeight=7119 LRDockWidth=2000 Dockable=1 diff --git a/demos/JSExtension/JSExtension.identcache b/demos/JSExtension/JSExtension.identcache index 3d055dc3962037045533c5d068f9a051fc94ad01..e3ee082a0a659c698b51df7130b2fecc504112b9 100644 GIT binary patch delta 13 Ucmdnba*mmiWg_FV$q|gt0UyZ( 2017/05/01 10:03:03.000.353,C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\MDIBrowser\about.pas= - 2017/05/01 11:22:18.000.397,C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\MDIBrowser\MDIAPP.dproj=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\MDIBrowser\MDIBrowser.dproj - 2017/05/01 12:25:35.000.397,C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\MDIBrowser\Main.pas=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\MDIBrowser\uMainForm.pas - 2017/05/01 12:25:35.000.397,C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\MDIBrowser\Main.dfm=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\MDIBrowser\uMainForm.dfm - 2017/05/01 12:26:13.000.106,C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\MDIBrowser\ChildWin.pas=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\MDIBrowser\uChildForm.pas - 2017/05/01 12:26:13.000.106,C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\MDIBrowser\ChildWin.dfm=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\MDIBrowser\uChildForm.dfm + 2017/05/01 11:22:18.000.397,C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\MDIBrowser\MDIBrowser.dproj=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\MDIBrowser\MDIAPP.dproj + 2017/05/01 12:25:35.000.397,C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\MDIBrowser\uMainForm.pas=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\MDIBrowser\Main.pas + 2017/05/01 12:25:35.000.397,C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\MDIBrowser\uMainForm.dfm=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\MDIBrowser\Main.dfm + 2017/05/01 12:26:13.000.106,C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\MDIBrowser\uChildForm.dfm=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\MDIBrowser\ChildWin.dfm + 2017/05/01 12:26:13.000.106,C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\MDIBrowser\uChildForm.pas=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\MDIBrowser\ChildWin.pas diff --git a/demos/MiniBrowser/MiniBrowser.dpr b/demos/MiniBrowser/MiniBrowser.dpr index 3a0b3439..10605a0a 100644 --- a/demos/MiniBrowser/MiniBrowser.dpr +++ b/demos/MiniBrowser/MiniBrowser.dpr @@ -51,148 +51,16 @@ uses SysUtils, {$ENDIF } uCEFApplication, - uCEFMiscFunctions, - uCEFSchemeRegistrar, - uCEFRenderProcessHandler, - uCEFv8Handler, - uCEFInterfaces, - uCEFDomVisitor, - uCEFDomNode, - uCEFConstants, - uCEFTypes, - uCEFTask, - uCEFProcessMessage, uMiniBrowser in 'uMiniBrowser.pas' {MiniBrowserFrm}, - uTestExtension in 'uTestExtension.pas', - uHelloScheme in 'uHelloScheme.pas', - uPreferences in 'uPreferences.pas' {PreferencesFrm}, - uSimpleTextViewer in 'uSimpleTextViewer.pas' {SimpleTextViewerFrm}; + uPreferences in 'uPreferences.pas' {PreferencesFrm}; {$R *.res} // CEF3 needs to set the LARGEADDRESSAWARE flag which allows 32-bit processes to use up to 3GB of RAM. {$SetPEFlags IMAGE_FILE_LARGE_ADDRESS_AWARE} -var - TempProcessHandler : TCefCustomRenderProcessHandler; - -procedure SimpleDOMIteration(const aDocument: ICefDomDocument); -var - TempHead, TempChild : ICefDomNode; begin - try - if (aDocument <> nil) then - begin - TempHead := aDocument.Head; - - if (TempHead <> nil) then - begin - TempChild := TempHead.FirstChild; - - while (TempChild <> nil) do - begin - CefLog('CEF4Delphi', 1, CEF_LOG_SEVERITY_ERROR, 'Head child element : ' + TempChild.Name); - TempChild := TempChild.NextSibling; - end; - end; - end; - except - on e : exception do - if CustomExceptionHandler('SimpleDOMIteration', e) then raise; - end; -end; - -procedure SimpleNodeSearch(const aDocument: ICefDomDocument); -const - NODE_ID = 'lst-ib'; -var - TempNode : ICefDomNode; -begin - try - if (aDocument <> nil) then - begin - TempNode := aDocument.GetElementById(NODE_ID); - - if (TempNode <> nil) then - CefLog('CEF4Delphi', 1, CEF_LOG_SEVERITY_ERROR, NODE_ID + ' element name : ' + TempNode.Name); - - TempNode := aDocument.GetFocusedNode; - - if (TempNode <> nil) then - CefLog('CEF4Delphi', 1, CEF_LOG_SEVERITY_ERROR, 'Focused element name : ' + TempNode.Name); - end; - except - on e : exception do - if CustomExceptionHandler('SimpleNodeSearch', e) then raise; - end; -end; - -procedure DOMVisitor_OnDocAvailable(const browser: ICefBrowser; const document: ICefDomDocument); -var - msg: ICefProcessMessage; -begin - // This function is called from a different process. - // document is only valid inside this function. - // As an example, this function only writes the document title to the 'debug.log' file. - CefLog('CEF4Delphi', 1, CEF_LOG_SEVERITY_ERROR, 'document.Title : ' + document.Title); - - // Simple DOM iteration example - SimpleDOMIteration(document); - - // Simple DOM searches - SimpleNodeSearch(document); - - // Sending back some custom results to the browser process - // Notice that the 'domvisitor' message name needs to be recognized in - // Chromium1ProcessMessageReceived - msg := TCefProcessMessageRef.New('domvisitor'); - msg.ArgumentList.SetString(0, 'document.Title : ' + document.Title); - browser.SendProcessMessage(PID_BROWSER, msg); -end; - -procedure ProcessHandler_OnCustomMessage(const browser: ICefBrowser; sourceProcess: TCefProcessId; const message: ICefProcessMessage); -var - TempFrame : ICefFrame; - TempVisitor : TCefFastDomVisitor2; -begin - if (browser <> nil) then - begin - TempFrame := browser.MainFrame; - - if (TempFrame <> nil) then - begin - TempVisitor := TCefFastDomVisitor2.Create(browser, DOMVisitor_OnDocAvailable); - TempFrame.VisitDom(TempVisitor); - end; - end; -end; - -procedure ProcessHandler_OnWebKitReady; -begin -{$IFDEF DELPHI14_UP} - // Registering the extension. Read this document for more details : - // https://bitbucket.org/chromiumembedded/cef/wiki/JavaScriptIntegration.md - TCefRTTIExtension.Register('myextension', TTestExtension); -{$ENDIF} -end; - -procedure GlobalCEFApp_OnRegCustomSchemes(const registrar: TCefSchemeRegistrarRef); -begin - registrar.AddCustomScheme('hello', True, True, False, False, False, False); -end; - -begin - // This ProcessHandler is used for the extension and the DOM visitor demos. - // It can be removed if you don't want those features. - TempProcessHandler := TCefCustomRenderProcessHandler.Create; - TempProcessHandler.MessageName := 'retrievedom'; // same message name than TMiniBrowserFrm.VisitDOMMsg - TempProcessHandler.OnCustomMessage := ProcessHandler_OnCustomMessage; - TempProcessHandler.OnWebKitReady := ProcessHandler_OnWebKitReady; - GlobalCEFApp := TCefApplication.Create; - GlobalCEFApp.RemoteDebuggingPort := 9000; - GlobalCEFApp.RenderProcessHandler := TempProcessHandler as ICefRenderProcessHandler; - GlobalCEFApp.OnRegCustomSchemes := GlobalCEFApp_OnRegCustomSchemes; // In case you want to use custom directories for the CEF3 binaries, cache, cookies and user data. { @@ -204,12 +72,6 @@ begin GlobalCEFApp.UserDataPath := 'cef\User Data'; } - // Enabling the debug log file for then DOM visitor demo. - // This adds lots of warnings to the console, specially if you run this inside VirtualBox. - // Remove it if you don't want to use the DOM visitor - GlobalCEFApp.LogFile := 'debug.log'; - GlobalCEFApp.LogSeverity := LOGSEVERITY_ERROR; - // Examples of command line switches. // ********************************** // @@ -221,16 +83,12 @@ begin if GlobalCEFApp.StartMainProcess then begin - // You can register the Scheme Handler Factory here or later, for example in a context menu command. - CefRegisterSchemeHandlerFactory('hello', '', THelloScheme); - Application.Initialize; {$IFDEF DELPHI11_UP} Application.MainFormOnTaskbar := True; {$ENDIF} Application.CreateForm(TMiniBrowserFrm, MiniBrowserFrm); Application.CreateForm(TPreferencesFrm, PreferencesFrm); - Application.CreateForm(TSimpleTextViewerFrm, SimpleTextViewerFrm); Application.Run; end; diff --git a/demos/MiniBrowser/MiniBrowser.dproj b/demos/MiniBrowser/MiniBrowser.dproj index 94aa3273..30c86901 100644 --- a/demos/MiniBrowser/MiniBrowser.dproj +++ b/demos/MiniBrowser/MiniBrowser.dproj @@ -101,15 +101,9 @@
MiniBrowserFrm
- -
PreferencesFrm
- -
SimpleTextViewerFrm
- dfm -
Cfg_2 Base @@ -142,27 +136,12 @@ true - - - 0 - .dll;.bpl - + 1 - .dylib - - - Contents\MacOS - 1 - .dylib 1 - .dylib - - - 1 - .dylib @@ -516,12 +495,27 @@ 1 - + + + 0 + .dll;.bpl + 1 + .dylib + + + Contents\MacOS + 1 + .dylib 1 + .dylib + + + 1 + .dylib diff --git a/demos/MiniBrowser/MiniBrowser.dproj.local b/demos/MiniBrowser/MiniBrowser.dproj.local index 9ecc44ec..5c10c0d0 100644 --- a/demos/MiniBrowser/MiniBrowser.dproj.local +++ b/demos/MiniBrowser/MiniBrowser.dproj.local @@ -2,8 +2,8 @@ 2017/02/11 10:15:32.000.980,=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\Unit1.pas - 2017/02/11 10:16:27.000.174,C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\MiniBrowser\uMiniBrowser.dfm=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\Unit1.dfm 2017/02/11 10:16:27.000.174,C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\MiniBrowser\uMiniBrowser.pas=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\Unit1.pas + 2017/02/11 10:16:27.000.174,C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\MiniBrowser\uMiniBrowser.dfm=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\Unit1.dfm 2017/02/11 10:16:37.000.392,C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\MiniBrowser\MiniBrowser.dproj=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\Project1.dproj 2017/02/11 17:10:26.000.471,=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\MiniBrowser\Unit1.pas 2017/02/11 17:11:01.000.244,C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\MiniBrowser\Unit1.pas=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\MiniBrowser\uTestExtension.pas @@ -16,5 +16,8 @@ 2017/07/14 11:54:07.000.560,=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\MiniBrowser\Unit1.pas 2017/07/14 11:57:42.000.778,C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\MiniBrowser\uSimpleTextViewer.pas=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\MiniBrowser\Unit1.pas 2017/07/14 11:57:42.000.778,C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\MiniBrowser\uSimpleTextViewer.dfm=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\MiniBrowser\Unit1.dfm + 2017/08/12 11:00:30.000.928,C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\MiniBrowser\uTestExtension.pas= + 2017/08/12 11:18:47.000.783,C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\MiniBrowser\uSimpleTextViewer.pas= + 2017/08/12 12:01:56.000.772,C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\MiniBrowser\uHelloScheme.pas= diff --git a/demos/MiniBrowser/MiniBrowser.dsk b/demos/MiniBrowser/MiniBrowser.dsk index 0706c4e7..2659b119 100644 --- a/demos/MiniBrowser/MiniBrowser.dsk +++ b/demos/MiniBrowser/MiniBrowser.dsk @@ -1,21 +1,27 @@ [Closed Files] -File_0=TSourceModule,'C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\MiniBrowser\uMiniBrowser.pas',0,1,434,30,449,0,0,, -File_1=TSourceModule,'C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\source\uCEFChromium.pas',0,1,1075,38,1089,0,0,, -File_2=TSourceModule,'C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\source\uCEFPDFPrintCallback.pas',0,1,78,80,113,0,0,, -File_3=TSourceModule,'C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\source\uCEFInterfaces.pas',0,1,120,3,143,0,0,, -File_4=TSourceModule,'C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\source\uCEFTypes.pas',0,1,1704,3,1727,0,0,, -File_5=TSourceModule,'C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\source\uCEFTask.pas',0,1,156,3,83,0,0,, -File_6=TSourceModule,'C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\MiniBrowser\uHelloScheme.pas',0,1,116,20,133,0,0,, -File_7=TSourceModule,'C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\MiniBrowser\uTestExtension.pas',0,1,16,1,45,0,0,, -File_8=TSourceModule,'C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\MiniBrowser\uSimpleTextViewer.pas',0,1,1,51,31,0,0,, -File_9=TSourceModule,'C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\source\uCEFMiscFunctions.pas',0,1,647,1,680,0,0,, +File_0=TSourceModule,'C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\source\uCEFInterfaces.pas',0,1,405,23,445,0,0,, +File_1=TSourceModule,'C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\source\uCEFChromium.pas',0,1,2342,57,2372,0,0,, +File_2=TSourceModule,'C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\source\uCEFApplication.pas',0,1,547,7,568,0,0,, +File_3=TSourceModule,'C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\JSExtension\uJSExtension.pas',0,1,154,79,172,0,0,, +File_4=TSourceModule,'C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\source\uCEFPDFPrintCallback.pas',0,1,78,80,113,0,0,, +File_5=TSourceModule,'C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\source\uCEFTypes.pas',0,1,1704,3,1727,0,0,, +File_6=TSourceModule,'C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\source\uCEFTask.pas',0,1,156,3,83,0,0,, +File_7=TSourceModule,'C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\MiniBrowser\uHelloScheme.pas',0,1,116,20,133,0,0,, +File_8=TSourceModule,'C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\MiniBrowser\uTestExtension.pas',0,1,16,1,45,0,0,, +File_9=TSourceModule,'C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\MiniBrowser\uSimpleTextViewer.pas',0,1,1,51,31,0,0,, [Modules] -Module0=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\MiniBrowser\MiniBrowser.dproj -Module1=default.htm -Count=2 +Module0=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\MiniBrowser\uMiniBrowser.pas +Module1=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\MiniBrowser\MiniBrowser.dproj +Module2=default.htm +Count=3 EditWindowCount=1 +[C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\MiniBrowser\uMiniBrowser.pas] +ModuleType=TSourceModule +FormState=1 +FormOnTop=0 + [C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\MiniBrowser\MiniBrowser.dproj] ModuleType=TBaseProject @@ -23,10 +29,11 @@ ModuleType=TBaseProject ModuleType=TURLModule [EditWindow0] -ViewCount=2 -CurrentEditView=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\MiniBrowser\MiniBrowser.dpr +ViewCount=3 +CurrentEditView=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\MiniBrowser\uMiniBrowser.pas View0=0 View1=1 +View2=2 PercentageSizes=1 Create=1 Visible=1 @@ -44,17 +51,16 @@ DockedToMainForm=1 BorlandEditorCodeExplorer=BorlandEditorCodeExplorer@EditWindow0 TopPanelSize=0 LeftPanelSize=0 -RightPanelSize=2000 -RightPanelClients=DockSite2 -RightPanelData=00000800010100000000AA1900000000000001D0070000000000000100000000A123000009000000446F636B5369746532FFFFFFFF +RightPanelSize=2008 +RightPanelClients=DockSite2,DockSite4 +RightPanelData=00000800010100000000AA1900000000000001D80700000000000001000000004312000009000000446F636B53697465320100000000A123000009000000446F636B5369746534FFFFFFFF BottomPanelSize=0 BottomPanelClients=DockSite1,MessageView -BottomPanelData=0000080001020200000009000000446F636B53697465310F0000004D65737361676556696577466F726D1234000000000000022506000000000000FFFFFFFF +BottomPanelData=0000080001020200000009000000446F636B53697465310F0000004D65737361676556696577466F726D3B36000000000000025B06000000000000FFFFFFFF BottomMiddlePanelSize=0 BottomMiddlePanelClients=DockSite0,GraphDrawingModel BottomMiddelPanelData=0000080001020200000009000000446F636B536974653010000000477261706844726177696E67566965779D1D00000000000002F306000000000000FFFFFFFF -TabDockLeftClients=PropertyInspector=0,DockSite3=1 -TabDockRightClients=DockSite4=0 +TabDockLeftClients=DockSite3=0,PropertyInspector=1 [View0] CustomEditViewType=TWelcomePageView @@ -63,14 +69,25 @@ WelcomePageURL=bds:/default.htm [View1] CustomEditViewType=TEditView Module=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\MiniBrowser\MiniBrowser.dpr -CursorX=69 -CursorY=210 -TopLine=180 +CursorX=3 +CursorY=47 +TopLine=41 LeftCol=1 Elisions= Bookmarks= EditViewName=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\MiniBrowser\MiniBrowser.dpr +[View2] +CustomEditViewType=TEditView +Module=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\MiniBrowser\uMiniBrowser.pas +CursorX=81 +CursorY=416 +TopLine=29 +LeftCol=1 +Elisions= +Bookmarks={1,421,51}{2,560,83} +EditViewName=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\MiniBrowser\uMiniBrowser.pas + [Watches] Count=0 @@ -85,11 +102,11 @@ State=0 Left=0 Top=0 Width=3820 -Height=1121 +Height=2377 MaxLeft=-1 MaxTop=-1 ClientWidth=3820 -ClientHeight=1121 +ClientHeight=2377 TBDockHeight=213 LRDockWidth=13602 Dockable=1 @@ -132,12 +149,12 @@ Docked=1 State=0 Left=0 Top=0 -Width=2000 -Height=8868 +Width=2008 +Height=4226 MaxLeft=-1 MaxTop=-1 -ClientWidth=2000 -ClientHeight=8868 +ClientWidth=2008 +ClientHeight=4226 TBDockHeight=5897 LRDockWidth=2352 Dockable=1 @@ -150,7 +167,7 @@ Visible=0 Docked=1 State=0 Left=0 -Top=0 +Top=23 Width=2773 Height=1424 MaxLeft=-1 @@ -170,12 +187,12 @@ Docked=1 State=0 Left=0 Top=0 -Width=1875 -Height=6738 +Width=2008 +Height=4339 MaxLeft=-1 MaxTop=-1 -ClientWidth=1875 -ClientHeight=6738 +ClientWidth=2008 +ClientHeight=4339 TBDockHeight=7152 LRDockWidth=2000 Dockable=1 @@ -284,17 +301,22 @@ Docked=1 State=0 Left=78 Top=386 -Width=1898 +Width=1883 Height=7164 MaxLeft=-1 MaxTop=-1 -ClientWidth=1898 -ClientHeight=7164 +ClientWidth=1758 +ClientHeight=6738 TBDockHeight=7164 -LRDockWidth=1898 +LRDockWidth=1883 Dockable=1 StayOnTop=0 -SplitPos=111 +SplitPos=142 + +[PropInspDesignerSelection] +ArrangeBy=Name +SelectedItem=Caption,OnResourceResponse +ExpandedItems=Anchors=0,BorderIcons=0,Constraints=0,Font=0,GlassFrame=0,HorzScrollBar=0,LiveBindings=0,"LiveBindings Designer=0",Margins=0,Padding=0,StyleElements=0,Touch=0,VertScrollBar=0,BevelEdges=0 [frmDesignPreview] PercentageSizes=1 @@ -304,11 +326,11 @@ Docked=1 State=0 Left=0 Top=0 -Width=2000 +Width=2008 Height=6816 MaxLeft=-1 MaxTop=-1 -ClientWidth=2000 +ClientWidth=2008 ClientHeight=6816 TBDockHeight=5964 LRDockWidth=2508 @@ -321,7 +343,7 @@ Create=1 Visible=0 Docked=1 State=0 -Left=-946 +Left=-945 Top=1 Width=2844 Height=6200 @@ -340,8 +362,8 @@ Create=1 Visible=0 Docked=1 State=0 -Left=-8 -Top=287 +Left=-1151 +Top=243 Width=273 Height=359 MaxLeft=-1 @@ -365,11 +387,11 @@ State=0 Left=0 Top=0 Width=3820 -Height=1121 +Height=2377 MaxLeft=-1 MaxTop=-1 ClientWidth=3820 -ClientHeight=1121 +ClientHeight=2377 TBDockHeight=415 LRDockWidth=4953 Dockable=1 @@ -384,11 +406,11 @@ State=0 Left=0 Top=0 Width=3820 -Height=1121 +Height=2377 MaxLeft=-1 MaxTop=-1 ClientWidth=3820 -ClientHeight=1121 +ClientHeight=2377 TBDockHeight=213 LRDockWidth=7406 Dockable=1 @@ -407,11 +429,11 @@ State=0 Left=0 Top=0 Width=3820 -Height=1121 +Height=2377 MaxLeft=-1 MaxTop=-1 ClientWidth=3820 -ClientHeight=1121 +ClientHeight=2377 TBDockHeight=1536 LRDockWidth=3484 Dockable=1 @@ -426,11 +448,11 @@ State=0 Left=0 Top=0 Width=3820 -Height=1121 +Height=2377 MaxLeft=-1 MaxTop=-1 ClientWidth=3820 -ClientHeight=1121 +ClientHeight=2377 TBDockHeight=2063 LRDockWidth=3484 Dockable=1 @@ -509,11 +531,11 @@ Docked=1 State=0 Left=0 Top=0 -Width=2000 +Width=2008 Height=6816 MaxLeft=-1 MaxTop=-1 -ClientWidth=2000 +ClientWidth=2008 ClientHeight=6816 TBDockHeight=4888 LRDockWidth=7148 @@ -548,11 +570,11 @@ State=0 Left=0 Top=0 Width=3820 -Height=1121 +Height=2377 MaxLeft=-1 MaxTop=-1 ClientWidth=3820 -ClientHeight=1121 +ClientHeight=2377 TBDockHeight=1547 LRDockWidth=8742 Dockable=1 @@ -592,11 +614,11 @@ Docked=1 State=0 Left=0 Top=0 -Width=2000 +Width=2008 Height=6816 MaxLeft=-1 MaxTop=-1 -ClientWidth=2000 +ClientWidth=2008 ClientHeight=6816 TBDockHeight=4888 LRDockWidth=5305 @@ -660,12 +682,12 @@ State=0 Left=0 Top=23 Width=3820 -Height=1424 +Height=2679 MaxLeft=-1 MaxTop=-1 ClientWidth=3820 -ClientHeight=1424 -TBDockHeight=1424 +ClientHeight=2679 +TBDockHeight=2679 LRDockWidth=3820 Dockable=1 StayOnTop=0 @@ -683,14 +705,14 @@ Docked=1 State=0 Left=0 Top=23 -Width=2000 -Height=9170 +Width=2008 +Height=4529 MaxLeft=-1 MaxTop=-1 -ClientWidth=2000 -ClientHeight=9170 -TBDockHeight=7164 -LRDockWidth=2000 +ClientWidth=2008 +ClientHeight=4529 +TBDockHeight=7119 +LRDockWidth=2008 Dockable=1 StayOnTop=0 TabPosition=1 @@ -722,23 +744,23 @@ ActiveTabID=StructureView TabDockClients=StructureView,ClassBrowserTool [DockSite4] -HostDockSite=RightTabDock +HostDockSite=DockRightPanel DockSiteType=1 PercentageSizes=1 Create=1 -Visible=0 +Visible=1 Docked=1 State=0 Left=0 -Top=0 -Width=2000 -Height=7164 +Top=454 +Width=2008 +Height=4339 MaxLeft=-1 MaxTop=-1 -ClientWidth=1875 -ClientHeight=6738 -TBDockHeight=7164 -LRDockWidth=2000 +ClientWidth=2008 +ClientHeight=4339 +TBDockHeight=7119 +LRDockWidth=2008 Dockable=1 StayOnTop=0 TabPosition=1 diff --git a/demos/MiniBrowser/MiniBrowser.identcache b/demos/MiniBrowser/MiniBrowser.identcache index 6a0ce33f622929d94f915c6351aaa60a6ed0a558..86b38cba891451878c039a85970907b222715a2f 100644 GIT binary patch delta 17 ZcmdnMdX0&ZdGZ;?lM|x~Cr@RP1^_wq23!CD delta 112 zcmcb{w1Jh8ZDQdm8IRPQoc!SAjMUszy@JGI1|*O<@mZ*1aAs~nPHISMMM+p@YI$lA hx}r3oBB_wn;u6=2lGME7%=|nQ6%!dxPPS&01^_J|9^n80 diff --git a/demos/MiniBrowser/MiniBrowser.stat b/demos/MiniBrowser/MiniBrowser.stat index 99a64a00..a07a453c 100644 --- a/demos/MiniBrowser/MiniBrowser.stat +++ b/demos/MiniBrowser/MiniBrowser.stat @@ -1,10 +1,10 @@ [Stats] -EditorSecs=42830 -DesignerSecs=2220 -InspectorSecs=1743 -CompileSecs=2297554 -OtherSecs=6773 +EditorSecs=45060 +DesignerSecs=2232 +InspectorSecs=1765 +CompileSecs=2338395 +OtherSecs=6929 StartTime=11/02/2017 10:51:15 RealKeys=0 EffectiveKeys=0 -DebugSecs=32580 +DebugSecs=32755 diff --git a/demos/MiniBrowser/uMiniBrowser.dfm b/demos/MiniBrowser/uMiniBrowser.dfm index 28eb763f..f34c11ba 100644 --- a/demos/MiniBrowser/uMiniBrowser.dfm +++ b/demos/MiniBrowser/uMiniBrowser.dfm @@ -123,11 +123,11 @@ object MiniBrowserFrm: TMiniBrowserFrm Width = 978 Height = 21 Align = alClient + ItemIndex = 0 TabOrder = 0 Text = 'https://www.google.com' Items.Strings = ( 'https://www.google.com' - 'hello://world/' 'https://www.whatismybrowser.com/detect/what-http-headers-is-my-b' + 'rowser-sending' @@ -212,7 +212,6 @@ object MiniBrowserFrm: TMiniBrowserFrm object Chromium1: TChromium OnTextResultAvailable = Chromium1TextResultAvailable OnPdfPrintFinished = Chromium1PdfPrintFinished - OnProcessMessageReceived = Chromium1ProcessMessageReceived OnLoadingStateChange = Chromium1LoadingStateChange OnBeforeContextMenu = Chromium1BeforeContextMenu OnContextMenuCommand = Chromium1ContextMenuCommand @@ -223,6 +222,7 @@ object MiniBrowserFrm: TMiniBrowserFrm OnFullScreenModeChange = Chromium1FullScreenModeChange OnStatusMessage = Chromium1StatusMessage OnAfterCreated = Chromium1AfterCreated + OnResourceResponse = Chromium1ResourceResponse Left = 32 Top = 224 end diff --git a/demos/MiniBrowser/uMiniBrowser.pas b/demos/MiniBrowser/uMiniBrowser.pas index 4d9cac98..3a4f7fe9 100644 --- a/demos/MiniBrowser/uMiniBrowser.pas +++ b/demos/MiniBrowser/uMiniBrowser.pas @@ -57,22 +57,16 @@ const MINIBROWSER_SHOWDEVTOOLS = WM_APP + $101; MINIBROWSER_HIDEDEVTOOLS = WM_APP + $102; MINIBROWSER_COPYHTML = WM_APP + $103; - MINIBROWSER_VISITDOM = WM_APP + $104; - MINIBROWSER_SHOWTEXTVIEWER = WM_APP + $105; + MINIBROWSER_SHOWRESPONSE = WM_APP + $104; MINIBROWSER_HOMEPAGE = 'https://www.google.com'; MINIBROWSER_CONTEXTMENU_SHOWDEVTOOLS = MENU_ID_USER_FIRST + 1; MINIBROWSER_CONTEXTMENU_HIDEDEVTOOLS = MENU_ID_USER_FIRST + 2; - MINIBROWSER_CONTEXTMENU_SHOWJSALERT = MENU_ID_USER_FIRST + 3; - MINIBROWSER_CONTEXTMENU_SETJSEVENT = MENU_ID_USER_FIRST + 4; MINIBROWSER_CONTEXTMENU_COPYHTML = MENU_ID_USER_FIRST + 5; - MINIBROWSER_CONTEXTMENU_VISITDOM = MENU_ID_USER_FIRST + 6; MINIBROWSER_CONTEXTMENU_JSWRITEDOC = MENU_ID_USER_FIRST + 7; MINIBROWSER_CONTEXTMENU_JSPRINTDOC = MENU_ID_USER_FIRST + 8; - MINIBROWSER_CONTEXTMENU_REGSCHEME = MENU_ID_USER_FIRST + 9; - MINIBROWSER_CONTEXTMENU_CLEARFACT = MENU_ID_USER_FIRST + 10; - MINIBROWSER_CONTEXTMENU_JSVISITDOM = MENU_ID_USER_FIRST + 11; + MINIBROWSER_CONTEXTMENU_SHOWRESPONSE = MENU_ID_USER_FIRST + 9; type TMiniBrowserFrm = class(TForm) @@ -126,9 +120,6 @@ type procedure Chromium1BeforeContextMenu(Sender: TObject; const browser: ICefBrowser; const frame: ICefFrame; const params: ICefContextMenuParams; const model: ICefMenuModel); - procedure Chromium1ProcessMessageReceived(Sender: TObject; - const browser: ICefBrowser; sourceProcess: TCefProcessId; - const message: ICefProcessMessage; out Result: Boolean); procedure Chromium1StatusMessage(Sender: TObject; const browser: ICefBrowser; const value: ustring); procedure Chromium1TextResultAvailable(Sender: TObject; @@ -160,9 +151,13 @@ type eventFlags: Cardinal; out Result: Boolean); procedure Chromium1PdfPrintFinished(Sender: TObject; aResultOK: Boolean); + procedure Chromium1ResourceResponse(Sender: TObject; + const browser: ICefBrowser; const frame: ICefFrame; + const request: ICefRequest; const response: ICefResponse; + out Result: Boolean); protected - FText : string; + FResponse : string; procedure AddURL(const aURL : string); @@ -177,8 +172,7 @@ type procedure ShowDevToolsMsg(var aMessage : TMessage); message MINIBROWSER_SHOWDEVTOOLS; procedure HideDevToolsMsg(var aMessage : TMessage); message MINIBROWSER_HIDEDEVTOOLS; procedure CopyHTMLMsg(var aMessage : TMessage); message MINIBROWSER_COPYHTML; - procedure VisitDOMMsg(var aMessage : TMessage); message MINIBROWSER_VISITDOM; - procedure ShowTextViewerMsg(var aMessage : TMessage); message MINIBROWSER_SHOWTEXTVIEWER; + procedure ShowResponseMsg(var aMessage : TMessage); message MINIBROWSER_SHOWRESPONSE; procedure WMMove(var aMessage : TWMMove); message WM_MOVE; procedure WMMoving(var aMessage : TMessage); message WM_MOVING; @@ -195,7 +189,7 @@ implementation {$R *.dfm} uses - uPreferences, uCEFProcessMessage, uCEFSchemeHandlerFactory, uHelloScheme, uSimpleTextViewer; + uPreferences; procedure TMiniBrowserFrm.BackBtnClick(Sender: TObject); begin @@ -239,15 +233,10 @@ procedure TMiniBrowserFrm.Chromium1BeforeContextMenu(Sender: TObject; const params: ICefContextMenuParams; const model: ICefMenuModel); begin model.AddSeparator; - model.AddItem(MINIBROWSER_CONTEXTMENU_SHOWJSALERT, 'Show JS Alert'); - model.AddItem(MINIBROWSER_CONTEXTMENU_SETJSEVENT, 'Set mouseover event'); - model.AddItem(MINIBROWSER_CONTEXTMENU_COPYHTML, 'Copy HTML to clipboard'); - model.AddItem(MINIBROWSER_CONTEXTMENU_VISITDOM, 'Visit DOM in CEF'); - model.AddItem(MINIBROWSER_CONTEXTMENU_JSVISITDOM, 'Visit DOM in JavaScript'); - model.AddItem(MINIBROWSER_CONTEXTMENU_JSWRITEDOC, 'Modify HTML document'); - model.AddItem(MINIBROWSER_CONTEXTMENU_JSPRINTDOC, 'Print using Javascript'); - model.AddItem(MINIBROWSER_CONTEXTMENU_REGSCHEME, 'Register scheme'); - model.AddItem(MINIBROWSER_CONTEXTMENU_CLEARFACT, 'Clear schemes'); + model.AddItem(MINIBROWSER_CONTEXTMENU_COPYHTML, 'Copy HTML to clipboard'); + model.AddItem(MINIBROWSER_CONTEXTMENU_JSWRITEDOC, 'Modify HTML document'); + model.AddItem(MINIBROWSER_CONTEXTMENU_JSPRINTDOC, 'Print using Javascript'); + model.AddItem(MINIBROWSER_CONTEXTMENU_SHOWRESPONSE, 'Show last server response'); if DevTools.Visible then model.AddItem(MINIBROWSER_CONTEXTMENU_HIDEDEVTOOLS, 'Hide DevTools') @@ -261,7 +250,6 @@ procedure TMiniBrowserFrm.Chromium1ContextMenuCommand(Sender: TObject; eventFlags: Cardinal; out Result: Boolean); var TempParam : WParam; - TempFactory: ICefSchemeHandlerFactory; begin Result := False; @@ -275,34 +263,11 @@ begin PostMessage(Handle, MINIBROWSER_SHOWDEVTOOLS, TempParam, 0); end; - MINIBROWSER_CONTEXTMENU_SHOWJSALERT : - if (browser <> nil) and (browser.MainFrame <> nil) then - browser.MainFrame.ExecuteJavaScript('alert(''JavaScript execute works!'');', 'about:blank', 0); - - MINIBROWSER_CONTEXTMENU_SETJSEVENT : - if (browser <> nil) and (browser.MainFrame <> nil) then - browser.MainFrame.ExecuteJavaScript( - 'document.body.addEventListener("mouseover", function(evt){'+ - 'function getpath(n){'+ - 'var ret = "<" + n.nodeName + ">";'+ - 'if (n.parentNode){return getpath(n.parentNode) + ret} else '+ - 'return ret'+ - '};'+ - 'myextension.mouseover(getpath(evt.target))}'+ - ')', 'about:blank', 0); - MINIBROWSER_CONTEXTMENU_COPYHTML : PostMessage(Handle, MINIBROWSER_COPYHTML, 0, 0); - MINIBROWSER_CONTEXTMENU_VISITDOM : - PostMessage(Handle, MINIBROWSER_VISITDOM, 0, 0); - - MINIBROWSER_CONTEXTMENU_JSVISITDOM : - if (browser <> nil) and (browser.MainFrame <> nil) then - browser.MainFrame.ExecuteJavaScript( - 'var testhtml = document.body.innerHTML;' + - 'myextension.sendresulttobrowser(testhtml, ''customname'');', - 'about:blank', 0); + MINIBROWSER_CONTEXTMENU_SHOWRESPONSE : + PostMessage(Handle, MINIBROWSER_SHOWRESPONSE, 0, 0); MINIBROWSER_CONTEXTMENU_JSWRITEDOC : if (browser <> nil) and (browser.MainFrame <> nil) then @@ -317,26 +282,6 @@ begin MINIBROWSER_CONTEXTMENU_JSPRINTDOC : if (browser <> nil) and (browser.MainFrame <> nil) then browser.MainFrame.ExecuteJavaScript('window.print();', 'about:blank', 0); - - MINIBROWSER_CONTEXTMENU_REGSCHEME : - if (browser <> nil) and - (browser.host <> nil) and - (browser.host.RequestContext <> nil) then - begin - // You can register the Scheme Handler Factory in the DPR file or later, for example in a context menu command. - TempFactory := TCefSchemeHandlerFactoryOwn.Create(THelloScheme); - if not(browser.host.RequestContext.RegisterSchemeHandlerFactory('hello', '', TempFactory)) then - MessageDlg('RegisterSchemeHandlerFactory error !', mtError, [mbOk], 0); - end; - - MINIBROWSER_CONTEXTMENU_CLEARFACT : - if (browser <> nil) and - (browser.host <> nil) and - (browser.host.RequestContext <> nil) then - begin - if not(browser.host.RequestContext.ClearSchemeHandlerFactories) then - MessageDlg('ClearSchemeHandlerFactories error !', mtError, [mbOk], 0); - end; end; end; @@ -463,35 +408,17 @@ begin isKeyboardShortcut := True; end; -procedure TMiniBrowserFrm.Chromium1ProcessMessageReceived(Sender: TObject; - const browser: ICefBrowser; sourceProcess: TCefProcessId; - const message: ICefProcessMessage; out Result: Boolean); +procedure TMiniBrowserFrm.Chromium1ResourceResponse(Sender: TObject; + const browser: ICefBrowser; const frame: ICefFrame; + const request: ICefRequest; const response: ICefResponse; + out Result: Boolean); begin - if (message = nil) or (message.ArgumentList = nil) then exit; + Result := False; - if (message.Name = 'mouseover') then - begin - // Message received from the extension - ShowStatusText(message.ArgumentList.GetString(0)); - Result := True; - end - else - if (message.Name = 'domvisitor') then - begin - // Message received from the DOMVISITOR in CEF - ShowStatusText(message.ArgumentList.GetString(0)); - Result := True; - end - else - if (message.Name = 'customname') then - begin - // Message received from the Javascript DOM visitor - FText := message.ArgumentList.GetString(0); - PostMessage(Handle, MINIBROWSER_SHOWTEXTVIEWER, 0, 0); - Result := True; - end - else - Result := False; + if (frame <> nil) and frame.IsMain and (response <> nil) and (request <> nil) then + FResponse := 'URL : ' + request.Url + #13 + #10 + + 'Status : ' + inttostr(response.Status) + #13 + #10 + + 'MimeType : ' + response.MimeType; end; procedure TMiniBrowserFrm.ShowStatusText(const aText : string); @@ -628,20 +555,9 @@ begin Chromium1.RetrieveHTML; end; -procedure TMiniBrowserFrm.VisitDOMMsg(var aMessage : TMessage); -var - TempMsg : ICefProcessMessage; +procedure TMiniBrowserFrm.ShowResponseMsg(var aMessage : TMessage); begin - // Only works using a TCefCustomRenderProcessHandler. - // Use the ArgumentList property if you need to pass some parameters. - TempMsg := TCefProcessMessageRef.New('retrievedom'); // Same name than TCefCustomRenderProcessHandler.MessageName - Chromium1.SendProcessMessage(PID_RENDERER, TempMsg); -end; - -procedure TMiniBrowserFrm.ShowTextViewerMsg(var aMessage : TMessage); -begin - SimpleTextViewerFrm.Memo1.Lines.Text := FText; - SimpleTextViewerFrm.ShowModal; + if (length(FResponse) > 0) then MessageDlg(FResponse, mtInformation, [mbOk], 0); end; procedure TMiniBrowserFrm.WMMove(var aMessage : TWMMove); diff --git a/demos/SchemeRegistrationBrowser/00-DeleteDCUs.bat b/demos/SchemeRegistrationBrowser/00-DeleteDCUs.bat new file mode 100644 index 00000000..76dedadd --- /dev/null +++ b/demos/SchemeRegistrationBrowser/00-DeleteDCUs.bat @@ -0,0 +1,8 @@ +del /s /q *.dcu +del /s /q *.dcp +del /s /q *.bpl +del /s /q *.bpi +del /s /q *.hpp +del /s /q *.exe +del /s /q *.log +del /s /q *.~* diff --git a/demos/SchemeRegistrationBrowser/SchemeRegistrationBrowser.dpr b/demos/SchemeRegistrationBrowser/SchemeRegistrationBrowser.dpr new file mode 100644 index 00000000..6191cc13 --- /dev/null +++ b/demos/SchemeRegistrationBrowser/SchemeRegistrationBrowser.dpr @@ -0,0 +1,93 @@ +// ************************************************************************ +// ***************************** CEF4Delphi ******************************* +// ************************************************************************ +// +// CEF4Delphi is based on DCEF3 which uses CEF3 to embed a chromium-based +// browser in Delphi applications. +// +// The original license of DCEF3 still applies to CEF4Delphi. +// +// For more information about CEF4Delphi visit : +// https://www.briskbard.com/index.php?lang=en&pageid=cef +// +// Copyright © 2017 Salvador Díaz Fau. All rights reserved. +// +// ************************************************************************ +// ************ vvvv Original license and comments below vvvv ************* +// ************************************************************************ +(* + * Delphi Chromium Embedded 3 + * + * Usage allowed under the restrictions of the Lesser GNU General Public License + * or alternatively the restrictions of the Mozilla Public License 1.1 + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for + * the specific language governing rights and limitations under the License. + * + * Unit owner : Henri Gourvest + * 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 SchemeRegistrationBrowser; + +{$I cef.inc} + +uses + {$IFDEF DELPHI16_UP} + Vcl.Forms, + WinApi.Windows, + {$ELSE} + Forms, + Windows, + {$ENDIF } + uCEFApplication, + uCEFSchemeRegistrar, + uCEFMiscFunctions, + uSchemeRegistrationBrowser in 'uSchemeRegistrationBrowser.pas' {SchemeRegistrationBrowserFrm}, + uHelloScheme in 'uHelloScheme.pas'; + +{$R *.res} + +// CEF3 needs to set the LARGEADDRESSAWARE flag which allows 32-bit processes to use up to 3GB of RAM. +{$SetPEFlags IMAGE_FILE_LARGE_ADDRESS_AWARE} + + +procedure GlobalCEFApp_OnRegCustomSchemes(const registrar: TCefSchemeRegistrarRef); +begin + registrar.AddCustomScheme('hello', True, True, False, False, False, False); +end; + +begin + GlobalCEFApp := TCefApplication.Create; + GlobalCEFApp.OnRegCustomSchemes := GlobalCEFApp_OnRegCustomSchemes; + + // In case you want to use custom directories for the CEF3 binaries, cache, cookies and user data. +{ + GlobalCEFApp.FrameworkDirPath := 'cef'; + GlobalCEFApp.ResourcesDirPath := 'cef'; + GlobalCEFApp.LocalesDirPath := 'cef\locales'; + GlobalCEFApp.cache := 'cef\cache'; + GlobalCEFApp.cookies := 'cef\cookies'; + GlobalCEFApp.UserDataPath := 'cef\User Data'; +} + + if GlobalCEFApp.StartMainProcess then + begin + // You can register the Scheme Handler Factory here or later, for example in a context menu command. + CefRegisterSchemeHandlerFactory('hello', '', THelloScheme); + + Application.Initialize; + Application.MainFormOnTaskbar := True; + Application.CreateForm(TSchemeRegistrationBrowserFrm, SchemeRegistrationBrowserFrm); + Application.Run; + end; + + GlobalCEFApp.Free; +end. diff --git a/demos/SchemeRegistrationBrowser/SchemeRegistrationBrowser.dproj b/demos/SchemeRegistrationBrowser/SchemeRegistrationBrowser.dproj new file mode 100644 index 00000000..ce8cf929 --- /dev/null +++ b/demos/SchemeRegistrationBrowser/SchemeRegistrationBrowser.dproj @@ -0,0 +1,538 @@ + + + {E4FB7CE5-4480-4F6C-B04A-7030C7021934} + 18.0 + VCL + SchemeRegistrationBrowser.dpr + True + Debug + Win32 + 1 + Application + + + true + + + true + Base + true + + + true + Base + true + + + true + Base + true + + + true + Cfg_1 + true + true + + + true + Base + true + + + true + Cfg_2 + true + true + + + SchemeRegistrationBrowser + System;Xml;Data;Datasnap;Web;Soap;Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;$(DCC_Namespace) + CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments= + $(BDS)\bin\delphi_PROJECTICON.ico + 3082 + .\$(Platform)\$(Config) + false + false + false + false + false + + + $(BDS)\bin\default_app.manifest + true + CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments= + 1033 + 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;GR32_DSGN_RSXE5;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;GR32_RSXE5;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) + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) + + + 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) + + + DEBUG;$(DCC_Define) + true + false + true + true + true + + + true + true + 1033 + true + false + + + false + RELEASE;$(DCC_Define) + 0 + 0 + + + true + true + + + + MainSource + + +
SchemeRegistrationBrowserFrm
+ dfm +
+ + + Cfg_2 + Base + + + Base + + + Cfg_1 + Base + +
+ + Delphi.Personality.12 + Application + + + + SchemeRegistrationBrowser.dpr + + + Microsoft Office 2000 Sample Automation Server Wrapper Components + Microsoft Office XP Sample Automation Server Wrapper Components + + + + + + SchemeRegistrationBrowser.exe + true + + + + + 1 + + + 1 + + + + + Contents\Resources + 1 + + + + + classes + 1 + + + + + Contents\MacOS + 0 + + + 1 + + + Contents\MacOS + 1 + + + + + 1 + + + 1 + + + 1 + + + + + res\drawable-xxhdpi + 1 + + + + + library\lib\mips + 1 + + + + + 0 + + + 1 + + + Contents\MacOS + 1 + + + 1 + + + library\lib\armeabi-v7a + 1 + + + 1 + + + + + 0 + + + Contents\MacOS + 1 + .framework + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + ..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF + 1 + + + + + library\lib\x86 + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + 1 + + + 1 + + + + + library\lib\armeabi + 1 + + + + + 0 + + + 1 + + + Contents\MacOS + 1 + + + + + 1 + + + 1 + + + 1 + + + + + res\drawable-normal + 1 + + + + + res\drawable-xhdpi + 1 + + + + + res\drawable-large + 1 + + + + + 1 + + + 1 + + + 1 + + + + + ../ + 1 + + + ../ + 1 + + + + + res\drawable-hdpi + 1 + + + + + library\lib\armeabi-v7a + 1 + + + + + Contents + 1 + + + + + ../ + 1 + + + + + 1 + + + 1 + + + 1 + + + + + res\values + 1 + + + + + res\drawable-small + 1 + + + + + res\drawable + 1 + + + + + 1 + + + 1 + + + 1 + + + + + 1 + + + + + res\drawable + 1 + + + + + 0 + + + 0 + + + Contents\Resources\StartUp\ + 0 + + + 0 + + + 0 + + + 0 + + + + + library\lib\armeabi-v7a + 1 + + + + + 0 + .bpl + + + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + 1 + .dylib + + + 1 + .dylib + + + + + res\drawable-mdpi + 1 + + + + + res\drawable-xlarge + 1 + + + + + res\drawable-ldpi + 1 + + + + + 0 + .dll;.bpl + + + 1 + .dylib + + + Contents\MacOS + 1 + .dylib + + + 1 + .dylib + + + 1 + .dylib + + + + + + + + + + + + True + False + + + 12 + + + + +
diff --git a/demos/SchemeRegistrationBrowser/SchemeRegistrationBrowser.dproj.local b/demos/SchemeRegistrationBrowser/SchemeRegistrationBrowser.dproj.local new file mode 100644 index 00000000..187cb5db --- /dev/null +++ b/demos/SchemeRegistrationBrowser/SchemeRegistrationBrowser.dproj.local @@ -0,0 +1,10 @@ + + + + 2017/08/12 11:25:15.000.051,=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\Unit1.pas + 2017/08/12 11:26:00.000.707,C:\Users\usuario\Documents\Embarcadero\Studio\Projects\Unit1.pas=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\SchemeRegistrationBrowser\uSchemeRegistrationBrowser.pas + 2017/08/12 11:26:00.000.707,C:\Users\usuario\Documents\Embarcadero\Studio\Projects\Unit1.dfm=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\SchemeRegistrationBrowser\uSchemeRegistrationBrowser.dfm + 2017/08/12 11:26:06.000.294,C:\Users\usuario\Documents\Embarcadero\Studio\Projects\Project1.dproj=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\SchemeRegistrationBrowser\SchemeRegistrationBrowser.dproj + 2017/08/12 11:27:56.000.909,=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\SchemeRegistrationBrowser\uHelloScheme.pas + + diff --git a/demos/SchemeRegistrationBrowser/SchemeRegistrationBrowser.dsk b/demos/SchemeRegistrationBrowser/SchemeRegistrationBrowser.dsk new file mode 100644 index 00000000..b8c9d96f --- /dev/null +++ b/demos/SchemeRegistrationBrowser/SchemeRegistrationBrowser.dsk @@ -0,0 +1,768 @@ +[Closed Files] +File_0=TSourceModule,'C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\SchemeRegistrationBrowser\uHelloScheme.pas',0,1,88,1,1,0,0,, +File_1=TSourceModule,'C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\CustomResourceBrowser\uMainForm.pas',0,1,1,1,1,0,0,, +File_2=TSourceModule,'C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\MiniBrowser\uMiniBrowser.pas',0,1,460,3,478,0,0,, +File_3=TSourceModule,'C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\JSExtension\uJSExtension.pas',0,1,154,79,172,0,0,, +File_4=TSourceModule,'C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\source\uCEFChromium.pas',0,1,1075,38,1089,0,0,, +File_5=TSourceModule,'C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\source\uCEFPDFPrintCallback.pas',0,1,78,80,113,0,0,, +File_6=TSourceModule,'C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\source\uCEFInterfaces.pas',0,1,120,3,143,0,0,, +File_7=TSourceModule,'C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\source\uCEFTypes.pas',0,1,1704,3,1727,0,0,, +File_8=TSourceModule,'C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\source\uCEFTask.pas',0,1,156,3,83,0,0,, + +[Modules] +Module0=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\SchemeRegistrationBrowser\SchemeRegistrationBrowser.dproj +Module1=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\SchemeRegistrationBrowser\uSchemeRegistrationBrowser.pas +Module2=default.htm +Count=3 +EditWindowCount=1 + +[C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\SchemeRegistrationBrowser\SchemeRegistrationBrowser.dproj] +ModuleType=TBaseProject + +[C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\SchemeRegistrationBrowser\uSchemeRegistrationBrowser.pas] +ModuleType=TSourceModule +FormState=1 +FormOnTop=0 + +[default.htm] +ModuleType=TURLModule + +[EditWindow0] +ViewCount=3 +CurrentEditView=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\SchemeRegistrationBrowser\SchemeRegistrationBrowser.dpr +View0=0 +View1=1 +View2=2 +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=0 +Width=10000 +Height=9428 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=10000 +ClientHeight=9428 +DockedToMainForm=1 +BorlandEditorCodeExplorer=BorlandEditorCodeExplorer@EditWindow0 +TopPanelSize=0 +LeftPanelSize=0 +RightPanelSize=2008 +RightPanelClients=DockSite2,DockSite4 +RightPanelData=00000800010100000000AA1900000000000001D80700000000000001000000004312000009000000446F636B53697465320100000000A123000009000000446F636B5369746534FFFFFFFF +BottomPanelSize=0 +BottomPanelClients=DockSite1,MessageView +BottomPanelData=0000080001020200000009000000446F636B53697465310F0000004D65737361676556696577466F726D3B36000000000000025B06000000000000FFFFFFFF +BottomMiddlePanelSize=0 +BottomMiddlePanelClients=DockSite0,GraphDrawingModel +BottomMiddelPanelData=0000080001020200000009000000446F636B536974653010000000477261706844726177696E67566965779D1D00000000000002F306000000000000FFFFFFFF +TabDockLeftClients=DockSite3=0,PropertyInspector=1 + +[View0] +CustomEditViewType=TWelcomePageView +WelcomePageURL=bds:/default.htm + +[View1] +CustomEditViewType=TEditView +Module=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\SchemeRegistrationBrowser\SchemeRegistrationBrowser.dpr +CursorX=1 +CursorY=80 +TopLine=52 +LeftCol=1 +Elisions= +Bookmarks= +EditViewName=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\SchemeRegistrationBrowser\SchemeRegistrationBrowser.dpr + +[View2] +CustomEditViewType=TEditView +Module=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\SchemeRegistrationBrowser\uSchemeRegistrationBrowser.pas +CursorX=90 +CursorY=154 +TopLine=125 +LeftCol=1 +Elisions= +Bookmarks= +EditViewName=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\SchemeRegistrationBrowser\uSchemeRegistrationBrowser.pas + +[Watches] +Count=0 + +[WatchWindow] +WatchColumnWidth=120 +WatchShowColumnHeaders=1 +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=0 +Width=3820 +Height=2377 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=3820 +ClientHeight=2377 +TBDockHeight=213 +LRDockWidth=13602 +Dockable=1 +StayOnTop=0 + +[Breakpoints] +Count=0 + +[EmbarcaderoWin32Debugger_AddressBreakpoints] +Count=0 + +[EmbarcaderoWin64Debugger_AddressBreakpoints] +Count=0 + +[Main Window] +PercentageSizes=1 +Create=1 +Visible=1 +Docked=0 +State=2 +Left=148 +Top=269 +Width=8930 +Height=8520 +MaxLeft=-8 +MaxTop=-11 +MaxWidth=8930 +MaxHeight=8520 +ClientWidth=10000 +ClientHeight=9753 +BottomPanelSize=9121 +BottomPanelClients=EditWindow0 +BottomPanelData=0000080000000000000000000000000000000000000000000000000100000000000000000C0000004564697457696E646F775F30FFFFFFFF + +[ProjectManager] +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=0 +Width=2008 +Height=4226 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=2008 +ClientHeight=4226 +TBDockHeight=5897 +LRDockWidth=2352 +Dockable=1 +StayOnTop=0 + +[MessageView] +PercentageSizes=1 +Create=1 +Visible=0 +Docked=1 +State=0 +Left=0 +Top=23 +Width=2773 +Height=1424 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=2773 +ClientHeight=1424 +TBDockHeight=1424 +LRDockWidth=2773 +Dockable=1 +StayOnTop=0 + +[ToolForm] +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=0 +Width=2008 +Height=4339 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=2008 +ClientHeight=4339 +TBDockHeight=7152 +LRDockWidth=2000 +Dockable=1 +StayOnTop=0 + +[ClipboardHistory] +PercentageSizes=1 +Create=1 +Visible=0 +Docked=0 +State=0 +Left=0 +Top=0 +Width=1906 +Height=4989 +MaxLeft=-8 +MaxTop=-11 +ClientWidth=1781 +ClientHeight=4563 +TBDockHeight=4989 +LRDockWidth=1906 +Dockable=1 +StayOnTop=0 + +[ProjectStatistics] +PercentageSizes=1 +Create=1 +Visible=0 +Docked=0 +State=0 +Left=0 +Top=0 +Width=2062 +Height=5740 +MaxLeft=-8 +MaxTop=-11 +ClientWidth=1938 +ClientHeight=5314 +TBDockHeight=5740 +LRDockWidth=2062 +Dockable=1 +StayOnTop=0 + +[ClassBrowserTool] +PercentageSizes=1 +Create=1 +Visible=0 +Docked=1 +State=0 +Left=-8 +Top=-30 +Width=1844 +Height=3139 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=1844 +ClientHeight=3139 +TBDockHeight=3139 +LRDockWidth=1844 +Dockable=1 +StayOnTop=0 + +[MetricsView] +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=0 +Width=2336 +Height=1177 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=2336 +ClientHeight=1177 +TBDockHeight=4832 +LRDockWidth=3562 +Dockable=1 +StayOnTop=0 + +[QAView] +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=0 +Width=2336 +Height=1177 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=2336 +ClientHeight=1177 +TBDockHeight=4832 +LRDockWidth=3562 +Dockable=1 +StayOnTop=0 + +[PropertyInspector] +PercentageSizes=1 +Create=1 +Visible=0 +Docked=1 +State=0 +Left=78 +Top=386 +Width=1883 +Height=7164 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=1758 +ClientHeight=6738 +TBDockHeight=7164 +LRDockWidth=1883 +Dockable=1 +StayOnTop=0 +SplitPos=142 + +[PropInspDesignerSelection] +ArrangeBy=Name +SelectedItem=Caption,Action +ExpandedItems=Anchors=0,BorderIcons=0,Constraints=0,Font=0,GlassFrame=0,HorzScrollBar=0,LiveBindings=0,"LiveBindings Designer=0",Margins=0,Padding=0,StyleElements=0,Touch=0,VertScrollBar=0,BevelEdges=0 + +[frmDesignPreview] +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=0 +Width=2008 +Height=6816 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=2008 +ClientHeight=6816 +TBDockHeight=5964 +LRDockWidth=2508 +Dockable=1 +StayOnTop=0 + +[TFileExplorerForm] +PercentageSizes=1 +Create=1 +Visible=0 +Docked=1 +State=0 +Left=-945 +Top=1 +Width=2844 +Height=6200 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=2844 +ClientHeight=6200 +TBDockHeight=6200 +LRDockWidth=2844 +Dockable=1 +StayOnTop=0 + +[TemplateView] +PercentageSizes=1 +Create=1 +Visible=0 +Docked=1 +State=0 +Left=-1151 +Top=243 +Width=273 +Height=359 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=273 +ClientHeight=359 +TBDockHeight=359 +LRDockWidth=273 +Dockable=1 +StayOnTop=0 +Name=120 +Description=334 +filter=1 + +[DebugLogView] +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=0 +Width=3820 +Height=2377 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=3820 +ClientHeight=2377 +TBDockHeight=415 +LRDockWidth=4953 +Dockable=1 +StayOnTop=0 + +[ThreadStatusWindow] +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=0 +Width=3820 +Height=2377 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=3820 +ClientHeight=2377 +TBDockHeight=213 +LRDockWidth=7406 +Dockable=1 +StayOnTop=0 +Column0Width=145 +Column1Width=100 +Column2Width=115 +Column3Width=250 + +[LocalVarsWindow] +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=0 +Width=3820 +Height=2377 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=3820 +ClientHeight=2377 +TBDockHeight=1536 +LRDockWidth=3484 +Dockable=1 +StayOnTop=0 + +[CallStackWindow] +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=0 +Width=3820 +Height=2377 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=3820 +ClientHeight=2377 +TBDockHeight=2063 +LRDockWidth=3484 +Dockable=1 +StayOnTop=0 + +[FindReferencsForm] +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=0 +Width=2336 +Height=942 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=2336 +ClientHeight=942 +TBDockHeight=2321 +LRDockWidth=2820 +Dockable=1 +StayOnTop=0 + +[RefactoringForm] +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=0 +Width=2336 +Height=1177 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=2336 +ClientHeight=1177 +TBDockHeight=3206 +LRDockWidth=2820 +Dockable=1 +StayOnTop=0 + +[ToDo List] +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=0 +Width=2336 +Height=1177 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=2336 +ClientHeight=1177 +TBDockHeight=1155 +LRDockWidth=3680 +Dockable=1 +StayOnTop=0 +Column0Width=314 +Column1Width=30 +Column2Width=150 +Column3Width=172 +Column4Width=129 +SortOrder=4 +ShowHints=1 +ShowChecked=1 + +[DataExplorerContainer] +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=0 +Width=2008 +Height=6816 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=2008 +ClientHeight=6816 +TBDockHeight=4888 +LRDockWidth=7148 +Dockable=1 +StayOnTop=0 + +[GraphDrawingModel] +PercentageSizes=1 +Create=1 +Visible=0 +Docked=1 +State=0 +Left=249 +Top=709 +Width=2859 +Height=3206 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=2859 +ClientHeight=3206 +TBDockHeight=3206 +LRDockWidth=2859 +Dockable=1 +StayOnTop=0 + +[BreakpointWindow] +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=0 +Width=3820 +Height=2377 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=3820 +ClientHeight=2377 +TBDockHeight=1547 +LRDockWidth=8742 +Dockable=1 +StayOnTop=0 +Column0Width=200 +Column1Width=75 +Column2Width=200 +Column3Width=200 +Column4Width=200 +Column5Width=75 +Column6Width=75 + +[StructureView] +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=0 +Width=1773 +Height=6738 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=1773 +ClientHeight=6738 +TBDockHeight=3677 +LRDockWidth=1898 +Dockable=1 +StayOnTop=0 + +[ModelViewTool] +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=0 +Width=2008 +Height=6816 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=2008 +ClientHeight=6816 +TBDockHeight=4888 +LRDockWidth=5305 +Dockable=1 +StayOnTop=0 + +[BorlandEditorCodeExplorer@EditWindow0] +PercentageSizes=1 +Create=1 +Visible=0 +Docked=0 +State=0 +Left=0 +Top=0 +Width=1828 +Height=6177 +MaxLeft=-8 +MaxTop=-11 +ClientWidth=1703 +ClientHeight=5751 +TBDockHeight=6177 +LRDockWidth=1828 +Dockable=1 +StayOnTop=0 + +[DockHosts] +DockHostCount=5 + +[DockSite0] +HostDockSite=DockBottomCenterPanel +DockSiteType=1 +PercentageSizes=1 +Create=1 +Visible=0 +Docked=1 +State=0 +Left=0 +Top=0 +Width=2336 +Height=1480 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=2336 +ClientHeight=1480 +TBDockHeight=1480 +LRDockWidth=2336 +Dockable=1 +StayOnTop=0 +TabPosition=1 +ActiveTabID=RefactoringForm +TabDockClients=RefactoringForm,FindReferencsForm,ToDo List,MetricsView,QAView + +[DockSite1] +HostDockSite=DockBottomPanel +DockSiteType=1 +PercentageSizes=1 +Create=1 +Visible=0 +Docked=1 +State=0 +Left=0 +Top=23 +Width=3820 +Height=2679 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=3820 +ClientHeight=2679 +TBDockHeight=2679 +LRDockWidth=3820 +Dockable=1 +StayOnTop=0 +TabPosition=1 +ActiveTabID=DebugLogView +TabDockClients=DebugLogView,BreakpointWindow,ThreadStatusWindow,CallStackWindow,WatchWindow,LocalVarsWindow + +[DockSite2] +HostDockSite=DockRightPanel +DockSiteType=1 +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=23 +Width=2008 +Height=4529 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=2008 +ClientHeight=4529 +TBDockHeight=7119 +LRDockWidth=2008 +Dockable=1 +StayOnTop=0 +TabPosition=1 +ActiveTabID=ProjectManager +TabDockClients=ProjectManager,ModelViewTool,DataExplorerContainer,frmDesignPreview,TFileExplorerForm + +[DockSite3] +HostDockSite=LeftDockTabSet +DockSiteType=1 +PercentageSizes=1 +Create=1 +Visible=0 +Docked=1 +State=0 +Left=0 +Top=0 +Width=1898 +Height=7164 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=1773 +ClientHeight=6738 +TBDockHeight=7164 +LRDockWidth=1898 +Dockable=1 +StayOnTop=0 +TabPosition=1 +ActiveTabID=StructureView +TabDockClients=StructureView,ClassBrowserTool + +[DockSite4] +HostDockSite=DockRightPanel +DockSiteType=1 +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=454 +Width=2008 +Height=4339 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=2008 +ClientHeight=4339 +TBDockHeight=7119 +LRDockWidth=2008 +Dockable=1 +StayOnTop=0 +TabPosition=1 +ActiveTabID=ToolForm +TabDockClients=ToolForm,TemplateView + diff --git a/demos/SchemeRegistrationBrowser/SchemeRegistrationBrowser.identcache b/demos/SchemeRegistrationBrowser/SchemeRegistrationBrowser.identcache new file mode 100644 index 0000000000000000000000000000000000000000..0a46b82cdd4768dc87e4a697d7ae39d067199801 GIT binary patch literal 413 zcmchTF$=;l5QQWDA15bA+lr%D+-^CO!$y)`xJz)?OO_I@Zc!2LT?9(bft&aESNoy lN8wjZhO&ru3AIX0Cx4JRQwaPsn%BSAuV0?RC7E`p&lmkMlRW?c literal 0 HcmV?d00001 diff --git a/demos/SchemeRegistrationBrowser/SchemeRegistrationBrowser.res b/demos/SchemeRegistrationBrowser/SchemeRegistrationBrowser.res new file mode 100644 index 0000000000000000000000000000000000000000..20ba553086005b9f4e8e7a6bee3fe14bfc0a7654 GIT binary patch literal 58468 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 L{#(}nNdNx>?6uf> literal 0 HcmV?d00001 diff --git a/demos/SchemeRegistrationBrowser/SchemeRegistrationBrowser.stat b/demos/SchemeRegistrationBrowser/SchemeRegistrationBrowser.stat new file mode 100644 index 00000000..2b87083b --- /dev/null +++ b/demos/SchemeRegistrationBrowser/SchemeRegistrationBrowser.stat @@ -0,0 +1,10 @@ +[Stats] +EditorSecs=61 +DesignerSecs=6 +InspectorSecs=1 +CompileSecs=1 +OtherSecs=4 +StartTime=12/08/2017 16:06:01 +RealKeys=0 +EffectiveKeys=0 +DebugSecs=1 diff --git a/demos/SchemeRegistrationBrowser/cef.inc b/demos/SchemeRegistrationBrowser/cef.inc new file mode 100644 index 00000000..984ae795 --- /dev/null +++ b/demos/SchemeRegistrationBrowser/cef.inc @@ -0,0 +1,384 @@ +// ************************************************************************ +// ***************************** CEF4Delphi ******************************* +// ************************************************************************ +// +// CEF4Delphi is based on DCEF3 which uses CEF3 to embed a chromium-based +// browser in Delphi applications. +// +// The original license of DCEF3 still applies to CEF4Delphi. +// +// For more information about CEF4Delphi visit : +// https://www.briskbard.com/index.php?lang=en&pageid=cef +// +// Copyright © 2017 Salvador Díaz Fau. All rights reserved. +// +// ************************************************************************ +// ************ vvvv Original license and comments below vvvv ************* +// ************************************************************************ +(* + * Delphi Chromium Embedded 3 + * + * Usage allowed under the restrictions of the Lesser GNU General Public License + * or alternatively the restrictions of the Mozilla Public License 1.1 + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for + * the specific language governing rights and limitations under the License. + * + * Unit owner : Henri Gourvest + * Web site : http://www.progdigy.com + * Repository : http://code.google.com/p/delphichromiumembedded/ + * Group : http://groups.google.com/group/delphichromiumembedded + * + * Embarcadero Technologies, Inc is not permitted to use or redistribute + * this source code without explicit permission. + * + *) + + // The complete list of compiler versions is here : + // http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Compiler_Versions + +{$DEFINE DELPHI_VERSION_UNKNOW} + +{$IFDEF FPC} + {$DEFINE CEF_MULTI_THREADED_MESSAGE_LOOP} + {$DEFINE SUPPORTS_INLINE} +{$ENDIF} + +// Delphi 5 +{$IFDEF VER130} + {$UNDEF DELPHI_VERSION_UNKNOW} + {$DEFINE DELPHI5_UP} +{$ENDIF} + +// Delphi 6 +{$IFDEF VER140} + {$UNDEF DELPHI_VERSION_UNKNOW} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI6_UP} +{$ENDIF} + +// Delphi 7 +{$IFDEF VER150} + {$UNDEF DELPHI_VERSION_UNKNOW} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI6_UP} + {$DEFINE DELPHI7_UP} +{$ENDIF} + +// Delphi 8 +{$IFDEF VER160} + {$UNDEF DELPHI_VERSION_UNKNOW} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI6_UP} + {$DEFINE DELPHI7_UP} + {$DEFINE DELPHI8_UP} +{$ENDIF} + +// Delphi 2005 +{$IFDEF VER170} + {$UNDEF DELPHI_VERSION_UNKNOW} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI6_UP} + {$DEFINE DELPHI7_UP} + {$DEFINE DELPHI8_UP} + {$DEFINE DELPHI9_UP} +{$ENDIF} + +{$IFDEF VER180} + {$UNDEF DELPHI_VERSION_UNKNOW} + // Delphi 2007 + {$IFDEF VER185} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI6_UP} + {$DEFINE DELPHI7_UP} + {$DEFINE DELPHI8_UP} + {$DEFINE DELPHI9_UP} + {$DEFINE DELPHI10_UP} + {$DEFINE DELPHI11_UP} + // Delphi 2006 + {$ELSE} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI6_UP} + {$DEFINE DELPHI7_UP} + {$DEFINE DELPHI8_UP} + {$DEFINE DELPHI9_UP} + {$DEFINE DELPHI10_UP} + {$ENDIF} +{$ENDIF} + +// Delphi 2009 +{$IFDEF VER200} + {$UNDEF DELPHI_VERSION_UNKNOW} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI6_UP} + {$DEFINE DELPHI7_UP} + {$DEFINE DELPHI8_UP} + {$DEFINE DELPHI9_UP} + {$DEFINE DELPHI10_UP} + {$DEFINE DELPHI11_UP} + {$DEFINE DELPHI12_UP} +{$ENDIF} + +//Delphi 2010 +{$IFDEF VER210} + {$UNDEF DELPHI_VERSION_UNKNOW} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI6_UP} + {$DEFINE DELPHI7_UP} + {$DEFINE DELPHI8_UP} + {$DEFINE DELPHI9_UP} + {$DEFINE DELPHI10_UP} + {$DEFINE DELPHI11_UP} + {$DEFINE DELPHI12_UP} + {$DEFINE DELPHI14_UP} +{$ENDIF} + +// Delphi XE +{$IFDEF VER220} + {$UNDEF DELPHI_VERSION_UNKNOW} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI6_UP} + {$DEFINE DELPHI7_UP} + {$DEFINE DELPHI8_UP} + {$DEFINE DELPHI9_UP} + {$DEFINE DELPHI10_UP} + {$DEFINE DELPHI11_UP} + {$DEFINE DELPHI12_UP} + {$DEFINE DELPHI14_UP} + {$DEFINE DELPHI15_UP} +{$ENDIF} + +// Delphi XE2 +{$IFDEF VER230} + {$UNDEF DELPHI_VERSION_UNKNOW} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI6_UP} + {$DEFINE DELPHI7_UP} + {$DEFINE DELPHI8_UP} + {$DEFINE DELPHI9_UP} + {$DEFINE DELPHI10_UP} + {$DEFINE DELPHI11_UP} + {$DEFINE DELPHI12_UP} + {$DEFINE DELPHI14_UP} + {$DEFINE DELPHI15_UP} + {$DEFINE DELPHI16_UP} +{$ENDIF} + +// Delphi XE3 +{$IFDEF VER240} + {$UNDEF DELPHI_VERSION_UNKNOW} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI6_UP} + {$DEFINE DELPHI7_UP} + {$DEFINE DELPHI8_UP} + {$DEFINE DELPHI9_UP} + {$DEFINE DELPHI10_UP} + {$DEFINE DELPHI11_UP} + {$DEFINE DELPHI12_UP} + {$DEFINE DELPHI14_UP} + {$DEFINE DELPHI15_UP} + {$DEFINE DELPHI16_UP} + {$DEFINE DELPHI17_UP} +{$ENDIF} + +// Delphi XE4 +{$IFDEF VER250} + {$UNDEF DELPHI_VERSION_UNKNOW} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI6_UP} + {$DEFINE DELPHI7_UP} + {$DEFINE DELPHI8_UP} + {$DEFINE DELPHI9_UP} + {$DEFINE DELPHI10_UP} + {$DEFINE DELPHI11_UP} + {$DEFINE DELPHI12_UP} + {$DEFINE DELPHI14_UP} + {$DEFINE DELPHI15_UP} + {$DEFINE DELPHI16_UP} + {$DEFINE DELPHI17_UP} + {$DEFINE DELPHI18_UP} +{$ENDIF} + +// Delphi XE5 +{$IFDEF VER260} + {$UNDEF DELPHI_VERSION_UNKNOW} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI6_UP} + {$DEFINE DELPHI7_UP} + {$DEFINE DELPHI8_UP} + {$DEFINE DELPHI9_UP} + {$DEFINE DELPHI10_UP} + {$DEFINE DELPHI11_UP} + {$DEFINE DELPHI12_UP} + {$DEFINE DELPHI14_UP} + {$DEFINE DELPHI15_UP} + {$DEFINE DELPHI16_UP} + {$DEFINE DELPHI17_UP} + {$DEFINE DELPHI18_UP} + {$DEFINE DELPHI19_UP} +{$ENDIF} + +// Delphi XE6 +{$IFDEF VER270} + {$UNDEF DELPHI_VERSION_UNKNOW} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI6_UP} + {$DEFINE DELPHI7_UP} + {$DEFINE DELPHI8_UP} + {$DEFINE DELPHI9_UP} + {$DEFINE DELPHI10_UP} + {$DEFINE DELPHI11_UP} + {$DEFINE DELPHI12_UP} + {$DEFINE DELPHI14_UP} + {$DEFINE DELPHI15_UP} + {$DEFINE DELPHI16_UP} + {$DEFINE DELPHI17_UP} + {$DEFINE DELPHI18_UP} + {$DEFINE DELPHI19_UP} + {$DEFINE DELPHI20_UP} +{$ENDIF} + +// Delphi XE7 +{$IFDEF VER280} + {$UNDEF DELPHI_VERSION_UNKNOW} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI6_UP} + {$DEFINE DELPHI7_UP} + {$DEFINE DELPHI8_UP} + {$DEFINE DELPHI9_UP} + {$DEFINE DELPHI10_UP} + {$DEFINE DELPHI11_UP} + {$DEFINE DELPHI12_UP} + {$DEFINE DELPHI14_UP} + {$DEFINE DELPHI15_UP} + {$DEFINE DELPHI16_UP} + {$DEFINE DELPHI17_UP} + {$DEFINE DELPHI18_UP} + {$DEFINE DELPHI19_UP} + {$DEFINE DELPHI20_UP} + {$DEFINE DELPHI21_UP} +{$ENDIF} + +// Delphi XE8 +{$IFDEF VER290} + {$UNDEF DELPHI_VERSION_UNKNOW} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI6_UP} + {$DEFINE DELPHI7_UP} + {$DEFINE DELPHI8_UP} + {$DEFINE DELPHI9_UP} + {$DEFINE DELPHI10_UP} + {$DEFINE DELPHI11_UP} + {$DEFINE DELPHI12_UP} + {$DEFINE DELPHI14_UP} + {$DEFINE DELPHI15_UP} + {$DEFINE DELPHI16_UP} + {$DEFINE DELPHI17_UP} + {$DEFINE DELPHI18_UP} + {$DEFINE DELPHI19_UP} + {$DEFINE DELPHI20_UP} + {$DEFINE DELPHI21_UP} + {$DEFINE DELPHI22_UP} +{$ENDIF VER290} + +// Rad Studio 10 - Delphi Seattle +{$IFDEF VER300} + {$UNDEF DELPHI_VERSION_UNKNOW} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI6_UP} + {$DEFINE DELPHI7_UP} + {$DEFINE DELPHI8_UP} + {$DEFINE DELPHI9_UP} + {$DEFINE DELPHI10_UP} + {$DEFINE DELPHI11_UP} + {$DEFINE DELPHI12_UP} + {$DEFINE DELPHI14_UP} + {$DEFINE DELPHI15_UP} + {$DEFINE DELPHI16_UP} + {$DEFINE DELPHI17_UP} + {$DEFINE DELPHI18_UP} + {$DEFINE DELPHI19_UP} + {$DEFINE DELPHI20_UP} + {$DEFINE DELPHI21_UP} + {$DEFINE DELPHI22_UP} + {$DEFINE DELPHI23_UP} +{$ENDIF} + +// Rad Studio 10.1 - Delphi Berlin +{$IFDEF VER310} + {$UNDEF DELPHI_VERSION_UNKNOW} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI6_UP} + {$DEFINE DELPHI7_UP} + {$DEFINE DELPHI8_UP} + {$DEFINE DELPHI9_UP} + {$DEFINE DELPHI10_UP} + {$DEFINE DELPHI11_UP} + {$DEFINE DELPHI12_UP} + {$DEFINE DELPHI14_UP} + {$DEFINE DELPHI15_UP} + {$DEFINE DELPHI16_UP} + {$DEFINE DELPHI17_UP} + {$DEFINE DELPHI18_UP} + {$DEFINE DELPHI19_UP} + {$DEFINE DELPHI20_UP} + {$DEFINE DELPHI21_UP} + {$DEFINE DELPHI22_UP} + {$DEFINE DELPHI23_UP} + {$DEFINE DELPHI24_UP} +{$ENDIF} + +// Rad Studio 10.2 - Delphi Tokyo +{$IFDEF VER320} + {$UNDEF DELPHI_VERSION_UNKNOW} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI6_UP} + {$DEFINE DELPHI7_UP} + {$DEFINE DELPHI8_UP} + {$DEFINE DELPHI9_UP} + {$DEFINE DELPHI10_UP} + {$DEFINE DELPHI11_UP} + {$DEFINE DELPHI12_UP} + {$DEFINE DELPHI14_UP} + {$DEFINE DELPHI15_UP} + {$DEFINE DELPHI16_UP} + {$DEFINE DELPHI17_UP} + {$DEFINE DELPHI18_UP} + {$DEFINE DELPHI19_UP} + {$DEFINE DELPHI20_UP} + {$DEFINE DELPHI21_UP} + {$DEFINE DELPHI22_UP} + {$DEFINE DELPHI23_UP} + {$DEFINE DELPHI24_UP} + {$DEFINE DELPHI25_UP} +{$ENDIF} + + +{$IFDEF DELPHI_VERSION_UNKNOW} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI6_UP} + {$DEFINE DELPHI7_UP} + {$DEFINE DELPHI8_UP} + {$DEFINE DELPHI9_UP} + {$DEFINE DELPHI10_UP} + {$DEFINE DELPHI11_UP} + {$DEFINE DELPHI12_UP} + {$DEFINE DELPHI14_UP} + {$DEFINE DELPHI15_UP} + {$DEFINE DELPHI16_UP} + {$DEFINE DELPHI17_UP} + {$DEFINE DELPHI18_UP} + {$DEFINE DELPHI19_UP} + {$DEFINE DELPHI20_UP} + {$DEFINE DELPHI21_UP} + {$DEFINE DELPHI22_UP} + {$DEFINE DELPHI23_UP} + {$DEFINE DELPHI24_UP} + {$DEFINE DELPHI25_UP} +{$ENDIF} + +{$IFDEF DELPHI9_UP} + {$DEFINE SUPPORTS_INLINE} +{$ENDIF} + diff --git a/demos/MiniBrowser/uHelloScheme.pas b/demos/SchemeRegistrationBrowser/uHelloScheme.pas similarity index 100% rename from demos/MiniBrowser/uHelloScheme.pas rename to demos/SchemeRegistrationBrowser/uHelloScheme.pas diff --git a/demos/SchemeRegistrationBrowser/uSchemeRegistrationBrowser.dfm b/demos/SchemeRegistrationBrowser/uSchemeRegistrationBrowser.dfm new file mode 100644 index 00000000..8d4ac1db --- /dev/null +++ b/demos/SchemeRegistrationBrowser/uSchemeRegistrationBrowser.dfm @@ -0,0 +1,79 @@ +object SchemeRegistrationBrowserFrm: TSchemeRegistrationBrowserFrm + Left = 0 + Top = 0 + Caption = 'SchemeRegistrationBrowser' + ClientHeight = 652 + ClientWidth = 980 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'Tahoma' + Font.Style = [] + OldCreateOrder = False + Position = poScreenCenter + OnShow = FormShow + PixelsPerInch = 96 + TextHeight = 13 + object AddressBarPnl: TPanel + Left = 0 + Top = 0 + Width = 980 + Height = 30 + Align = alTop + BevelOuter = bvNone + DoubleBuffered = True + Enabled = False + Padding.Left = 5 + Padding.Top = 5 + Padding.Right = 5 + Padding.Bottom = 5 + ParentDoubleBuffered = False + ShowCaption = False + TabOrder = 0 + ExplicitWidth = 865 + object GoBtn: TButton + Left = 944 + Top = 5 + Width = 31 + Height = 20 + Margins.Left = 5 + Align = alRight + Caption = 'Go' + TabOrder = 0 + OnClick = GoBtnClick + ExplicitLeft = 829 + end + object AddressCbx: TComboBox + Left = 5 + Top = 5 + Width = 939 + Height = 21 + Align = alClient + ItemIndex = 1 + TabOrder = 1 + Text = 'hello://world' + Items.Strings = ( + 'https://www.google.com' + 'hello://world') + ExplicitWidth = 824 + end + end + object CEFWindowParent1: TCEFWindowParent + Left = 0 + Top = 30 + Width = 980 + Height = 622 + Align = alClient + TabOrder = 1 + ExplicitWidth = 865 + ExplicitHeight = 528 + end + object Chromium1: TChromium + OnBeforeContextMenu = Chromium1BeforeContextMenu + OnContextMenuCommand = Chromium1ContextMenuCommand + OnAfterCreated = Chromium1AfterCreated + Left = 16 + Top = 40 + end +end diff --git a/demos/SchemeRegistrationBrowser/uSchemeRegistrationBrowser.pas b/demos/SchemeRegistrationBrowser/uSchemeRegistrationBrowser.pas new file mode 100644 index 00000000..b13e3b4f --- /dev/null +++ b/demos/SchemeRegistrationBrowser/uSchemeRegistrationBrowser.pas @@ -0,0 +1,175 @@ +// ************************************************************************ +// ***************************** CEF4Delphi ******************************* +// ************************************************************************ +// +// CEF4Delphi is based on DCEF3 which uses CEF3 to embed a chromium-based +// browser in Delphi applications. +// +// The original license of DCEF3 still applies to CEF4Delphi. +// +// For more information about CEF4Delphi visit : +// https://www.briskbard.com/index.php?lang=en&pageid=cef +// +// Copyright © 2017 Salvador Díaz Fau. All rights reserved. +// +// ************************************************************************ +// ************ vvvv Original license and comments below vvvv ************* +// ************************************************************************ +(* + * Delphi Chromium Embedded 3 + * + * Usage allowed under the restrictions of the Lesser GNU General Public License + * or alternatively the restrictions of the Mozilla Public License 1.1 + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for + * the specific language governing rights and limitations under the License. + * + * Unit owner : Henri Gourvest + * 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 uSchemeRegistrationBrowser; + +{$I cef.inc} + +interface + +uses + {$IFDEF DELPHI16_UP} + Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Menus, + Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls, System.Types, Vcl.ComCtrls, Vcl.ClipBrd, + System.UITypes, + {$ELSE} + Windows, Messages, SysUtils, Variants, Classes, Graphics, Menus, + Controls, Forms, Dialogs, StdCtrls, ExtCtrls, Types, ComCtrls, ClipBrd, + {$ENDIF} + uCEFChromium, uCEFWindowParent, uCEFInterfaces, uCEFApplication, uCEFTypes, uCEFConstants; + +const + MINIBROWSER_CREATED = WM_APP + $100; + + MINIBROWSER_CONTEXTMENU_REGSCHEME = MENU_ID_USER_FIRST + 1; + MINIBROWSER_CONTEXTMENU_CLEARFACT = MENU_ID_USER_FIRST + 2; + +type + TSchemeRegistrationBrowserFrm = class(TForm) + AddressBarPnl: TPanel; + GoBtn: TButton; + CEFWindowParent1: TCEFWindowParent; + Chromium1: TChromium; + AddressCbx: TComboBox; + procedure Chromium1AfterCreated(Sender: TObject; + const browser: ICefBrowser); + procedure Chromium1BeforeContextMenu(Sender: TObject; + const browser: ICefBrowser; const frame: ICefFrame; + const params: ICefContextMenuParams; const model: ICefMenuModel); + procedure Chromium1ContextMenuCommand(Sender: TObject; + const browser: ICefBrowser; const frame: ICefFrame; + const params: ICefContextMenuParams; commandId: Integer; + eventFlags: Cardinal; out Result: Boolean); + procedure GoBtnClick(Sender: TObject); + procedure FormShow(Sender: TObject); + private + { Private declarations } + protected + procedure BrowserCreatedMsg(var aMessage : TMessage); message MINIBROWSER_CREATED; + procedure WMMove(var aMessage : TWMMove); message WM_MOVE; + procedure WMMoving(var aMessage : TMessage); message WM_MOVING; + public + { Public declarations } + end; + +var + SchemeRegistrationBrowserFrm: TSchemeRegistrationBrowserFrm; + +implementation + +{$R *.dfm} + +uses + uCEFSchemeHandlerFactory, uHelloScheme; + +procedure TSchemeRegistrationBrowserFrm.Chromium1AfterCreated( + Sender: TObject; const browser: ICefBrowser); +begin + PostMessage(Handle, MINIBROWSER_CREATED, 0, 0); +end; + +procedure TSchemeRegistrationBrowserFrm.Chromium1BeforeContextMenu( + Sender: TObject; const browser: ICefBrowser; const frame: ICefFrame; + const params: ICefContextMenuParams; const model: ICefMenuModel); +begin + model.AddItem(MINIBROWSER_CONTEXTMENU_REGSCHEME, 'Register scheme'); + model.AddItem(MINIBROWSER_CONTEXTMENU_CLEARFACT, 'Clear schemes'); +end; + +procedure TSchemeRegistrationBrowserFrm.Chromium1ContextMenuCommand( + Sender: TObject; const browser: ICefBrowser; const frame: ICefFrame; + const params: ICefContextMenuParams; commandId: Integer; + eventFlags: Cardinal; out Result: Boolean); +var + TempFactory: ICefSchemeHandlerFactory; +begin + Result := False; + + case commandId of + MINIBROWSER_CONTEXTMENU_REGSCHEME : + if (browser <> nil) and + (browser.host <> nil) and + (browser.host.RequestContext <> nil) then + begin + // You can register the Scheme Handler Factory in the DPR file or later, for example in a context menu command. + TempFactory := TCefSchemeHandlerFactoryOwn.Create(THelloScheme); + if not(browser.host.RequestContext.RegisterSchemeHandlerFactory('hello', '', TempFactory)) then + MessageDlg('RegisterSchemeHandlerFactory error !', mtError, [mbOk], 0); + end; + + MINIBROWSER_CONTEXTMENU_CLEARFACT : + if (browser <> nil) and + (browser.host <> nil) and + (browser.host.RequestContext <> nil) then + begin + if not(browser.host.RequestContext.ClearSchemeHandlerFactories) then + MessageDlg('ClearSchemeHandlerFactories error !', mtError, [mbOk], 0); + end; + end; +end; + +procedure TSchemeRegistrationBrowserFrm.FormShow(Sender: TObject); +begin + Chromium1.CreateBrowser(CEFWindowParent1, ''); +end; + +procedure TSchemeRegistrationBrowserFrm.GoBtnClick(Sender: TObject); +begin + Chromium1.LoadURL(AddressCbx.Text); +end; + +procedure TSchemeRegistrationBrowserFrm.BrowserCreatedMsg(var aMessage : TMessage); +begin + AddressBarPnl.Enabled := True; + GoBtn.Click; +end; + +procedure TSchemeRegistrationBrowserFrm.WMMove(var aMessage : TWMMove); +begin + inherited; + + if (Chromium1 <> nil) then Chromium1.NotifyMoveOrResizeStarted; +end; + +procedure TSchemeRegistrationBrowserFrm.WMMoving(var aMessage : TMessage); +begin + inherited; + + if (Chromium1 <> nil) then Chromium1.NotifyMoveOrResizeStarted; +end; + +end. diff --git a/source/CEF4Delphi.dproj b/source/CEF4Delphi.dproj index 499c1c89..93c1f00a 100644 --- a/source/CEF4Delphi.dproj +++ b/source/CEF4Delphi.dproj @@ -259,16 +259,7 @@ true - - - 0 - .dll;.bpl - - - 1 - .dylib - - + Contents\Resources @@ -582,7 +573,16 @@ 1 - + + + 0 + .dll;.bpl + + + 1 + .dylib + + diff --git a/source/CEF4Delphi.dsk b/source/CEF4Delphi.dsk index ad53f270..34f0cec5 100644 --- a/source/CEF4Delphi.dsk +++ b/source/CEF4Delphi.dsk @@ -1,33 +1,21 @@ [Closed Files] -File_0=TSourceModule,'C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\source\uCEFApplication.pas',0,1,19,37,66,0,0,, -File_1=TSourceModule,'C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\source\uCEFChromiumOptions.pas',0,1,57,1,111,0,0,, -File_2=TSourceModule,'C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\source\uCEFTypes.pas',0,1,1160,1,1191,0,0,, -File_3=TSourceModule,'V:\3071\include\capi\cef_life_span_handler_capi.h',0,1,1,1,1,0,0,, -File_4=TSourceModule,'V:\3112\include\capi\cef_life_span_handler_capi.h',0,1,1,1,1,0,0,, -File_5=TSourceModule,'V:\3112\include\internal\cef_types_wrappers.h',0,1,1,1,1,0,0,, -File_6=TSourceModule,'V:\3071\include\internal\cef_types_wrappers.h',0,1,1,1,1,0,0,, -File_7=TSourceModule,'V:\3071\include\internal\cef_types.h',0,1,1,1,1,0,0,, -File_8=TSourceModule,'V:\3112\include\internal\cef_types.h',0,1,1,1,1,0,0,, +File_0=TSourceModule,'C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\source\uCEFChromium.pas',0,1,2157,80,2196,0,0,, +File_1=TSourceModule,'C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\source\uCEFStringVisitor.pas',0,1,101,51,131,0,0,, +File_2=TSourceModule,'C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\source\uCEFTask.pas',0,1,199,46,202,0,0,, +File_3=TSourceModule,'C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\source\uCEFChromiumOptions.pas',0,1,57,1,111,0,0,, +File_4=TSourceModule,'C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\source\uCEFTypes.pas',0,1,1160,1,1191,0,0,, +File_5=TSourceModule,'V:\3071\include\capi\cef_life_span_handler_capi.h',0,1,1,1,1,0,0,, +File_6=TSourceModule,'V:\3112\include\capi\cef_life_span_handler_capi.h',0,1,1,1,1,0,0,, +File_7=TSourceModule,'V:\3112\include\internal\cef_types_wrappers.h',0,1,1,1,1,0,0,, +File_8=TSourceModule,'V:\3071\include\internal\cef_types_wrappers.h',0,1,1,1,1,0,0,, [Modules] -Module0=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\source\uCEFChromium.pas -Module1=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\source\uCEFStringVisitor.pas -Module2=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\source\uCEFTask.pas -Module3=default.htm -Count=4 +Module0=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\source\uCEFApplication.pas +Module1=default.htm +Count=2 EditWindowCount=1 -[C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\source\uCEFChromium.pas] -ModuleType=TSourceModule -FormState=0 -FormOnTop=0 - -[C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\source\uCEFStringVisitor.pas] -ModuleType=TSourceModule -FormState=0 -FormOnTop=0 - -[C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\source\uCEFTask.pas] +[C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\source\uCEFApplication.pas] ModuleType=TSourceModule FormState=0 FormOnTop=0 @@ -36,12 +24,10 @@ FormOnTop=0 ModuleType=TURLModule [EditWindow0] -ViewCount=4 -CurrentEditView=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\source\uCEFChromium.pas +ViewCount=2 +CurrentEditView=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\source\uCEFApplication.pas View0=0 View1=1 -View2=2 -View3=3 PercentageSizes=1 Create=1 Visible=1 @@ -58,18 +44,18 @@ ClientHeight=9428 DockedToMainForm=1 BorlandEditorCodeExplorer=BorlandEditorCodeExplorer@EditWindow0 TopPanelSize=0 -LeftPanelSize=0 +LeftPanelSize=1898 +LeftPanelClients=PropertyInspector,DockSite3 +LeftPanelData=00000800010100000000AA19000000000000016A0700000000000001000000005D0E000009000000446F636B53697465330100000000A12300001100000050726F7065727479496E73706563746F72FFFFFFFF RightPanelSize=2000 -RightPanelClients=DockSite2 -RightPanelData=00000800010100000000AA1900000000000001D0070000000000000100000000A123000009000000446F636B5369746532FFFFFFFF +RightPanelClients=DockSite2,DockSite4 +RightPanelData=00000800010100000000AA1900000000000001D00700000000000001000000004312000009000000446F636B53697465320100000000A123000009000000446F636B5369746534FFFFFFFF BottomPanelSize=0 BottomPanelClients=DockSite1,MessageView BottomPanelData=0000080001020200000009000000446F636B53697465310F0000004D65737361676556696577466F726D1234000000000000022506000000000000FFFFFFFF BottomMiddlePanelSize=0 BottomMiddlePanelClients=DockSite0,GraphDrawingModel BottomMiddelPanelData=0000080001020200000009000000446F636B536974653010000000477261706844726177696E67566965779D1D00000000000002F306000000000000FFFFFFFF -TabDockLeftClients=PropertyInspector=0,DockSite3=1 -TabDockRightClients=DockSite4=0 [View0] CustomEditViewType=TWelcomePageView @@ -77,36 +63,14 @@ WelcomePageURL=bds:/default.htm [View1] CustomEditViewType=TEditView -Module=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\source\uCEFChromium.pas -CursorX=80 -CursorY=2196 -TopLine=2157 +Module=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\source\uCEFApplication.pas +CursorX=49 +CursorY=65 +TopLine=19 LeftCol=1 Elisions= Bookmarks= -EditViewName=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\source\uCEFChromium.pas - -[View2] -CustomEditViewType=TEditView -Module=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\source\uCEFStringVisitor.pas -CursorX=51 -CursorY=131 -TopLine=101 -LeftCol=1 -Elisions= -Bookmarks= -EditViewName=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\source\uCEFStringVisitor.pas - -[View3] -CustomEditViewType=TEditView -Module=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\source\uCEFTask.pas -CursorX=46 -CursorY=202 -TopLine=199 -LeftCol=1 -Elisions= -Bookmarks= -EditViewName=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\source\uCEFTask.pas +EditViewName=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\source\uCEFApplication.pas [Watches] Count=0 @@ -170,11 +134,11 @@ State=0 Left=0 Top=0 Width=2000 -Height=8868 +Height=4226 MaxLeft=-1 MaxTop=-1 ClientWidth=2000 -ClientHeight=8868 +ClientHeight=4226 TBDockHeight=5897 LRDockWidth=2352 Dockable=1 @@ -316,7 +280,7 @@ StayOnTop=0 [PropertyInspector] PercentageSizes=1 Create=1 -Visible=0 +Visible=1 Docked=1 State=0 Left=0 @@ -611,11 +575,11 @@ State=0 Left=0 Top=0 Width=1898 -Height=9170 +Height=3498 MaxLeft=-1 MaxTop=-1 ClientWidth=1898 -ClientHeight=9170 +ClientHeight=3498 TBDockHeight=3677 LRDockWidth=1898 Dockable=1 @@ -721,11 +685,11 @@ State=0 Left=0 Top=23 Width=2000 -Height=9170 +Height=4529 MaxLeft=-1 MaxTop=-1 ClientWidth=2000 -ClientHeight=9170 +ClientHeight=4529 TBDockHeight=7164 LRDockWidth=2000 Dockable=1 @@ -735,21 +699,21 @@ ActiveTabID=ProjectManager TabDockClients=ProjectManager,ModelViewTool,DataExplorerContainer,frmDesignPreview,TFileExplorerForm [DockSite3] -HostDockSite=LeftDockTabSet +HostDockSite=DockLeftPanel DockSiteType=1 PercentageSizes=1 Create=1 -Visible=0 +Visible=1 Docked=1 State=0 Left=0 Top=23 Width=1898 -Height=9170 +Height=3498 MaxLeft=-1 MaxTop=-1 ClientWidth=1898 -ClientHeight=9170 +ClientHeight=3498 TBDockHeight=7164 LRDockWidth=1898 Dockable=1 @@ -759,11 +723,11 @@ ActiveTabID=StructureView TabDockClients=StructureView,ClassBrowserTool [DockSite4] -HostDockSite=RightTabDock +HostDockSite=DockRightPanel DockSiteType=1 PercentageSizes=1 Create=1 -Visible=0 +Visible=1 Docked=1 State=0 Left=0 diff --git a/source/CEF4Delphi.identcache b/source/CEF4Delphi.identcache index 28ca9b90d7e105c576e0c7c88a6015a05942e934..f7a0b7f9374f9377224147e768f79ba5cd671b84 100644 GIT binary patch delta 237 zcmaEq`Y3h6y~zi-{U!?-%5S{q%nWAhFmgePV!7jmtcnE4K|qJ`PL4Bb0RZ}3RZ9Q> delta 228 zcmaEq`Y3h6z0KZ?&dihFY5Gm}WL2AZ&u{V`BmT+Dqy;wTv(__Bj^emCc|Eh=WDY~6 z$qOX?H@9;xvj+ X7|MXC9ZE7l+x;iki1SR2Gim_