diff --git a/demos/MDIBrowser/cef.inc b/demos/MDIBrowser/cef.inc new file mode 100644 index 00000000..b639b39a --- /dev/null +++ b/demos/MDIBrowser/cef.inc @@ -0,0 +1,335 @@ +(* + * Delphi Chromium Embedded + * + * 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 + *) + + {.$define CEF_STRING_TYPE_UTF8} +{$define CEF_STRING_TYPE_UTF16} +{.$define CEF_STRING_TYPE_WIDE} + +{.$DEFINE CEF_MULTI_THREADED_MESSAGE_LOOP} + + +{$DEFINE DELPHI_VERSION_UNKNOW} + +{$IFDEF FPC} + // force multithreading message loop on FPC, still not work + {$DEFINE CEF_MULTI_THREADED_MESSAGE_LOOP} + {$DEFINE SUPPORTS_INLINE} +{$ENDIF} + +{$IFDEF VER130} + {$UNDEF DELPHI_VERSION_UNKNOW} + {$DEFINE DELPHI5_UP} +{$ENDIF} + +{$IFDEF VER140} + {$UNDEF DELPHI_VERSION_UNKNOW} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI6_UP} +{$ENDIF} + +{$IFDEF VER150} + {$UNDEF DELPHI_VERSION_UNKNOW} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI6_UP} + {$DEFINE DELPHI7_UP} +{$ENDIF} + +{$IFDEF VER160} + // DELPHI 8 for Dotnet + {$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} + +{$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} + +{$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} + +{$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} + +{$IFDEF VER290} // RAD Studio XE8 + {$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 +{$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 +{$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} + + +{$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} +{$ENDIF} + +{$IFDEF DELPHI9_UP} + {$DEFINE SUPPORTS_INLINE} +{$ENDIF} + diff --git a/demos/MDIBrowser/uChildForm.pas b/demos/MDIBrowser/uChildForm.pas index 7d3acc33..bb62c0e5 100644 --- a/demos/MDIBrowser/uChildForm.pas +++ b/demos/MDIBrowser/uChildForm.pas @@ -50,7 +50,7 @@ uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Menus, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, Types, ComCtrls, ClipBrd, {$ENDIF} - uMainForm, uCEFChromium, uCEFWindowParent, uCEFInterfaces; + uMainForm, uCEFChromium, uCEFWindowParent, uCEFInterfaces, uCEFConstants; type TChildForm = class(TForm) @@ -104,7 +104,6 @@ implementation // If you load simple web pages and you want to speed up the destruction, // try skipping step 1 and reducing the timer's interval. - procedure TChildForm.Button1Click(Sender: TObject); begin Chromium1.LoadURL(Edit1.Text); @@ -125,7 +124,7 @@ procedure TChildForm.Chromium1LoadEnd(Sender: TObject; httpStatusCode: Integer); begin if FClosing and (Chromium1.DocumentURL = 'about:blank') then - Chromium1.CloseBrowser(False); + Chromium1.CloseBrowser(True); end; procedure TChildForm.FormClose(Sender: TObject; var Action: TCloseAction); diff --git a/demos/ToolBoxBrowser/00-DeleteDCUs.bat b/demos/ToolBoxBrowser/00-DeleteDCUs.bat new file mode 100644 index 00000000..76dedadd --- /dev/null +++ b/demos/ToolBoxBrowser/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/ToolBoxBrowser/ToolBoxBrowser.dpr b/demos/ToolBoxBrowser/ToolBoxBrowser.dpr new file mode 100644 index 00000000..d2653e96 --- /dev/null +++ b/demos/ToolBoxBrowser/ToolBoxBrowser.dpr @@ -0,0 +1,80 @@ +// ************************************************************************ +// ***************************** 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 ToolBoxBrowser; + +{$I cef.inc} + +uses + {$IFDEF DELPHI16_UP} + Vcl.Forms, + {$ELSE} + Forms, + {$ENDIF } + uCEFApplication, + uMainForm in 'uMainForm.pas' {MainForm}, + uChildForm in 'uChildForm.pas' {ChildForm}; + +{$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} + +begin + GlobalCEFApp := TCefApplication.Create; + GlobalCEFApp.FlashEnabled := False; // Some websites with heavy Flash usage will need a longer Timer.Interval if you set this to True + GlobalCEFApp.FastUnload := True; // Enable the fast unload controller, which speeds up tab/window close by running a tab's onunload js handler independently of the GUI + + // 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 + Application.Initialize; + Application.CreateForm(TMainForm, MainForm); + Application.Run; + end; + + GlobalCEFApp.Free; +end. diff --git a/demos/ToolBoxBrowser/ToolBoxBrowser.dproj b/demos/ToolBoxBrowser/ToolBoxBrowser.dproj new file mode 100644 index 00000000..057bf145 --- /dev/null +++ b/demos/ToolBoxBrowser/ToolBoxBrowser.dproj @@ -0,0 +1,542 @@ + + + {2FA9E1B5-1D6D-45C8-B021-D260B67AF861} + 18.0 + VCL + ToolBoxBrowser.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 + + + 3082 + System;Xml;Data;Datasnap;Web;Soap;Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;$(DCC_Namespace) + ToolBoxBrowser + $(BDS)\bin\delphi_PROJECTICON.ico + CompanyName=;FileDescription=;FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=;ProductVersion=1.0.0.0;Comments= + .\$(Platform)\$(Config) + false + false + false + false + false + + + DBXSqliteDriver;RESTComponents;DataSnapServerMidas;DBXDb2Driver;DBXInterBaseDriver;vclactnband;frxe23;vclFireDAC;emsclientfiredac;DataSnapFireDAC;svnui;tethering;FireDACADSDriver;DBXMSSQLDriver;DatasnapConnectorsFreePascal;FireDACMSSQLDriver;vcltouch;vcldb;bindcompfmx;svn;Intraweb;DBXOracleDriver;inetdb;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;ibxpress;Tee;DataSnapServer;xmlrtl;soapmidas;DataSnapNativeClient;fmxobj;vclwinx;ibxbindings;rtl;FireDACDSDriver;DbxClientDriver;DBXSybaseASADriver;CustomIPTransport;vcldsnap;GR32_RSXE5;bindcomp;appanalytics;DBXInformixDriver;bindcompvcl;frxDB23;TeeUI;IndyCore230;vclribbon;dbxcds;VclSmp;adortl;FireDACODBCDriver;DataSnapIndy10ServerTransport;IndySystem230;dsnapxml;DataSnapProviderClient;dbrtl;inetdbxpress;FireDACMongoDBDriver;frx23;fmxase;$(DCC_UsePackage) + $(BDS)\bin\default_app.manifest + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) + 1033 + true + + + 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 + + + 1033 + true + true + true + false + + + false + RELEASE;$(DCC_Define) + 0 + 0 + + + 1033 + true + true + true + + + + MainSource + + +
MainForm
+ dfm +
+ +
ChildForm
+ dfm +
+ + Cfg_2 + Base + + + Base + + + Cfg_1 + Base + +
+ + Delphi.Personality.12 + Application + + + + ToolBoxBrowser.dpr + + + Microsoft Office 2000 Sample Automation Server Wrapper Components + Microsoft Office XP Sample Automation Server Wrapper Components + + + + + + ToolBoxBrowser.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/ToolBoxBrowser/ToolBoxBrowser.dproj.local b/demos/ToolBoxBrowser/ToolBoxBrowser.dproj.local new file mode 100644 index 00000000..7dde1148 --- /dev/null +++ b/demos/ToolBoxBrowser/ToolBoxBrowser.dproj.local @@ -0,0 +1,12 @@ + + + + 2017/05/21 15:39:53.000.029,=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\Unit1.pas + 2017/05/21 15:40:36.000.672,C:\Users\usuario\Documents\Embarcadero\Studio\Projects\Unit1.pas=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\ToolBoxBrowser\uMainForm.pas + 2017/05/21 15:40:36.000.672,C:\Users\usuario\Documents\Embarcadero\Studio\Projects\Unit1.dfm=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\ToolBoxBrowser\uMainForm.dfm + 2017/05/21 15:40:43.000.627,C:\Users\usuario\Documents\Embarcadero\Studio\Projects\Project1.dproj=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\ToolBoxBrowser\ToolBoxBrowser.dproj + 2017/05/21 15:44:20.000.154,=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\ToolBoxBrowser\Unit2.pas + 2017/05/21 15:46:19.000.247,C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\ToolBoxBrowser\Unit2.dfm=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\ToolBoxBrowser\uChildForm.dfm + 2017/05/21 15:46:19.000.247,C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\ToolBoxBrowser\Unit2.pas=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\ToolBoxBrowser\uChildForm.pas + + diff --git a/demos/ToolBoxBrowser/ToolBoxBrowser.dsk b/demos/ToolBoxBrowser/ToolBoxBrowser.dsk new file mode 100644 index 00000000..676724af --- /dev/null +++ b/demos/ToolBoxBrowser/ToolBoxBrowser.dsk @@ -0,0 +1,783 @@ +[Closed Files] +File_0=TSourceModule,'C:\Program Files\Embarcadero\Studio\17.0\Componentes\misc\uConnectFrm.pas',0,1,1,31,16,0,0,, +File_1=TSourceModule,'C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\MDIBrowser\uMainForm.pas',0,1,154,43,192,0,0,, +File_2=TSourceModule,'C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\MDIBrowser\uChildForm.pas',0,1,28,14,53,0,0,, +File_3=TSourceModule,'c:\program files\embarcadero\studio\17.0\source\rtl\common\System.Classes.pas',0,1,1970,1,1999,0,0,, +File_4=TSourceModule,'c:\program files\embarcadero\studio\17.0\SOURCE\VCL\Vcl.Forms.pas',0,1,1448,3,1381,0,0,{{1729,4} +File_5=TSourceModule,'C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\source\uCEFChromium.pas',0,1,22,69,65,0,0,, +File_6=TSourceModule,'C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\source\uCEFChromiumTool.pas',0,1,1,1,1,0,0,, +File_7=TSourceModule,'C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\source\uCEFDisplayHandler.pas',0,1,85,35,133,0,0,, +File_8=TSourceModule,'C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\source\uCEFBrowser.pas',0,1,1,1,1,0,0,, +File_9=TSourceModule,'C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\source\uCEFMiscFunctions.pas',0,1,860,1,1,0,0,, + +[Modules] +Module0=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\ToolBoxBrowser\ToolBoxBrowser.dproj +Module1=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\ToolBoxBrowser\uChildForm.pas +Module2=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\ToolBoxBrowser\uMainForm.pas +Module3=default.htm +Count=4 +EditWindowCount=1 + +[C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\ToolBoxBrowser\ToolBoxBrowser.dproj] +ModuleType=TBaseProject + +[C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\ToolBoxBrowser\uChildForm.pas] +ModuleType=TSourceModule +FormState=1 +FormOnTop=0 + +[C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\ToolBoxBrowser\uMainForm.pas] +ModuleType=TSourceModule +FormState=1 +FormOnTop=0 + +[default.htm] +ModuleType=TURLModule + +[EditWindow0] +ViewCount=4 +CurrentEditView=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\ToolBoxBrowser\ToolBoxBrowser.dpr +View0=0 +View1=1 +View2=2 +View3=3 +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=1898 +LeftPanelClients=PropertyInspector,DockSite3 +LeftPanelData=00000800010100000000AA19000000000000016A0700000000000001000000005D0E000009000000446F636B53697465330100000000A12300001100000050726F7065727479496E73706563746F72FFFFFFFF +RightPanelSize=2000 +RightPanelClients=DockSite2,DockSite4 +RightPanelData=00000800010100000000AA1900000000000001D00700000000000001000000004312000009000000446F636B53697465320100000000A123000009000000446F636B5369746534FFFFFFFF +BottomPanelSize=0 +BottomPanelClients=DockSite1,MessageView +BottomPanelData=0000080001020200000009000000446F636B53697465310F0000004D65737361676556696577466F726D1234000000000000022506000000000000FFFFFFFF +BottomMiddlePanelSize=0 +BottomMiddlePanelClients=DockSite0,GraphDrawingModel +BottomMiddelPanelData=0000080001020200000009000000446F636B536974653010000000477261706844726177696E67566965779D1D00000000000002F306000000000000FFFFFFFF + +[View0] +CustomEditViewType=TWelcomePageView +WelcomePageURL=bds:/default.htm + +[View1] +CustomEditViewType=TEditView +Module=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\ToolBoxBrowser\uMainForm.pas +CursorX=79 +CursorY=145 +TopLine=104 +LeftCol=1 +Elisions= +Bookmarks= +EditViewName=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\ToolBoxBrowser\uMainForm.pas + +[View2] +CustomEditViewType=TEditView +Module=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\ToolBoxBrowser\uChildForm.pas +CursorX=78 +CursorY=53 +TopLine=22 +LeftCol=1 +Elisions= +Bookmarks= +EditViewName=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\ToolBoxBrowser\uChildForm.pas + +[View3] +CustomEditViewType=TEditView +Module=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\ToolBoxBrowser\ToolBoxBrowser.dpr +CursorX=3 +CursorY=71 +TopLine=1 +LeftCol=1 +Elisions= +Bookmarks= +EditViewName=C:\Users\usuario\Documents\Embarcadero\Studio\Projects\CEF4Delphi\demos\ToolBoxBrowser\ToolBoxBrowser.dpr + +[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=1121 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=3820 +ClientHeight=1121 +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=2000 +Height=4226 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=2000 +ClientHeight=4226 +TBDockHeight=5897 +LRDockWidth=2352 +Dockable=1 +StayOnTop=0 + +[MessageView] +PercentageSizes=1 +Create=1 +Visible=0 +Docked=1 +State=0 +Left=0 +Top=0 +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=2000 +Height=4339 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=2000 +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=-148 +Top=-137 +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=1 +Docked=1 +State=0 +Left=0 +Top=362 +Width=1898 +Height=5370 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=1898 +ClientHeight=5370 +TBDockHeight=7164 +LRDockWidth=1898 +Dockable=1 +StayOnTop=0 +SplitPos=111 + +[frmDesignPreview] +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=0 +Width=2000 +Height=6861 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=2000 +ClientHeight=6861 +TBDockHeight=5964 +LRDockWidth=2508 +Dockable=1 +StayOnTop=0 + +[TFileExplorerForm] +PercentageSizes=1 +Create=1 +Visible=0 +Docked=1 +State=0 +Left=-898 +Top=-137 +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=-1026 +Top=-137 +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=1121 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=3820 +ClientHeight=1121 +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=1121 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=3820 +ClientHeight=1121 +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=1121 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=3820 +ClientHeight=1121 +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=1121 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=3820 +ClientHeight=1121 +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=1177 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=2336 +ClientHeight=1177 +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=2000 +Height=6861 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=2000 +ClientHeight=6861 +TBDockHeight=4888 +LRDockWidth=7148 +Dockable=1 +StayOnTop=0 + +[GraphDrawingModel] +PercentageSizes=1 +Create=1 +Visible=0 +Docked=1 +State=0 +Left=0 +Top=0 +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=1121 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=3820 +ClientHeight=1121 +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=1898 +Height=3498 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=1898 +ClientHeight=3498 +TBDockHeight=3677 +LRDockWidth=1898 +Dockable=1 +StayOnTop=0 + +[ModelViewTool] +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=0 +Width=2000 +Height=6861 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=2000 +ClientHeight=6861 +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=0 +Width=3820 +Height=1424 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=3820 +ClientHeight=1424 +TBDockHeight=1424 +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=2000 +Height=4529 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=2000 +ClientHeight=4529 +TBDockHeight=7164 +LRDockWidth=2000 +Dockable=1 +StayOnTop=0 +TabPosition=1 +ActiveTabID=ProjectManager +TabDockClients=ProjectManager,ModelViewTool,DataExplorerContainer,frmDesignPreview,TFileExplorerForm + +[DockSite3] +HostDockSite=DockLeftPanel +DockSiteType=1 +PercentageSizes=1 +Create=1 +Visible=1 +Docked=1 +State=0 +Left=0 +Top=23 +Width=1898 +Height=3498 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=1898 +ClientHeight=3498 +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=2000 +Height=4339 +MaxLeft=-1 +MaxTop=-1 +ClientWidth=2000 +ClientHeight=4339 +TBDockHeight=7164 +LRDockWidth=2000 +Dockable=1 +StayOnTop=0 +TabPosition=1 +ActiveTabID=ToolForm +TabDockClients=ToolForm,TemplateView + diff --git a/demos/ToolBoxBrowser/ToolBoxBrowser.identcache b/demos/ToolBoxBrowser/ToolBoxBrowser.identcache new file mode 100644 index 00000000..4ed528b7 Binary files /dev/null and b/demos/ToolBoxBrowser/ToolBoxBrowser.identcache differ diff --git a/demos/ToolBoxBrowser/ToolBoxBrowser.res b/demos/ToolBoxBrowser/ToolBoxBrowser.res new file mode 100644 index 00000000..20ba5530 Binary files /dev/null and b/demos/ToolBoxBrowser/ToolBoxBrowser.res differ diff --git a/demos/ToolBoxBrowser/ToolBoxBrowser.stat b/demos/ToolBoxBrowser/ToolBoxBrowser.stat new file mode 100644 index 00000000..46746623 --- /dev/null +++ b/demos/ToolBoxBrowser/ToolBoxBrowser.stat @@ -0,0 +1,10 @@ +[Stats] +EditorSecs=30 +DesignerSecs=1 +InspectorSecs=1 +CompileSecs=1 +OtherSecs=10 +StartTime=21/05/2017 17:35:40 +RealKeys=0 +EffectiveKeys=0 +DebugSecs=1 diff --git a/demos/ToolBoxBrowser/cef.inc b/demos/ToolBoxBrowser/cef.inc new file mode 100644 index 00000000..b639b39a --- /dev/null +++ b/demos/ToolBoxBrowser/cef.inc @@ -0,0 +1,335 @@ +(* + * Delphi Chromium Embedded + * + * 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 + *) + + {.$define CEF_STRING_TYPE_UTF8} +{$define CEF_STRING_TYPE_UTF16} +{.$define CEF_STRING_TYPE_WIDE} + +{.$DEFINE CEF_MULTI_THREADED_MESSAGE_LOOP} + + +{$DEFINE DELPHI_VERSION_UNKNOW} + +{$IFDEF FPC} + // force multithreading message loop on FPC, still not work + {$DEFINE CEF_MULTI_THREADED_MESSAGE_LOOP} + {$DEFINE SUPPORTS_INLINE} +{$ENDIF} + +{$IFDEF VER130} + {$UNDEF DELPHI_VERSION_UNKNOW} + {$DEFINE DELPHI5_UP} +{$ENDIF} + +{$IFDEF VER140} + {$UNDEF DELPHI_VERSION_UNKNOW} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI6_UP} +{$ENDIF} + +{$IFDEF VER150} + {$UNDEF DELPHI_VERSION_UNKNOW} + {$DEFINE DELPHI5_UP} + {$DEFINE DELPHI6_UP} + {$DEFINE DELPHI7_UP} +{$ENDIF} + +{$IFDEF VER160} + // DELPHI 8 for Dotnet + {$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} + +{$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} + +{$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} + +{$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} + +{$IFDEF VER290} // RAD Studio XE8 + {$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 +{$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 +{$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} + + +{$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} +{$ENDIF} + +{$IFDEF DELPHI9_UP} + {$DEFINE SUPPORTS_INLINE} +{$ENDIF} + diff --git a/demos/ToolBoxBrowser/uChildForm.dfm b/demos/ToolBoxBrowser/uChildForm.dfm new file mode 100644 index 00000000..2327924e --- /dev/null +++ b/demos/ToolBoxBrowser/uChildForm.dfm @@ -0,0 +1,51 @@ +object ChildForm: TChildForm + Left = 0 + Top = 0 + BorderStyle = bsToolWindow + Caption = 'Browser' + ClientHeight = 300 + ClientWidth = 400 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'Tahoma' + Font.Style = [] + OldCreateOrder = False + Position = poScreenCenter + OnClose = FormClose + OnCloseQuery = FormCloseQuery + OnCreate = FormCreate + OnDestroy = FormDestroy + OnShow = FormShow + PixelsPerInch = 96 + TextHeight = 13 + object CEFWindowParent1: TCEFWindowParent + Left = 0 + Top = 0 + Width = 400 + Height = 300 + Align = alClient + TabOrder = 0 + ExplicitLeft = 160 + ExplicitTop = 88 + ExplicitWidth = 100 + ExplicitHeight = 41 + end + object Chromium1: TChromium + OnLoadEnd = Chromium1LoadEnd + OnPreKeyEvent = Chromium1PreKeyEvent + OnKeyEvent = Chromium1KeyEvent + OnAfterCreated = Chromium1AfterCreated + OnClose = Chromium1Close + Left = 184 + Top = 128 + end + object Timer1: TTimer + Enabled = False + Interval = 2000 + OnTimer = Timer1Timer + Left = 244 + Top = 128 + end +end diff --git a/demos/ToolBoxBrowser/uChildForm.pas b/demos/ToolBoxBrowser/uChildForm.pas new file mode 100644 index 00000000..ae47a2a3 --- /dev/null +++ b/demos/ToolBoxBrowser/uChildForm.pas @@ -0,0 +1,270 @@ +// ************************************************************************ +// ***************************** 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 uChildForm; + +{$I cef.inc} + +interface + +uses + {$IFDEF DELPHI16_UP} + Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, + Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, + System.UITypes, + {$ELSE} + Windows, Messages, SysUtils, Variants, Classes, Graphics, + Controls, Forms, Dialogs, ExtCtrls, + {$ENDIF} + uCEFChromium, uCEFWindowParent, uCEFInterfaces, uCEFConstants, uCEFTypes, uMainForm; + +type + TChildForm = class(TForm) + CEFWindowParent1: TCEFWindowParent; + Chromium1: TChromium; + Timer1: TTimer; + procedure FormShow(Sender: TObject); + procedure Timer1Timer(Sender: TObject); + procedure FormCreate(Sender: TObject); + procedure FormClose(Sender: TObject; var Action: TCloseAction); + procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); + procedure FormDestroy(Sender: TObject); + procedure Chromium1LoadEnd(Sender: TObject; const browser: ICefBrowser; + const frame: ICefFrame; httpStatusCode: Integer); + procedure Chromium1AfterCreated(Sender: TObject; + const browser: ICefBrowser); + procedure Chromium1Close(Sender: TObject; const browser: ICefBrowser; + out Result: Boolean); + procedure Chromium1PreKeyEvent(Sender: TObject; + const browser: ICefBrowser; const event: PCefKeyEvent; osEvent: PMsg; + out isKeyboardShortcut, Result: Boolean); + procedure Chromium1KeyEvent(Sender: TObject; + const browser: ICefBrowser; const event: PCefKeyEvent; osEvent: PMsg; + out Result: Boolean); + + private + // Variables to control when can we destroy the form safely + FCanClose : boolean; // Set to True when the final timer is triggered + FClosing : boolean; // Set to True in the CloseQuery event. + FHomepage : string; + + protected + procedure BrowserCreatedMsg(var aMessage : TMessage); message CEFBROWSER_CREATED; + procedure WMMove(var aMessage : TWMMove); message WM_MOVE; + procedure WMMoving(var aMessage : TMessage); message WM_MOVING; + + procedure HandleKeyUp(const aMsg : TMsg; var aHandled : boolean); + procedure HandleKeyDown(const aMsg : TMsg; var aHandled : boolean); + + public + property Closing : boolean read FClosing; + property Homepage : string read FHomepage write FHomepage; + end; + +implementation + +{$R *.dfm} + +// Destruction steps +// ================= +// 1. Load about:blank and wait till it's fully loaded +// 2. Call TChromium.CloseBrowser +// 3. Wait for the TChromium.Close +// 4. Enable a Timer and wait for 2 seconds +// 5. Close and destroy the form +// +// Note +// ==== +// If you load simple web pages and you want to speed up the destruction, +// try skipping step 1 and reducing the timer's interval. + +procedure TChildForm.Chromium1AfterCreated(Sender: TObject; + const browser: ICefBrowser); +begin + PostMessage(Handle, CEFBROWSER_CREATED, 0, 0); +end; + +procedure TChildForm.Chromium1Close(Sender: TObject; + const browser: ICefBrowser; out Result: Boolean); +begin + Timer1.Enabled := True; +end; + +procedure TChildForm.Chromium1KeyEvent(Sender: TObject; + const browser: ICefBrowser; const event: PCefKeyEvent; osEvent: PMsg; + out Result: Boolean); +var + TempMsg : TMsg; +begin + Result := False; + + if (event <> nil) and (osEvent <> nil) then + case osEvent.Message of + WM_KEYUP : + begin + TempMsg := osEvent^; + + HandleKeyUp(TempMsg, Result); + end; + + WM_KEYDOWN : + begin + TempMsg := osEvent^; + + HandleKeyDown(TempMsg, Result); + end; + end; +end; + +procedure TChildForm.HandleKeyUp(const aMsg : TMsg; var aHandled : boolean); +var + TempMessage : TMessage; + TempKeyMsg : TWMKey; +begin + TempMessage.Msg := aMsg.message; + TempMessage.wParam := aMsg.wParam; + TempMessage.lParam := aMsg.lParam; + TempKeyMsg := TWMKey(TempMessage); + + if (TempKeyMsg.CharCode = VK_ESCAPE) then + begin + aHandled := True; + + PostMessage(Handle, WM_CLOSE, 0, 0); + end; +end; + +procedure TChildForm.HandleKeyDown(const aMsg : TMsg; var aHandled : boolean); +var + TempMessage : TMessage; + TempKeyMsg : TWMKey; +begin + TempMessage.Msg := aMsg.message; + TempMessage.wParam := aMsg.wParam; + TempMessage.lParam := aMsg.lParam; + TempKeyMsg := TWMKey(TempMessage); + + if (TempKeyMsg.CharCode = VK_ESCAPE) then aHandled := True; +end; + +procedure TChildForm.Chromium1LoadEnd(Sender: TObject; + const browser: ICefBrowser; const frame: ICefFrame; + httpStatusCode: Integer); +begin + if FClosing and (Chromium1.DocumentURL = 'about:blank') then + Chromium1.CloseBrowser(True); +end; + +procedure TChildForm.Chromium1PreKeyEvent(Sender: TObject; + const browser: ICefBrowser; const event: PCefKeyEvent; osEvent: PMsg; + out isKeyboardShortcut, Result: Boolean); +begin + Result := False; + + if (event <> nil) and + (event.kind in [KEYEVENT_KEYDOWN, KEYEVENT_KEYUP]) and + (event.windows_key_code = VK_ESCAPE) then + isKeyboardShortcut := True; +end; + +procedure TChildForm.FormClose(Sender: TObject; var Action: TCloseAction); +begin + Action := caFree; +end; + +procedure TChildForm.FormCloseQuery(Sender: TObject; + var CanClose: Boolean); +begin + CanClose := FCanClose; + + if not(FClosing) then + begin + FClosing := True; + Chromium1.LoadURL('about:blank'); + ShowWindow(Handle, SW_HIDE); + end; +end; + +procedure TChildForm.FormCreate(Sender: TObject); +begin + FCanClose := False; + FClosing := False; +end; + +procedure TChildForm.FormDestroy(Sender: TObject); +begin + // Tell the main form that a child has been destroyed. + // The main form will check if this was the last child to close itself + PostMessage(MainForm.Handle, CEFBROWSER_CHILDDESTROYED, 0, 0); +end; + +procedure TChildForm.FormShow(Sender: TObject); +begin + Chromium1.CreateBrowser(CEFWindowParent1, ''); +end; + +procedure TChildForm.Timer1Timer(Sender: TObject); +begin + Timer1.Enabled := False; + + if not(FCanClose) then + begin + FCanClose := True; + PostMessage(self.Handle, WM_CLOSE, 0, 0); + end; +end; + +procedure TChildForm.WMMove(var aMessage : TWMMove); +begin + inherited; + + if (Chromium1 <> nil) then Chromium1.NotifyMoveOrResizeStarted; +end; + +procedure TChildForm.WMMoving(var aMessage : TMessage); +begin + inherited; + + if (Chromium1 <> nil) then Chromium1.NotifyMoveOrResizeStarted; +end; + +procedure TChildForm.BrowserCreatedMsg(var aMessage : TMessage); +begin + Chromium1.LoadURL(FHomepage); +end; + +end. diff --git a/demos/ToolBoxBrowser/uMainForm.dfm b/demos/ToolBoxBrowser/uMainForm.dfm new file mode 100644 index 00000000..229e63d8 --- /dev/null +++ b/demos/ToolBoxBrowser/uMainForm.dfm @@ -0,0 +1,44 @@ +object MainForm: TMainForm + Left = 0 + Top = 0 + BorderIcons = [biSystemMenu] + BorderStyle = bsSingle + Caption = 'Toolbox Browser demo' + ClientHeight = 37 + ClientWidth = 357 + Color = clBtnFace + Font.Charset = DEFAULT_CHARSET + Font.Color = clWindowText + Font.Height = -11 + Font.Name = 'Tahoma' + Font.Style = [] + OldCreateOrder = False + Position = poScreenCenter + OnCreate = FormCreate + PixelsPerInch = 96 + TextHeight = 13 + object Button1: TButton + Left = 300 + Top = 6 + Width = 51 + Height = 25 + Caption = 'Open' + TabOrder = 0 + OnClick = Button1Click + end + object Edit1: TEdit + Left = 8 + Top = 8 + Width = 286 + Height = 21 + TabOrder = 1 + Text = 'https://www.google.com' + end + object Timer1: TTimer + Enabled = False + Interval = 2000 + OnTimer = Timer1Timer + Left = 225 + Top = 1 + end +end diff --git a/demos/ToolBoxBrowser/uMainForm.pas b/demos/ToolBoxBrowser/uMainForm.pas new file mode 100644 index 00000000..6a2d7e20 --- /dev/null +++ b/demos/ToolBoxBrowser/uMainForm.pas @@ -0,0 +1,232 @@ +// ************************************************************************ +// ***************************** 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 uMainForm; + +{$I cef.inc} + +interface + +uses + {$IFDEF DELPHI16_UP} + Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, + Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls; + {$ELSE} + Windows, Messages, SysUtils, Variants, Classes, Graphics, + Controls, Forms, Dialogs, StdCtrls, ExtCtrls; + {$ENDIF} + +const + CEFBROWSER_CREATED = WM_APP + $100; + CEFBROWSER_CHILDDESTROYED = WM_APP + $101; + +type + TMainForm = class(TForm) + Button1: TButton; + Edit1: TEdit; + Timer1: TTimer; + procedure FormCreate(Sender: TObject); + procedure Timer1Timer(Sender: TObject); + procedure Button1Click(Sender: TObject); + private + // Variables to control when can we destroy the form safely + FCanClose : boolean; // Set to True when the final timer is triggered + FClosing : boolean; // Set to True in the CloseQuery event. + + procedure CreateToolboxChild(const ChildCaption, URL: string); + procedure CloseAllChildForms; + function GetChildClosing : boolean; + function GetChildFormCount : integer; + + protected + procedure ChildDestroyedMsg(var aMessage : TMessage); message CEFBROWSER_CHILDDESTROYED; + + public + function CloseQuery: Boolean; override; + + property ChildClosing : boolean read GetChildClosing; + property ChildFormCount : integer read GetChildFormCount; + end; + +var + MainForm: TMainForm; + +implementation + +{$R *.dfm} + +uses + uChildForm; + +// Destruction steps +// ================= +// 1. Destroy all child forms +// 2. Enable a Timer and wait for 1 second +// 3. Close and destroy the main form + +procedure TMainForm.CreateToolboxChild(const ChildCaption, URL: string); +var + TempChild : TChildForm; +begin + TempChild := TChildForm.Create(self); + TempChild.Caption := ChildCaption; + TempChild.Homepage := URL; + TempChild.Show; +end; + +procedure TMainForm.FormCreate(Sender: TObject); +begin + FCanClose := False; + FClosing := False; +end; + +procedure TMainForm.CloseAllChildForms; +var + i : integer; + TempComponent : TComponent; +begin + i := pred(ComponentCount); + + while (i >= 0) do + begin + TempComponent := Components[i]; + + if (TempComponent <> nil) and + (TempComponent is TChildForm) and + not(TChildForm(Components[i]).Closing) then + PostMessage(TChildForm(Components[i]).Handle, WM_CLOSE, 0, 0); + + dec(i); + end; +end; + +function TMainForm.GetChildClosing : boolean; +var + i : integer; + TempComponent : TComponent; +begin + Result := false; + i := pred(ComponentCount); + + while (i >= 0) do + begin + TempComponent := Components[i]; + + if (TempComponent <> nil) and + (TempComponent is TChildForm) then + begin + if TChildForm(Components[i]).Closing then + begin + Result := True; + exit; + end + else + dec(i); + end + else + dec(i); + end; +end; + +function TMainForm.GetChildFormCount : integer; +var + i : integer; + TempComponent : TComponent; +begin + Result := 0; + i := pred(ComponentCount); + + while (i >= 0) do + begin + TempComponent := Components[i]; + + if (TempComponent <> nil) and + (TempComponent is TChildForm) then + inc(Result); + + dec(i); + end; +end; + +procedure TMainForm.Timer1Timer(Sender: TObject); +begin + Timer1.Enabled := False; + + if not(FCanClose) then + begin + FCanClose := True; + PostMessage(self.Handle, WM_CLOSE, 0, 0); + end; +end; + +procedure TMainForm.Button1Click(Sender: TObject); +begin + CreateToolboxChild('Browser', Edit1.Text); +end; + +procedure TMainForm.ChildDestroyedMsg(var aMessage : TMessage); +begin + // If there are no more child forms we can destroy the main form + if FClosing and (ChildFormCount = 0) then + begin + ShowWindow(Handle, SW_HIDE); + Timer1.Enabled := True; + end; +end; + +function TMainForm.CloseQuery: Boolean; +begin + if FClosing or ChildClosing then + Result := FCanClose + else + begin + FClosing := True; + + if (ChildFormCount = 0) then + Result := True + else + begin + Result := False; + Edit1.Enabled := False; + Button1.Enabled := False; + + CloseAllChildForms; + end; + end; +end; + +end.