You've already forked CEF4Delphi
							
							
				mirror of
				https://github.com/salvadordf/CEF4Delphi.git
				synced 2025-10-30 23:07:52 +02:00 
			
		
		
		
	Update to CEF 92.0.26
Added the SchemeRegistrationBrowser_subprocess demo for Lazarus in Windows Added a Google Maps example in the test.html file used by all the SchemeRegistrationBrowser demos. Removed obsolete Flash file.
This commit is contained in:
		
							
								
								
									
										16
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								README.md
									
									
									
									
									
								
							| @@ -3,16 +3,16 @@ CEF4Delphi is an open source project created by Salvador Díaz Fau to embed Chro | ||||
|  | ||||
| CEF4Delphi is based on DCEF3 and fpCEF3. The original license of those projects still applies to CEF4Delphi. Read the license terms in the first lines of any *.pas file. | ||||
|  | ||||
| CEF4Delphi uses CEF 92.0.25 which includes Chromium 92.0.4515.131.  | ||||
| CEF4Delphi uses CEF 92.0.26 which includes Chromium 92.0.4515.159.  | ||||
|  | ||||
| The CEF binaries used by CEF4Delphi are available for download at Spotify : | ||||
| * [Windows 32 bits](https://cef-builds.spotifycdn.com/cef_binary_92.0.25%2Bgd15cfa8%2Bchromium-92.0.4515.131_windows32.tar.bz2) | ||||
| * [Windows 64 bits](https://cef-builds.spotifycdn.com/cef_binary_92.0.25%2Bgd15cfa8%2Bchromium-92.0.4515.131_windows64.tar.bz2) | ||||
| * [Linux x86 32 bits](https://cef-builds.spotifycdn.com/cef_binary_92.0.25%2Bgd15cfa8%2Bchromium-92.0.4515.131_linux32.tar.bz2) | ||||
| * [Linux x86 64 bits](https://cef-builds.spotifycdn.com/cef_binary_92.0.25%2Bgd15cfa8%2Bchromium-92.0.4515.131_linux64.tar.bz2) | ||||
| * [Linux ARM 32 bits](https://cef-builds.spotifycdn.com/cef_binary_92.0.25%2Bgd15cfa8%2Bchromium-92.0.4515.131_linuxarm.tar.bz2) | ||||
| * [Linux ARM 64 bits](https://cef-builds.spotifycdn.com/cef_binary_92.0.25%2Bgd15cfa8%2Bchromium-92.0.4515.131_linuxarm64.tar.bz2) | ||||
| * [MacOS x86 64 bits](https://cef-builds.spotifycdn.com/cef_binary_92.0.25%2Bgd15cfa8%2Bchromium-92.0.4515.131_macosx64.tar.bz2) | ||||
| * [Windows 32 bits](https://cef-builds.spotifycdn.com/cef_binary_92.0.26%2Bg9d87c1f%2Bchromium-92.0.4515.159_windows32.tar.bz2) | ||||
| * [Windows 64 bits](https://cef-builds.spotifycdn.com/cef_binary_92.0.26%2Bg9d87c1f%2Bchromium-92.0.4515.159_windows64.tar.bz2) | ||||
| * [Linux x86 32 bits](https://cef-builds.spotifycdn.com/cef_binary_92.0.26%2Bg9d87c1f%2Bchromium-92.0.4515.159_linux32.tar.bz2) | ||||
| * [Linux x86 64 bits](https://cef-builds.spotifycdn.com/cef_binary_92.0.26%2Bg9d87c1f%2Bchromium-92.0.4515.159_linux64.tar.bz2) | ||||
| * [Linux ARM 32 bits](https://cef-builds.spotifycdn.com/cef_binary_92.0.26%2Bg9d87c1f%2Bchromium-92.0.4515.159_linuxarm.tar.bz2) | ||||
| * [Linux ARM 64 bits](https://cef-builds.spotifycdn.com/cef_binary_92.0.26%2Bg9d87c1f%2Bchromium-92.0.4515.159_linuxarm64.tar.bz2) | ||||
| * [MacOS x86 64 bits](https://cef-builds.spotifycdn.com/cef_binary_92.0.26%2Bg9d87c1f%2Bchromium-92.0.4515.159_macosx64.tar.bz2) | ||||
|  | ||||
| CEF4Delphi was developed and tested on Delphi 10.4.2 and it has been tested in Delphi 7, Delphi XE, Delphi 10, Delphi 10.2, Delphi 10.3 and Lazarus 2.0.12/FPC 3.2.0. CEF4Delphi includes VCL, FireMonkey (FMX) and Lazarus components. | ||||
|  | ||||
|   | ||||
										
											Binary file not shown.
										
									
								
							| @@ -6,16 +6,27 @@ | ||||
| <img src='emoji.png'><br>Local image</p> | ||||
|  | ||||
| <p> | ||||
| <img src='dontexist.png'><br>Non existing local image</p> | ||||
|  | ||||
|  | ||||
| <p><img src='http://www.briskbard.com/images/logo2.png'><br>Remote image</p> | ||||
|  | ||||
| <p><object width="150" height="150" data="helloworld.swf"></object><br> | ||||
| <img src='dontexist.png'><br>Non existing local image</p> | ||||
|  | ||||
| <p><img src='http://www.briskbard.com/images/logo2.png'><br>Remote image</p> | ||||
|  | ||||
| <p><button onclick="myAlertFunction()">Show Alert box</button></p> | ||||
| <p><button onclick="sendCustomReq()">Send request</button></p> | ||||
| <p><img src='jupiter.png'><br>Bigger image</p> | ||||
|  | ||||
| <p>This is the Google Maps example.</br>Edit this HTML file to insert your Google Maps API key.</p> | ||||
|  | ||||
| <div id="googleMap" style="width:800px;height:400px;"></div> | ||||
|  | ||||
| <script> | ||||
| function myMap() { | ||||
| var mapProp= { | ||||
|   center:new google.maps.LatLng(41.656264,-0.8790698), | ||||
|   zoom:15, | ||||
| }; | ||||
| var map = new google.maps.Map(document.getElementById("googleMap"),mapProp); | ||||
| } | ||||
| </script> | ||||
|  | ||||
| <script src="https://maps.googleapis.com/maps/api/js?key=YOUR_GOOGLE_MAPS_API_KEY&callback=myMap"></script> | ||||
|  | ||||
|   | ||||
| @@ -0,0 +1,2 @@ | ||||
| rmdir /S /Q lib | ||||
| rmdir /S /Q backup | ||||
| @@ -0,0 +1,95 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <CONFIG> | ||||
|   <ProjectOptions> | ||||
|     <Version Value="11"/> | ||||
|     <PathDelim Value="\"/> | ||||
|     <General> | ||||
|       <Flags> | ||||
|         <MainUnitHasUsesSectionForAllUnits Value="False"/> | ||||
|         <MainUnitHasCreateFormStatements Value="False"/> | ||||
|         <MainUnitHasTitleStatement Value="False"/> | ||||
|         <MainUnitHasScaledStatement Value="False"/> | ||||
|       </Flags> | ||||
|       <SessionStorage Value="InProjectDir"/> | ||||
|       <MainUnit Value="0"/> | ||||
|       <Title Value="SchemeRegistrationBrowser"/> | ||||
|       <UseAppBundle Value="False"/> | ||||
|       <ResourceType Value="res"/> | ||||
|     </General> | ||||
|     <BuildModes Count="1"> | ||||
|       <Item1 Name="Default" Default="True"/> | ||||
|     </BuildModes> | ||||
|     <PublishOptions> | ||||
|       <Version Value="2"/> | ||||
|       <UseFileFilters Value="True"/> | ||||
|     </PublishOptions> | ||||
|     <RunParams> | ||||
|       <FormatVersion Value="2"/> | ||||
|       <Modes Count="0"/> | ||||
|     </RunParams> | ||||
|     <RequiredPackages Count="2"> | ||||
|       <Item1> | ||||
|         <PackageName Value="CEF4Delphi_Lazarus"/> | ||||
|       </Item1> | ||||
|       <Item2> | ||||
|         <PackageName Value="LCL"/> | ||||
|       </Item2> | ||||
|     </RequiredPackages> | ||||
|     <Units Count="3"> | ||||
|       <Unit0> | ||||
|         <Filename Value="SchemeRegistrationBrowser.lpr"/> | ||||
|         <IsPartOfProject Value="True"/> | ||||
|       </Unit0> | ||||
|       <Unit1> | ||||
|         <Filename Value="uSchemeRegistrationBrowser.pas"/> | ||||
|         <IsPartOfProject Value="True"/> | ||||
|         <ComponentName Value="SchemeRegistrationBrowserFrm"/> | ||||
|         <HasResources Value="True"/> | ||||
|         <ResourceBaseClass Value="Form"/> | ||||
|       </Unit1> | ||||
|       <Unit2> | ||||
|         <Filename Value="uHelloScheme.pas"/> | ||||
|         <IsPartOfProject Value="True"/> | ||||
|       </Unit2> | ||||
|     </Units> | ||||
|   </ProjectOptions> | ||||
|   <CompilerOptions> | ||||
|     <Version Value="11"/> | ||||
|     <PathDelim Value="\"/> | ||||
|     <Target> | ||||
|       <Filename Value="..\..\..\bin\SchemeRegistrationBrowser"/> | ||||
|     </Target> | ||||
|     <SearchPaths> | ||||
|       <IncludeFiles Value="$(ProjOutDir)"/> | ||||
|       <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/> | ||||
|     </SearchPaths> | ||||
|     <Parsing> | ||||
|       <SyntaxOptions> | ||||
|         <SyntaxMode Value="Delphi"/> | ||||
|       </SyntaxOptions> | ||||
|     </Parsing> | ||||
|     <Linking> | ||||
|       <Options> | ||||
|         <Win32> | ||||
|           <GraphicApplication Value="True"/> | ||||
|         </Win32> | ||||
|       </Options> | ||||
|     </Linking> | ||||
|     <Other> | ||||
|       <CustomOptions Value="-dBorland -dVer150 -dDelphi7 -dCompiler6_Up -dPUREPASCAL"/> | ||||
|     </Other> | ||||
|   </CompilerOptions> | ||||
|   <Debugging> | ||||
|     <Exceptions Count="3"> | ||||
|       <Item1> | ||||
|         <Name Value="EAbort"/> | ||||
|       </Item1> | ||||
|       <Item2> | ||||
|         <Name Value="ECodetoolError"/> | ||||
|       </Item2> | ||||
|       <Item3> | ||||
|         <Name Value="EFOpenError"/> | ||||
|       </Item3> | ||||
|     </Exceptions> | ||||
|   </Debugging> | ||||
| </CONFIG> | ||||
| @@ -0,0 +1,67 @@ | ||||
| // ************************************************************************ | ||||
| // ***************************** CEF4Delphi ******************************* | ||||
| // ************************************************************************ | ||||
| // | ||||
| // CEF4Delphi is based on DCEF3 which uses CEF3 to embed a chromium-based | ||||
| // browser in Delphi applications. | ||||
| // | ||||
| // The original license of DCEF3 still applies to CEF4Delphi. | ||||
| // | ||||
| // For more information about CEF4Delphi visit : | ||||
| //         https://www.briskbard.com/index.php?lang=en&pageid=cef | ||||
| // | ||||
| //        Copyright © 2018 Salvador Díaz Fau. All rights reserved. | ||||
| // | ||||
| // ************************************************************************ | ||||
| // ************ vvvv Original license and comments below vvvv ************* | ||||
| // ************************************************************************ | ||||
| (* | ||||
|  *                       Delphi Chromium Embedded 3 | ||||
|  * | ||||
|  * Usage allowed under the restrictions of the Lesser GNU General Public License | ||||
|  * or alternatively the restrictions of the Mozilla Public License 1.1 | ||||
|  * | ||||
|  * Software distributed under the License is distributed on an "AS IS" basis, | ||||
|  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for | ||||
|  * the specific language governing rights and limitations under the License. | ||||
|  * | ||||
|  * Unit owner : Henri Gourvest <hgourvest@gmail.com> | ||||
|  * Web site   : http://www.progdigy.com | ||||
|  * Repository : http://code.google.com/p/delphichromiumembedded/ | ||||
|  * Group      : http://groups.google.com/group/delphichromiumembedded | ||||
|  * | ||||
|  * Embarcadero Technologies, Inc is not permitted to use or redistribute | ||||
|  * this source code without explicit permission. | ||||
|  * | ||||
|  *) | ||||
|  | ||||
| program SchemeRegistrationBrowser; | ||||
|  | ||||
| {$I cef.inc} | ||||
|  | ||||
| uses | ||||
|   Forms, Interfaces, | ||||
|   Windows, | ||||
|   uCEFApplication, | ||||
|   uSchemeRegistrationBrowser in 'uSchemeRegistrationBrowser.pas' {SchemeRegistrationBrowserFrm}, | ||||
|   uHelloScheme in 'uHelloScheme.pas'; | ||||
|  | ||||
| //{$R *.res} | ||||
|  | ||||
| {$SetPEFlags IMAGE_FILE_LARGE_ADDRESS_AWARE} | ||||
|  | ||||
| begin | ||||
|   // GlobalCEFApp creation and initialization moved to a different unit to fix the memory leak described in the bug #89 | ||||
|   // https://github.com/salvadordf/CEF4Delphi/issues/89 | ||||
|   CreateGlobalCEFApp; | ||||
|  | ||||
|   if GlobalCEFApp.StartMainProcess then | ||||
|     begin | ||||
|       Application.Initialize; | ||||
|       Application.MainFormOnTaskbar := True; | ||||
|       Application.CreateForm(TSchemeRegistrationBrowserFrm, SchemeRegistrationBrowserFrm); | ||||
|       Application.Run; | ||||
|     end; | ||||
|  | ||||
|   DestroyGlobalCEFApp; | ||||
| end. | ||||
| @@ -0,0 +1,88 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <CONFIG> | ||||
|   <ProjectOptions> | ||||
|     <Version Value="11"/> | ||||
|     <PathDelim Value="\"/> | ||||
|     <General> | ||||
|       <Flags> | ||||
|         <MainUnitHasUsesSectionForAllUnits Value="False"/> | ||||
|         <MainUnitHasCreateFormStatements Value="False"/> | ||||
|         <MainUnitHasTitleStatement Value="False"/> | ||||
|         <MainUnitHasScaledStatement Value="False"/> | ||||
|       </Flags> | ||||
|       <SessionStorage Value="InProjectDir"/> | ||||
|       <MainUnit Value="0"/> | ||||
|       <Title Value="SchemeRegistrationBrowser_sp"/> | ||||
|       <UseAppBundle Value="False"/> | ||||
|       <ResourceType Value="res"/> | ||||
|     </General> | ||||
|     <BuildModes Count="1"> | ||||
|       <Item1 Name="Default" Default="True"/> | ||||
|     </BuildModes> | ||||
|     <PublishOptions> | ||||
|       <Version Value="2"/> | ||||
|       <UseFileFilters Value="True"/> | ||||
|     </PublishOptions> | ||||
|     <RunParams> | ||||
|       <FormatVersion Value="2"/> | ||||
|       <Modes Count="0"/> | ||||
|     </RunParams> | ||||
|     <RequiredPackages Count="2"> | ||||
|       <Item1> | ||||
|         <PackageName Value="CEF4Delphi_Lazarus"/> | ||||
|       </Item1> | ||||
|       <Item2> | ||||
|         <PackageName Value="LCL"/> | ||||
|       </Item2> | ||||
|     </RequiredPackages> | ||||
|     <Units Count="2"> | ||||
|       <Unit0> | ||||
|         <Filename Value="SchemeRegistrationBrowser_sp.lpr"/> | ||||
|         <IsPartOfProject Value="True"/> | ||||
|       </Unit0> | ||||
|       <Unit1> | ||||
|         <Filename Value="uCEFLoader.pas"/> | ||||
|         <IsPartOfProject Value="True"/> | ||||
|       </Unit1> | ||||
|     </Units> | ||||
|   </ProjectOptions> | ||||
|   <CompilerOptions> | ||||
|     <Version Value="11"/> | ||||
|     <PathDelim Value="\"/> | ||||
|     <Target> | ||||
|       <Filename Value="..\..\..\bin\SchemeRegistrationBrowser_sp"/> | ||||
|     </Target> | ||||
|     <SearchPaths> | ||||
|       <IncludeFiles Value="$(ProjOutDir)"/> | ||||
|       <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/> | ||||
|     </SearchPaths> | ||||
|     <Parsing> | ||||
|       <SyntaxOptions> | ||||
|         <SyntaxMode Value="Delphi"/> | ||||
|       </SyntaxOptions> | ||||
|     </Parsing> | ||||
|     <Linking> | ||||
|       <Options> | ||||
|         <Win32> | ||||
|           <GraphicApplication Value="True"/> | ||||
|         </Win32> | ||||
|       </Options> | ||||
|     </Linking> | ||||
|     <Other> | ||||
|       <CustomOptions Value="-dBorland -dVer150 -dDelphi7 -dCompiler6_Up -dPUREPASCAL"/> | ||||
|     </Other> | ||||
|   </CompilerOptions> | ||||
|   <Debugging> | ||||
|     <Exceptions Count="3"> | ||||
|       <Item1> | ||||
|         <Name Value="EAbort"/> | ||||
|       </Item1> | ||||
|       <Item2> | ||||
|         <Name Value="ECodetoolError"/> | ||||
|       </Item2> | ||||
|       <Item3> | ||||
|         <Name Value="EFOpenError"/> | ||||
|       </Item3> | ||||
|     </Exceptions> | ||||
|   </Debugging> | ||||
| </CONFIG> | ||||
| @@ -0,0 +1,67 @@ | ||||
| // ************************************************************************ | ||||
| // ***************************** CEF4Delphi ******************************* | ||||
| // ************************************************************************ | ||||
| // | ||||
| // CEF4Delphi is based on DCEF3 which uses CEF3 to embed a chromium-based | ||||
| // browser in Delphi applications. | ||||
| // | ||||
| // The original license of DCEF3 still applies to CEF4Delphi. | ||||
| // | ||||
| // For more information about CEF4Delphi visit : | ||||
| //         https://www.briskbard.com/index.php?lang=en&pageid=cef | ||||
| // | ||||
| //        Copyright © 2018 Salvador Díaz Fau. All rights reserved. | ||||
| // | ||||
| // ************************************************************************ | ||||
| // ************ vvvv Original license and comments below vvvv ************* | ||||
| // ************************************************************************ | ||||
| (* | ||||
|  *                       Delphi Chromium Embedded 3 | ||||
|  * | ||||
|  * Usage allowed under the restrictions of the Lesser GNU General Public License | ||||
|  * or alternatively the restrictions of the Mozilla Public License 1.1 | ||||
|  * | ||||
|  * Software distributed under the License is distributed on an "AS IS" basis, | ||||
|  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for | ||||
|  * the specific language governing rights and limitations under the License. | ||||
|  * | ||||
|  * Unit owner : Henri Gourvest <hgourvest@gmail.com> | ||||
|  * Web site   : http://www.progdigy.com | ||||
|  * Repository : http://code.google.com/p/delphichromiumembedded/ | ||||
|  * Group      : http://groups.google.com/group/delphichromiumembedded | ||||
|  * | ||||
|  * Embarcadero Technologies, Inc is not permitted to use or redistribute | ||||
|  * this source code without explicit permission. | ||||
|  * | ||||
|  *) | ||||
|  | ||||
| program SchemeRegistrationBrowser_sp; | ||||
|  | ||||
| {$MODE Delphi} | ||||
|  | ||||
| {$I cef.inc} | ||||
|  | ||||
| uses | ||||
|   LCLIntf, LCLType, LMessages, Forms, Interfaces, | ||||
|   uCEFApplicationCore, uCEFConstants, uCEFSchemeRegistrar; | ||||
|  | ||||
| // CEF3 needs to set the LARGEADDRESSAWARE flag which allows 32-bit processes | ||||
| // to use up to 3GB of RAM. | ||||
| {$SetPEFlags $20} | ||||
|  | ||||
| // It's necessary to register the custom scheme in all CEF subprocesses | ||||
| procedure GlobalCEFApp_OnRegCustomSchemes(const registrar: TCefSchemeRegistrarRef); | ||||
| begin | ||||
|   registrar.AddCustomScheme('hello', CEF_SCHEME_OPTION_STANDARD or CEF_SCHEME_OPTION_LOCAL); | ||||
| end;    | ||||
|  | ||||
| begin | ||||
|   GlobalCEFApp                     := TCefApplicationCore.Create;    | ||||
|   GlobalCEFApp.OnRegCustomSchemes  := GlobalCEFApp_OnRegCustomSchemes;        | ||||
|   GlobalCEFApp.LogFile             := 'debug.log'; | ||||
|   GlobalCEFApp.LogSeverity         := LOGSEVERITY_INFO; | ||||
|   GlobalCEFApp.StartSubProcess; | ||||
|   GlobalCEFApp.Free; | ||||
|   GlobalCEFApp := nil; | ||||
| end. | ||||
|  | ||||
| @@ -0,0 +1,468 @@ | ||||
| // ************************************************************************ | ||||
| // ***************************** CEF4Delphi ******************************* | ||||
| // ************************************************************************ | ||||
| // | ||||
| // CEF4Delphi is based on DCEF3 which uses CEF3 to embed a chromium-based | ||||
| // browser in Delphi applications. | ||||
| // | ||||
| // The original license of DCEF3 still applies to CEF4Delphi. | ||||
| // | ||||
| // For more information about CEF4Delphi visit : | ||||
| //         https://www.briskbard.com/index.php?lang=en&pageid=cef | ||||
| // | ||||
| //        Copyright � 2017 Salvador Diaz Fau. All rights reserved. | ||||
| // | ||||
| // ************************************************************************ | ||||
| // ************ vvvv Original license and comments below vvvv ************* | ||||
| // ************************************************************************ | ||||
| (* | ||||
|  *                       Delphi Chromium Embedded 3 | ||||
|  * | ||||
|  * Usage allowed under the restrictions of the Lesser GNU General Public License | ||||
|  * or alternatively the restrictions of the Mozilla Public License 1.1 | ||||
|  * | ||||
|  * Software distributed under the License is distributed on an "AS IS" basis, | ||||
|  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for | ||||
|  * the specific language governing rights and limitations under the License. | ||||
|  * | ||||
|  * Unit owner : Henri Gourvest <hgourvest@gmail.com> | ||||
|  * Web site   : http://www.progdigy.com | ||||
|  * Repository : http://code.google.com/p/delphichromiumembedded/ | ||||
|  * Group      : http://groups.google.com/group/delphichromiumembedded | ||||
|  * | ||||
|  * Embarcadero Technologies, Inc is not permitted to use or redistribute | ||||
|  * this source code without explicit permission. | ||||
|  * | ||||
|  *) | ||||
|  | ||||
|  // The complete list of compiler versions is here : | ||||
|  // http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Compiler_Versions | ||||
|  | ||||
| {$DEFINE DELPHI_VERSION_UNKNOW} | ||||
|  | ||||
| // Delphi 5 | ||||
| {$IFDEF VER130} | ||||
|   {$UNDEF DELPHI_VERSION_UNKNOW} | ||||
|   {$DEFINE DELPHI5_UP} | ||||
| {$ENDIF} | ||||
|  | ||||
| // Delphi 6 | ||||
| {$IFDEF VER140} | ||||
|   {$UNDEF DELPHI_VERSION_UNKNOW} | ||||
|   {$DEFINE DELPHI5_UP} | ||||
|   {$DEFINE DELPHI6_UP} | ||||
| {$ENDIF} | ||||
|  | ||||
| // Delphi 7 | ||||
| {$IFDEF VER150} | ||||
|   {$UNDEF DELPHI_VERSION_UNKNOW} | ||||
|   {$DEFINE DELPHI5_UP} | ||||
|   {$DEFINE DELPHI6_UP} | ||||
|   {$DEFINE DELPHI7_UP} | ||||
| {$ENDIF} | ||||
|  | ||||
| // Delphi 8 | ||||
| {$IFDEF VER160} | ||||
|   {$UNDEF DELPHI_VERSION_UNKNOW} | ||||
|   {$DEFINE DELPHI5_UP} | ||||
|   {$DEFINE DELPHI6_UP} | ||||
|   {$DEFINE DELPHI7_UP} | ||||
|   {$DEFINE DELPHI8_UP} | ||||
| {$ENDIF} | ||||
|  | ||||
| // Delphi 2005 | ||||
| {$IFDEF VER170} | ||||
|   {$UNDEF DELPHI_VERSION_UNKNOW} | ||||
|   {$DEFINE DELPHI5_UP} | ||||
|   {$DEFINE DELPHI6_UP} | ||||
|   {$DEFINE DELPHI7_UP} | ||||
|   {$DEFINE DELPHI8_UP} | ||||
|   {$DEFINE DELPHI9_UP} | ||||
| {$ENDIF} | ||||
|  | ||||
| {$IFDEF VER180} | ||||
|   {$UNDEF DELPHI_VERSION_UNKNOW} | ||||
|   // Delphi 2007 | ||||
|   {$IFDEF VER185} | ||||
|     {$DEFINE DELPHI5_UP} | ||||
|     {$DEFINE DELPHI6_UP} | ||||
|     {$DEFINE DELPHI7_UP} | ||||
|     {$DEFINE DELPHI8_UP} | ||||
|     {$DEFINE DELPHI9_UP} | ||||
|     {$DEFINE DELPHI10_UP} | ||||
|     {$DEFINE DELPHI11_UP} | ||||
|   // Delphi 2006 | ||||
|   {$ELSE} | ||||
|     {$DEFINE DELPHI5_UP} | ||||
|     {$DEFINE DELPHI6_UP} | ||||
|     {$DEFINE DELPHI7_UP} | ||||
|     {$DEFINE DELPHI8_UP} | ||||
|     {$DEFINE DELPHI9_UP} | ||||
|     {$DEFINE DELPHI10_UP} | ||||
|   {$ENDIF} | ||||
| {$ENDIF} | ||||
|  | ||||
| // Delphi 2009 | ||||
| {$IFDEF VER200} | ||||
|   {$UNDEF DELPHI_VERSION_UNKNOW} | ||||
|   {$DEFINE DELPHI5_UP} | ||||
|   {$DEFINE DELPHI6_UP} | ||||
|   {$DEFINE DELPHI7_UP} | ||||
|   {$DEFINE DELPHI8_UP} | ||||
|   {$DEFINE DELPHI9_UP} | ||||
|   {$DEFINE DELPHI10_UP} | ||||
|   {$DEFINE DELPHI11_UP} | ||||
|   {$DEFINE DELPHI12_UP} | ||||
| {$ENDIF} | ||||
|  | ||||
| //Delphi 2010 | ||||
| {$IFDEF VER210} | ||||
|   {$UNDEF DELPHI_VERSION_UNKNOW} | ||||
|   {$DEFINE DELPHI5_UP} | ||||
|   {$DEFINE DELPHI6_UP} | ||||
|   {$DEFINE DELPHI7_UP} | ||||
|   {$DEFINE DELPHI8_UP} | ||||
|   {$DEFINE DELPHI9_UP} | ||||
|   {$DEFINE DELPHI10_UP} | ||||
|   {$DEFINE DELPHI11_UP} | ||||
|   {$DEFINE DELPHI12_UP} | ||||
|   {$DEFINE DELPHI14_UP} | ||||
| {$ENDIF} | ||||
|  | ||||
| // Delphi XE | ||||
| {$IFDEF VER220} | ||||
|   {$UNDEF DELPHI_VERSION_UNKNOW} | ||||
|   {$DEFINE DELPHI5_UP} | ||||
|   {$DEFINE DELPHI6_UP} | ||||
|   {$DEFINE DELPHI7_UP} | ||||
|   {$DEFINE DELPHI8_UP} | ||||
|   {$DEFINE DELPHI9_UP} | ||||
|   {$DEFINE DELPHI10_UP} | ||||
|   {$DEFINE DELPHI11_UP} | ||||
|   {$DEFINE DELPHI12_UP} | ||||
|   {$DEFINE DELPHI14_UP} | ||||
|   {$DEFINE DELPHI15_UP} | ||||
| {$ENDIF} | ||||
|  | ||||
| // Delphi XE2  (First FireMonkey and 64bit compiler) | ||||
| {$IFDEF VER230} | ||||
|   {$UNDEF DELPHI_VERSION_UNKNOW} | ||||
|   {$DEFINE DELPHI5_UP} | ||||
|   {$DEFINE DELPHI6_UP} | ||||
|   {$DEFINE DELPHI7_UP} | ||||
|   {$DEFINE DELPHI8_UP} | ||||
|   {$DEFINE DELPHI9_UP} | ||||
|   {$DEFINE DELPHI10_UP} | ||||
|   {$DEFINE DELPHI11_UP} | ||||
|   {$DEFINE DELPHI12_UP} | ||||
|   {$DEFINE DELPHI14_UP} | ||||
|   {$DEFINE DELPHI15_UP} | ||||
|   {$DEFINE DELPHI16_UP} | ||||
| {$ENDIF} | ||||
|  | ||||
| // Delphi XE3 | ||||
| {$IFDEF VER240} | ||||
|   {$UNDEF DELPHI_VERSION_UNKNOW} | ||||
|   {$DEFINE DELPHI5_UP} | ||||
|   {$DEFINE DELPHI6_UP} | ||||
|   {$DEFINE DELPHI7_UP} | ||||
|   {$DEFINE DELPHI8_UP} | ||||
|   {$DEFINE DELPHI9_UP} | ||||
|   {$DEFINE DELPHI10_UP} | ||||
|   {$DEFINE DELPHI11_UP} | ||||
|   {$DEFINE DELPHI12_UP} | ||||
|   {$DEFINE DELPHI14_UP} | ||||
|   {$DEFINE DELPHI15_UP} | ||||
|   {$DEFINE DELPHI16_UP} | ||||
|   {$DEFINE DELPHI17_UP} | ||||
| {$ENDIF} | ||||
|  | ||||
| // Delphi XE4 | ||||
| {$IFDEF VER250} | ||||
|   {$UNDEF DELPHI_VERSION_UNKNOW} | ||||
|   {$DEFINE DELPHI5_UP} | ||||
|   {$DEFINE DELPHI6_UP} | ||||
|   {$DEFINE DELPHI7_UP} | ||||
|   {$DEFINE DELPHI8_UP} | ||||
|   {$DEFINE DELPHI9_UP} | ||||
|   {$DEFINE DELPHI10_UP} | ||||
|   {$DEFINE DELPHI11_UP} | ||||
|   {$DEFINE DELPHI12_UP} | ||||
|   {$DEFINE DELPHI14_UP} | ||||
|   {$DEFINE DELPHI15_UP} | ||||
|   {$DEFINE DELPHI16_UP} | ||||
|   {$DEFINE DELPHI17_UP} | ||||
|   {$DEFINE DELPHI18_UP} | ||||
| {$ENDIF} | ||||
|  | ||||
| // Delphi XE5 | ||||
| {$IFDEF VER260} | ||||
|   {$UNDEF DELPHI_VERSION_UNKNOW} | ||||
|   {$DEFINE DELPHI5_UP} | ||||
|   {$DEFINE DELPHI6_UP} | ||||
|   {$DEFINE DELPHI7_UP} | ||||
|   {$DEFINE DELPHI8_UP} | ||||
|   {$DEFINE DELPHI9_UP} | ||||
|   {$DEFINE DELPHI10_UP} | ||||
|   {$DEFINE DELPHI11_UP} | ||||
|   {$DEFINE DELPHI12_UP} | ||||
|   {$DEFINE DELPHI14_UP} | ||||
|   {$DEFINE DELPHI15_UP} | ||||
|   {$DEFINE DELPHI16_UP} | ||||
|   {$DEFINE DELPHI17_UP} | ||||
|   {$DEFINE DELPHI18_UP} | ||||
|   {$DEFINE DELPHI19_UP} | ||||
| {$ENDIF} | ||||
|  | ||||
| // Delphi XE6 | ||||
| {$IFDEF VER270} | ||||
|   {$UNDEF DELPHI_VERSION_UNKNOW} | ||||
|   {$DEFINE DELPHI5_UP} | ||||
|   {$DEFINE DELPHI6_UP} | ||||
|   {$DEFINE DELPHI7_UP} | ||||
|   {$DEFINE DELPHI8_UP} | ||||
|   {$DEFINE DELPHI9_UP} | ||||
|   {$DEFINE DELPHI10_UP} | ||||
|   {$DEFINE DELPHI11_UP} | ||||
|   {$DEFINE DELPHI12_UP} | ||||
|   {$DEFINE DELPHI14_UP} | ||||
|   {$DEFINE DELPHI15_UP} | ||||
|   {$DEFINE DELPHI16_UP} | ||||
|   {$DEFINE DELPHI17_UP} | ||||
|   {$DEFINE DELPHI18_UP} | ||||
|   {$DEFINE DELPHI19_UP} | ||||
|   {$DEFINE DELPHI20_UP} | ||||
| {$ENDIF} | ||||
|  | ||||
| // Delphi XE7 | ||||
| {$IFDEF VER280} | ||||
|   {$UNDEF DELPHI_VERSION_UNKNOW} | ||||
|   {$DEFINE DELPHI5_UP} | ||||
|   {$DEFINE DELPHI6_UP} | ||||
|   {$DEFINE DELPHI7_UP} | ||||
|   {$DEFINE DELPHI8_UP} | ||||
|   {$DEFINE DELPHI9_UP} | ||||
|   {$DEFINE DELPHI10_UP} | ||||
|   {$DEFINE DELPHI11_UP} | ||||
|   {$DEFINE DELPHI12_UP} | ||||
|   {$DEFINE DELPHI14_UP} | ||||
|   {$DEFINE DELPHI15_UP} | ||||
|   {$DEFINE DELPHI16_UP} | ||||
|   {$DEFINE DELPHI17_UP} | ||||
|   {$DEFINE DELPHI18_UP} | ||||
|   {$DEFINE DELPHI19_UP} | ||||
|   {$DEFINE DELPHI20_UP} | ||||
|   {$DEFINE DELPHI21_UP} | ||||
| {$ENDIF} | ||||
|  | ||||
| // Delphi XE8 | ||||
| {$IFDEF VER290} | ||||
|   {$UNDEF DELPHI_VERSION_UNKNOW} | ||||
|   {$DEFINE DELPHI5_UP} | ||||
|   {$DEFINE DELPHI6_UP} | ||||
|   {$DEFINE DELPHI7_UP} | ||||
|   {$DEFINE DELPHI8_UP} | ||||
|   {$DEFINE DELPHI9_UP} | ||||
|   {$DEFINE DELPHI10_UP} | ||||
|   {$DEFINE DELPHI11_UP} | ||||
|   {$DEFINE DELPHI12_UP} | ||||
|   {$DEFINE DELPHI14_UP} | ||||
|   {$DEFINE DELPHI15_UP} | ||||
|   {$DEFINE DELPHI16_UP} | ||||
|   {$DEFINE DELPHI17_UP} | ||||
|   {$DEFINE DELPHI18_UP} | ||||
|   {$DEFINE DELPHI19_UP} | ||||
|   {$DEFINE DELPHI20_UP} | ||||
|   {$DEFINE DELPHI21_UP} | ||||
|   {$DEFINE DELPHI22_UP} | ||||
| {$ENDIF VER290} | ||||
|  | ||||
| // Rad Studio 10 - Delphi Seattle | ||||
| {$IFDEF VER300} | ||||
|   {$UNDEF DELPHI_VERSION_UNKNOW} | ||||
|   {$DEFINE DELPHI5_UP} | ||||
|   {$DEFINE DELPHI6_UP} | ||||
|   {$DEFINE DELPHI7_UP} | ||||
|   {$DEFINE DELPHI8_UP} | ||||
|   {$DEFINE DELPHI9_UP} | ||||
|   {$DEFINE DELPHI10_UP} | ||||
|   {$DEFINE DELPHI11_UP} | ||||
|   {$DEFINE DELPHI12_UP} | ||||
|   {$DEFINE DELPHI14_UP} | ||||
|   {$DEFINE DELPHI15_UP} | ||||
|   {$DEFINE DELPHI16_UP} | ||||
|   {$DEFINE DELPHI17_UP} | ||||
|   {$DEFINE DELPHI18_UP} | ||||
|   {$DEFINE DELPHI19_UP} | ||||
|   {$DEFINE DELPHI20_UP} | ||||
|   {$DEFINE DELPHI21_UP} | ||||
|   {$DEFINE DELPHI22_UP} | ||||
|   {$DEFINE DELPHI23_UP} | ||||
| {$ENDIF} | ||||
|  | ||||
| // Rad Studio 10.1 - Delphi Berlin | ||||
| {$IFDEF VER310} | ||||
|   {$UNDEF DELPHI_VERSION_UNKNOW} | ||||
|   {$DEFINE DELPHI5_UP} | ||||
|   {$DEFINE DELPHI6_UP} | ||||
|   {$DEFINE DELPHI7_UP} | ||||
|   {$DEFINE DELPHI8_UP} | ||||
|   {$DEFINE DELPHI9_UP} | ||||
|   {$DEFINE DELPHI10_UP} | ||||
|   {$DEFINE DELPHI11_UP} | ||||
|   {$DEFINE DELPHI12_UP} | ||||
|   {$DEFINE DELPHI14_UP} | ||||
|   {$DEFINE DELPHI15_UP} | ||||
|   {$DEFINE DELPHI16_UP} | ||||
|   {$DEFINE DELPHI17_UP} | ||||
|   {$DEFINE DELPHI18_UP} | ||||
|   {$DEFINE DELPHI19_UP} | ||||
|   {$DEFINE DELPHI20_UP} | ||||
|   {$DEFINE DELPHI21_UP} | ||||
|   {$DEFINE DELPHI22_UP} | ||||
|   {$DEFINE DELPHI23_UP} | ||||
|   {$DEFINE DELPHI24_UP} | ||||
| {$ENDIF} | ||||
|  | ||||
| // Rad Studio 10.2 - Delphi Tokyo | ||||
| {$IFDEF VER320} | ||||
|   {$UNDEF DELPHI_VERSION_UNKNOW} | ||||
|   {$DEFINE DELPHI5_UP} | ||||
|   {$DEFINE DELPHI6_UP} | ||||
|   {$DEFINE DELPHI7_UP} | ||||
|   {$DEFINE DELPHI8_UP} | ||||
|   {$DEFINE DELPHI9_UP} | ||||
|   {$DEFINE DELPHI10_UP} | ||||
|   {$DEFINE DELPHI11_UP} | ||||
|   {$DEFINE DELPHI12_UP} | ||||
|   {$DEFINE DELPHI14_UP} | ||||
|   {$DEFINE DELPHI15_UP} | ||||
|   {$DEFINE DELPHI16_UP} | ||||
|   {$DEFINE DELPHI17_UP} | ||||
|   {$DEFINE DELPHI18_UP} | ||||
|   {$DEFINE DELPHI19_UP} | ||||
|   {$DEFINE DELPHI20_UP} | ||||
|   {$DEFINE DELPHI21_UP} | ||||
|   {$DEFINE DELPHI22_UP} | ||||
|   {$DEFINE DELPHI23_UP} | ||||
|   {$DEFINE DELPHI24_UP} | ||||
|   {$DEFINE DELPHI25_UP} | ||||
| {$ENDIF} | ||||
|  | ||||
| // Rad Studio 10.3 - Delphi Rio | ||||
| {$IFDEF VER330} | ||||
|   {$UNDEF DELPHI_VERSION_UNKNOW} | ||||
|   {$DEFINE DELPHI5_UP} | ||||
|   {$DEFINE DELPHI6_UP} | ||||
|   {$DEFINE DELPHI7_UP} | ||||
|   {$DEFINE DELPHI8_UP} | ||||
|   {$DEFINE DELPHI9_UP} | ||||
|   {$DEFINE DELPHI10_UP} | ||||
|   {$DEFINE DELPHI11_UP} | ||||
|   {$DEFINE DELPHI12_UP} | ||||
|   {$DEFINE DELPHI14_UP} | ||||
|   {$DEFINE DELPHI15_UP} | ||||
|   {$DEFINE DELPHI16_UP} | ||||
|   {$DEFINE DELPHI17_UP} | ||||
|   {$DEFINE DELPHI18_UP} | ||||
|   {$DEFINE DELPHI19_UP} | ||||
|   {$DEFINE DELPHI20_UP} | ||||
|   {$DEFINE DELPHI21_UP} | ||||
|   {$DEFINE DELPHI22_UP} | ||||
|   {$DEFINE DELPHI23_UP} | ||||
|   {$DEFINE DELPHI24_UP} | ||||
|   {$DEFINE DELPHI25_UP} | ||||
|   {$DEFINE DELPHI26_UP} | ||||
| {$ENDIF} | ||||
|  | ||||
| // Rad Studio 10.4 - Delphi Sydney | ||||
| {$IFDEF VER340} | ||||
|   {$UNDEF DELPHI_VERSION_UNKNOW} | ||||
|   {$DEFINE DELPHI5_UP} | ||||
|   {$DEFINE DELPHI6_UP} | ||||
|   {$DEFINE DELPHI7_UP} | ||||
|   {$DEFINE DELPHI8_UP} | ||||
|   {$DEFINE DELPHI9_UP} | ||||
|   {$DEFINE DELPHI10_UP} | ||||
|   {$DEFINE DELPHI11_UP} | ||||
|   {$DEFINE DELPHI12_UP} | ||||
|   {$DEFINE DELPHI14_UP} | ||||
|   {$DEFINE DELPHI15_UP} | ||||
|   {$DEFINE DELPHI16_UP} | ||||
|   {$DEFINE DELPHI17_UP} | ||||
|   {$DEFINE DELPHI18_UP} | ||||
|   {$DEFINE DELPHI19_UP} | ||||
|   {$DEFINE DELPHI20_UP} | ||||
|   {$DEFINE DELPHI21_UP} | ||||
|   {$DEFINE DELPHI22_UP} | ||||
|   {$DEFINE DELPHI23_UP} | ||||
|   {$DEFINE DELPHI24_UP} | ||||
|   {$DEFINE DELPHI25_UP} | ||||
|   {$DEFINE DELPHI26_UP} | ||||
|   {$DEFINE DELPHI27_UP} | ||||
| {$ENDIF} | ||||
|  | ||||
| {$IFDEF FPC} | ||||
|   {$DEFINE SUPPORTS_INLINE} | ||||
|   {$IF DEFINED(FPC_FULLVERSION) AND (FPC_FULLVERSION >= 30200)} | ||||
|     {$DEFINE FPC_VER_320} | ||||
|   {$IFEND} | ||||
| {$ELSE} | ||||
|   {$IFDEF DELPHI_VERSION_UNKNOW} | ||||
|     {$DEFINE DELPHI5_UP} | ||||
|     {$DEFINE DELPHI6_UP} | ||||
|     {$DEFINE DELPHI7_UP} | ||||
|     {$DEFINE DELPHI8_UP} | ||||
|     {$DEFINE DELPHI9_UP} | ||||
|     {$DEFINE DELPHI10_UP} | ||||
|     {$DEFINE DELPHI11_UP} | ||||
|     {$DEFINE DELPHI12_UP} | ||||
|     {$DEFINE DELPHI14_UP} | ||||
|     {$DEFINE DELPHI15_UP} | ||||
|     {$DEFINE DELPHI16_UP} | ||||
|     {$DEFINE DELPHI17_UP} | ||||
|     {$DEFINE DELPHI18_UP} | ||||
|     {$DEFINE DELPHI19_UP} | ||||
|     {$DEFINE DELPHI20_UP} | ||||
|     {$DEFINE DELPHI21_UP} | ||||
|     {$DEFINE DELPHI22_UP} | ||||
|     {$DEFINE DELPHI23_UP} | ||||
|     {$DEFINE DELPHI24_UP} | ||||
|     {$DEFINE DELPHI25_UP} | ||||
|     {$DEFINE DELPHI26_UP} | ||||
|     {$DEFINE DELPHI27_UP} | ||||
|   {$ENDIF} | ||||
| {$ENDIF} | ||||
|  | ||||
| {$IFDEF DELPHI9_UP} | ||||
|   {$DEFINE SUPPORTS_INLINE} | ||||
| {$ENDIF} | ||||
|  | ||||
| {$IF DEFINED(CPUX32) OR | ||||
|      DEFINED(CPU386) OR | ||||
|      DEFINED(CPUi386) OR | ||||
|      DEFINED(CPUPOWERPC32) OR | ||||
|      DEFINED(CPUSPARC32) OR | ||||
|      DEFINED(CPU32BITS) OR | ||||
|      DEFINED(CPUARM32) OR | ||||
|      DEFINED(WIN32) OR | ||||
|      DEFINED(IOS32) OR | ||||
|      DEFINED(MACOS32) OR | ||||
|      DEFINED(LINUX32) OR | ||||
|      DEFINED(POSIX32) OR | ||||
|      DEFINED(ANDROID32)} | ||||
|   {$DEFINE TARGET_32BITS} | ||||
| {$IFEND} | ||||
|  | ||||
| // Delphi uses MACOS for the new MacOSX and DARWIN is not defined | ||||
| // FPC uses DARWIN for the new MacOSX and MACOS is defined for the classic Macintosh OS (System 7) | ||||
| // We define MACOSX to avoid conflicts in both situations | ||||
| {$IFDEF FPC} | ||||
|   {$IFDEF DARWIN} | ||||
|     {$DEFINE MACOSX} | ||||
|   {$ENDIF} | ||||
| {$ELSE} | ||||
|   {$IFDEF MACOS} | ||||
|     {$DEFINE MACOSX} | ||||
|   {$ENDIF} | ||||
| {$ENDIF} | ||||
| @@ -0,0 +1,210 @@ | ||||
| // ************************************************************************ | ||||
| // ***************************** CEF4Delphi ******************************* | ||||
| // ************************************************************************ | ||||
| // | ||||
| // CEF4Delphi is based on DCEF3 which uses CEF 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 � 2021 Salvador Diaz Fau. All rights reserved. | ||||
| // | ||||
| // ************************************************************************ | ||||
| // ************ vvvv Original license and comments below vvvv ************* | ||||
| // ************************************************************************ | ||||
| (* | ||||
|  *                       Delphi Chromium Embedded 3 | ||||
|  * | ||||
|  * Usage allowed under the restrictions of the Lesser GNU General Public License | ||||
|  * or alternatively the restrictions of the Mozilla Public License 1.1 | ||||
|  * | ||||
|  * Software distributed under the License is distributed on an "AS IS" basis, | ||||
|  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for | ||||
|  * the specific language governing rights and limitations under the License. | ||||
|  * | ||||
|  * Unit owner : Henri Gourvest <hgourvest@gmail.com> | ||||
|  * Web site   : http://www.progdigy.com | ||||
|  * Repository : http://code.google.com/p/delphichromiumembedded/ | ||||
|  * Group      : http://groups.google.com/group/delphichromiumembedded | ||||
|  * | ||||
|  * Embarcadero Technologies, Inc is not permitted to use or redistribute | ||||
|  * this source code without explicit permission. | ||||
|  * | ||||
|  *) | ||||
|  | ||||
| unit uHelloScheme; | ||||
|  | ||||
| {$I cef.inc} | ||||
|  | ||||
| interface | ||||
| uses | ||||
|   Classes, Windows, SysUtils, | ||||
|   uCEFInterfaces, uCEFTypes, uCEFResourceHandler, uCEFMiscFunctions; | ||||
|  | ||||
| type | ||||
|   THelloScheme = class(TCefResourceHandlerOwn) | ||||
|     private | ||||
|       FStream      : TMemoryStream; | ||||
|       FMimeType    : string; | ||||
|       FStatusText  : string; | ||||
|       FStatus      : Integer; | ||||
|  | ||||
|     protected | ||||
|       function  ProcessRequest(const request: ICefRequest; const callback: ICefCallback): Boolean; override; | ||||
|       procedure GetResponseHeaders(const response: ICefResponse; out responseLength: Int64; out redirectUrl: ustring); override; | ||||
|       function  ReadResponse(const dataOut: Pointer; bytesToRead: Integer; var bytesRead: Integer; const callback: ICefCallback): Boolean; override; | ||||
|  | ||||
|     public | ||||
|       constructor Create(const browser: ICefBrowser; const frame: ICefFrame; const schemeName: ustring; const request: ICefRequest); override; | ||||
|       destructor  Destroy; override; | ||||
|       procedure   AfterConstruction; override; | ||||
|   end; | ||||
|  | ||||
| implementation | ||||
|  | ||||
| constructor THelloScheme.Create(const browser    : ICefBrowser; | ||||
|                                 const frame      : ICefFrame; | ||||
|                                 const schemeName : ustring; | ||||
|                                 const request    : ICefRequest); | ||||
| begin | ||||
|   inherited Create(browser, frame, schemeName, request); | ||||
|  | ||||
|   FStream     := nil; | ||||
|   FStatus     := 0; | ||||
|   FMimeType   := ''; | ||||
|   FStatusText := ''; | ||||
| end; | ||||
|  | ||||
| destructor THelloScheme.Destroy; | ||||
| begin | ||||
|   if (FStream <> nil) then FreeAndNil(FStream); | ||||
|  | ||||
|   inherited Destroy; | ||||
| end; | ||||
|  | ||||
| procedure THelloScheme.AfterConstruction; | ||||
| begin | ||||
|   inherited AfterConstruction; | ||||
|  | ||||
|   FStream := TMemoryStream.Create; | ||||
| end; | ||||
|  | ||||
| procedure THelloScheme.GetResponseHeaders(const response       : ICefResponse; | ||||
|                                           out   responseLength : Int64; | ||||
|                                           out   redirectUrl    : ustring); | ||||
| begin | ||||
|   if (response <> nil) then | ||||
|     begin | ||||
|       response.Status     := FStatus; | ||||
|       response.StatusText := FStatusText; | ||||
|       response.MimeType   := FMimeType; | ||||
|     end; | ||||
|  | ||||
|   if (FStream <> nil) then | ||||
|     responseLength := FStream.Size | ||||
|    else | ||||
|     responseLength := 0; | ||||
| end; | ||||
|  | ||||
| function THelloScheme.ProcessRequest(const request : ICefRequest; const callback : ICefCallback): Boolean; | ||||
| var | ||||
|   TempFilename, TempExt : string; | ||||
|   TempParts : TUrlParts; | ||||
|   TempFile : TFileStream; | ||||
| begin | ||||
|   Result      := False; | ||||
|   FStatus     := 404; | ||||
|   FStatusText := 'ERROR'; | ||||
|   FMimeType   := ''; | ||||
|   TempFile    := nil; | ||||
|  | ||||
|   try | ||||
|     try | ||||
|       if (FStream <> nil) and (request <> nil) then | ||||
|         begin | ||||
|           TempFilename := ''; | ||||
|           FStream.Clear; | ||||
|  | ||||
|           if CefParseUrl(Request.URL, TempParts) then | ||||
|             begin | ||||
|               if (length(TempParts.path) > 0) and | ||||
|                  (TempParts.path <> '/') then | ||||
|                 begin | ||||
|                   TempFilename := TempParts.path; | ||||
|  | ||||
|                   if (length(TempFilename) > 0) and (TempFilename[1] = '/') then | ||||
|                     TempFilename := copy(TempFilename, 2, length(TempFilename)); | ||||
|  | ||||
|                   if (length(TempFilename) > 0) and (TempFilename[length(TempFilename)] = '/') then | ||||
|                     TempFilename := copy(TempFilename, 1, length(TempFilename) - 1); | ||||
|  | ||||
|                   if (length(TempFilename) > 0) and not(FileExists(TempFilename)) then | ||||
|                     TempFilename := ''; | ||||
|                 end; | ||||
|  | ||||
|               if (length(TempFilename) = 0) and | ||||
|                  (length(TempParts.host) > 0) and | ||||
|                  (TempParts.host <> '/') then | ||||
|                 begin | ||||
|                   TempFilename := TempParts.host; | ||||
|  | ||||
|                   if (length(TempFilename) > 0) and (TempFilename[1] = '/') then | ||||
|                     TempFilename := copy(TempFilename, 2, length(TempFilename)); | ||||
|  | ||||
|                   if (length(TempFilename) > 0) and (TempFilename[length(TempFilename)] = '/') then | ||||
|                     TempFilename := copy(TempFilename, 1, length(TempFilename) - 1); | ||||
|  | ||||
|                   if (length(TempFilename) > 0) and not(FileExists(TempFilename)) then | ||||
|                     TempFilename := ''; | ||||
|                 end; | ||||
|             end; | ||||
|  | ||||
|           if (length(TempFilename) > 0) then | ||||
|             begin | ||||
|               TempExt := ExtractFileExt(TempFilename); | ||||
|  | ||||
|               if (length(TempExt) > 0) and (TempExt[1] = '.') then | ||||
|                 TempExt := copy(TempExt, 2, length(TempExt)); | ||||
|  | ||||
|               Result      := True; | ||||
|               FStatus     := 200; | ||||
|               FStatusText := 'OK'; | ||||
|               FMimeType   := CefGetMimeType(TempExt); | ||||
|               TempFile    := TFileStream.Create(TempFilename, fmOpenRead); | ||||
|               TempFile.Seek(0, soFromBeginning); | ||||
|               FStream.LoadFromStream(TStream(TempFile)); | ||||
|             end; | ||||
|  | ||||
|           FStream.Seek(0, soFromBeginning); | ||||
|         end; | ||||
|     except | ||||
|       on e : exception do | ||||
|         if CustomExceptionHandler('THelloScheme.ProcessRequest', e) then raise; | ||||
|     end; | ||||
|   finally | ||||
|     if (callback <> nil) then callback.Cont; | ||||
|     if (TempFile <> nil) then FreeAndNil(TempFile); | ||||
|   end; | ||||
| end; | ||||
|  | ||||
| function THelloScheme.ReadResponse(const dataOut     : Pointer; | ||||
|                                          bytesToRead : Integer; | ||||
|                                    var   bytesRead   : Integer; | ||||
|                                    const callback    : ICefCallback): Boolean; | ||||
| begin | ||||
|   if (FStream <> nil) and (DataOut <> nil) then | ||||
|     begin | ||||
|       // This function will be called several times because the stream is bigger | ||||
|       // than bytesToRead. Each time we will copy a chunk of the stream to | ||||
|       // DataOut. | ||||
|       BytesRead := FStream.Read(DataOut^, BytesToRead); | ||||
|       Result    := (BytesRead > 0); | ||||
|     end | ||||
|    else | ||||
|     Result := False; | ||||
| end; | ||||
|  | ||||
| end. | ||||
| @@ -0,0 +1,82 @@ | ||||
| object SchemeRegistrationBrowserFrm: TSchemeRegistrationBrowserFrm | ||||
|   Left = 116 | ||||
|   Height = 652 | ||||
|   Top = 102 | ||||
|   Width = 980 | ||||
|   Caption = 'SchemeRegistrationBrowser' | ||||
|   ClientHeight = 652 | ||||
|   ClientWidth = 980 | ||||
|   Color = clBtnFace | ||||
|   Font.Color = clWindowText | ||||
|   Font.Height = -11 | ||||
|   Font.Name = 'Tahoma' | ||||
|   OnCloseQuery = FormCloseQuery | ||||
|   OnCreate = FormCreate | ||||
|   OnShow = FormShow | ||||
|   Position = poScreenCenter | ||||
|   LCLVersion = '2.0.12.0' | ||||
|   object AddressBarPnl: TPanel | ||||
|     Left = 0 | ||||
|     Height = 21 | ||||
|     Top = 0 | ||||
|     Width = 980 | ||||
|     Align = alTop | ||||
|     BevelOuter = bvNone | ||||
|     ClientHeight = 21 | ||||
|     ClientWidth = 980 | ||||
|     DoubleBuffered = True | ||||
|     Enabled = False | ||||
|     ParentDoubleBuffered = False | ||||
|     TabOrder = 0 | ||||
|     object GoBtn: TButton | ||||
|       Left = 949 | ||||
|       Height = 21 | ||||
|       Top = 0 | ||||
|       Width = 31 | ||||
|       Align = alRight | ||||
|       Caption = 'Go' | ||||
|       OnClick = GoBtnClick | ||||
|       TabOrder = 0 | ||||
|     end | ||||
|     object AddressCbx: TComboBox | ||||
|       Left = 0 | ||||
|       Height = 21 | ||||
|       Top = 0 | ||||
|       Width = 949 | ||||
|       Align = alClient | ||||
|       ItemHeight = 13 | ||||
|       ItemIndex = 1 | ||||
|       Items.Strings = ( | ||||
|         'https://www.google.com' | ||||
|         'hello://test.html' | ||||
|       ) | ||||
|       TabOrder = 1 | ||||
|       Text = 'hello://test.html' | ||||
|     end | ||||
|   end | ||||
|   object CEFWindowParent1: TCEFWindowParent | ||||
|     Left = 0 | ||||
|     Height = 631 | ||||
|     Top = 21 | ||||
|     Width = 980 | ||||
|     Align = alClient | ||||
|     TabOrder = 1 | ||||
|   end | ||||
|   object Chromium1: TChromium | ||||
|     OnBeforeContextMenu = Chromium1BeforeContextMenu | ||||
|     OnContextMenuCommand = Chromium1ContextMenuCommand | ||||
|     OnBeforePopup = Chromium1BeforePopup | ||||
|     OnAfterCreated = Chromium1AfterCreated | ||||
|     OnBeforeClose = Chromium1BeforeClose | ||||
|     OnClose = Chromium1Close | ||||
|     Left = 16 | ||||
|     Top = 40 | ||||
|   end | ||||
|   object Timer1: TTimer | ||||
|     Enabled = False | ||||
|     Interval = 300 | ||||
|     OnTimer = Timer1Timer | ||||
|     Left = 16 | ||||
|     Top = 96 | ||||
|   end | ||||
| end | ||||
| @@ -0,0 +1,297 @@ | ||||
| // ************************************************************************ | ||||
| // ***************************** CEF4Delphi ******************************* | ||||
| // ************************************************************************ | ||||
| // | ||||
| // CEF4Delphi is based on DCEF3 which uses CEF 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 � 2021 Salvador Diaz Fau. All rights reserved. | ||||
| // | ||||
| // ************************************************************************ | ||||
| // ************ vvvv Original license and comments below vvvv ************* | ||||
| // ************************************************************************ | ||||
| (* | ||||
|  *                       Delphi Chromium Embedded 3 | ||||
|  * | ||||
|  * Usage allowed under the restrictions of the Lesser GNU General Public License | ||||
|  * or alternatively the restrictions of the Mozilla Public License 1.1 | ||||
|  * | ||||
|  * Software distributed under the License is distributed on an "AS IS" basis, | ||||
|  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for | ||||
|  * the specific language governing rights and limitations under the License. | ||||
|  * | ||||
|  * Unit owner : Henri Gourvest <hgourvest@gmail.com> | ||||
|  * Web site   : http://www.progdigy.com | ||||
|  * Repository : http://code.google.com/p/delphichromiumembedded/ | ||||
|  * Group      : http://groups.google.com/group/delphichromiumembedded | ||||
|  * | ||||
|  * Embarcadero Technologies, Inc is not permitted to use or redistribute | ||||
|  * this source code without explicit permission. | ||||
|  * | ||||
|  *) | ||||
| {$mode delphi} | ||||
|  | ||||
|  | ||||
| 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, uCEFSchemeRegistrar, | ||||
|   uCEFTypes, uCEFConstants, uCEFWinControl, uCEFSentinel, uCEFChromiumEvents; | ||||
|  | ||||
| const | ||||
|   MINIBROWSER_CONTEXTMENU_REGSCHEME    = MENU_ID_USER_FIRST + 1; | ||||
|   MINIBROWSER_CONTEXTMENU_CLEARFACT    = MENU_ID_USER_FIRST + 2; | ||||
|  | ||||
| type | ||||
|  | ||||
|   { TSchemeRegistrationBrowserFrm } | ||||
|  | ||||
|   TSchemeRegistrationBrowserFrm = class(TForm) | ||||
|     AddressBarPnl: TPanel; | ||||
|     GoBtn: TButton; | ||||
|     CEFWindowParent1: TCEFWindowParent; | ||||
|     Chromium1: TChromium; | ||||
|     AddressCbx: TComboBox; | ||||
|     Timer1: TTimer; | ||||
|     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); | ||||
|     procedure Timer1Timer(Sender: TObject); | ||||
|     procedure FormCreate(Sender: TObject); | ||||
|     procedure Chromium1BeforePopup(Sender: TObject; | ||||
|       const browser: ICefBrowser; const frame: ICefFrame; const targetUrl, | ||||
|       targetFrameName: ustring; | ||||
|       targetDisposition: TCefWindowOpenDisposition; userGesture: Boolean; | ||||
|       const popupFeatures: TCefPopupFeatures; var windowInfo: TCefWindowInfo; | ||||
|       var client: ICefClient; var settings: TCefBrowserSettings; | ||||
|       var extra_info: ICefDictionaryValue; | ||||
|       var noJavascriptAccess: Boolean; var Result: Boolean); | ||||
|     procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); | ||||
|     procedure Chromium1Close(Sender: TObject; const browser: ICefBrowser; | ||||
|       var aAction : TCefCloseBrowserAction); | ||||
|     procedure Chromium1BeforeClose(Sender: TObject; | ||||
|       const browser: ICefBrowser); | ||||
|   private | ||||
|     { Private declarations } | ||||
|   protected | ||||
|     // Variables to control when can we destroy the form safely | ||||
|     FCanClose : boolean;  // Set to True in TChromium.OnBeforeClose | ||||
|     FClosing  : boolean;  // Set to True in the CloseQuery event. | ||||
|  | ||||
|     procedure BrowserCreatedMsg(var aMessage : TMessage); message CEF_AFTERCREATED; | ||||
|     procedure BrowserDestroyMsg(var aMessage : TMessage); message CEF_DESTROY; | ||||
|     procedure WMMove(var aMessage : TWMMove); message WM_MOVE; | ||||
|     procedure WMMoving(var aMessage : TMessage); message WM_MOVING; | ||||
|     procedure WMEnterMenuLoop(var aMessage: TMessage); message WM_ENTERMENULOOP; | ||||
|     procedure WMExitMenuLoop(var aMessage: TMessage); message WM_EXITMENULOOP; | ||||
|   public | ||||
|     { Public declarations } | ||||
|   end; | ||||
|  | ||||
| var | ||||
|   SchemeRegistrationBrowserFrm: TSchemeRegistrationBrowserFrm; | ||||
|  | ||||
| procedure CreateGlobalCEFApp; | ||||
|  | ||||
| implementation | ||||
|  | ||||
| {$R *.lfm} | ||||
|  | ||||
| uses | ||||
|   uCEFSchemeHandlerFactory, uCEFMiscFunctions, uHelloScheme; | ||||
|  | ||||
| // Destruction steps | ||||
| // ================= | ||||
| // 1. FormCloseQuery sets CanClose to FALSE calls TChromium.CloseBrowser which triggers the TChromium.OnClose event. | ||||
| // 2. TChromium.OnClose sends a CEFBROWSER_DESTROY message to destroy CEFWindowParent1 in the main thread, which triggers the TChromium.OnBeforeClose event. | ||||
| // 3. TChromium.OnBeforeClose sets FCanClose := True and sends WM_CLOSE to the form. | ||||
|  | ||||
| procedure GlobalCEFApp_OnRegCustomSchemes(const registrar: TCefSchemeRegistrarRef); | ||||
| begin | ||||
|   registrar.AddCustomScheme('hello', CEF_SCHEME_OPTION_STANDARD or CEF_SCHEME_OPTION_LOCAL); | ||||
| end; | ||||
|  | ||||
| procedure CreateGlobalCEFApp; | ||||
| begin | ||||
|   GlobalCEFApp                       := TCefApplication.Create; | ||||
|   GlobalCEFApp.OnRegCustomSchemes    := GlobalCEFApp_OnRegCustomSchemes; | ||||
|   GlobalCEFApp.BrowserSubprocessPath := 'SchemeRegistrationBrowser_sp.exe';       | ||||
|   GlobalCEFApp.LogFile               := 'debug.log'; | ||||
|   GlobalCEFApp.LogSeverity           := LOGSEVERITY_INFO; | ||||
| end; | ||||
|  | ||||
| procedure TSchemeRegistrationBrowserFrm.Chromium1AfterCreated(Sender: TObject; const browser: ICefBrowser); | ||||
| begin | ||||
|   PostMessage(Handle, CEF_AFTERCREATED, 0, 0); | ||||
| end; | ||||
|  | ||||
| procedure TSchemeRegistrationBrowserFrm.Chromium1BeforeClose( | ||||
|   Sender: TObject; const browser: ICefBrowser); | ||||
| begin | ||||
|   FCanClose := True; | ||||
|   PostMessage(Handle, WM_CLOSE, 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.Chromium1BeforePopup( | ||||
|   Sender: TObject; const browser: ICefBrowser; const frame: ICefFrame; | ||||
|   const targetUrl, targetFrameName: ustring; | ||||
|   targetDisposition: TCefWindowOpenDisposition; userGesture: Boolean; | ||||
|   const popupFeatures: TCefPopupFeatures; var windowInfo: TCefWindowInfo; | ||||
|   var client: ICefClient; var settings: TCefBrowserSettings; | ||||
|   var extra_info: ICefDictionaryValue; | ||||
|   var noJavascriptAccess: Boolean; var Result: Boolean); | ||||
| begin | ||||
|   // For simplicity, this demo blocks all popup windows and new tabs | ||||
|   Result := (targetDisposition in [WOD_NEW_FOREGROUND_TAB, WOD_NEW_BACKGROUND_TAB, WOD_NEW_POPUP, WOD_NEW_WINDOW]); | ||||
| end; | ||||
|  | ||||
| procedure TSchemeRegistrationBrowserFrm.Chromium1Close(Sender: TObject; | ||||
|   const browser: ICefBrowser; var aAction : TCefCloseBrowserAction); | ||||
| begin | ||||
|   PostMessage(Handle, CEF_DESTROY, 0, 0); | ||||
|   aAction := cbaDelay; | ||||
| 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.FormCloseQuery(Sender: TObject; var CanClose: Boolean); | ||||
| begin | ||||
|   CanClose := FCanClose; | ||||
|  | ||||
|   if not(FClosing) then | ||||
|     begin | ||||
|       FClosing := True; | ||||
|       Visible  := False; | ||||
|       Chromium1.CloseBrowser(True); | ||||
|     end; | ||||
| end; | ||||
|  | ||||
| procedure TSchemeRegistrationBrowserFrm.FormCreate(Sender: TObject); | ||||
| begin | ||||
|   // You can register the Scheme Handler Factory here or later, for example in a context menu command. | ||||
|   CefRegisterSchemeHandlerFactory('hello', '', THelloScheme); | ||||
| end; | ||||
|  | ||||
| procedure TSchemeRegistrationBrowserFrm.FormShow(Sender: TObject); | ||||
| begin | ||||
|   // GlobalCEFApp.GlobalContextInitialized has to be TRUE before creating any browser | ||||
|   // If it's not initialized yet, we use a simple timer to create the browser later. | ||||
|   if not(Chromium1.CreateBrowser(CEFWindowParent1, '')) then Timer1.Enabled := True; | ||||
| end; | ||||
|  | ||||
| procedure TSchemeRegistrationBrowserFrm.GoBtnClick(Sender: TObject); | ||||
| begin | ||||
|   Chromium1.LoadURL(AddressCbx.Text); | ||||
| end; | ||||
|  | ||||
| procedure TSchemeRegistrationBrowserFrm.Timer1Timer(Sender: TObject); | ||||
| begin | ||||
|   Timer1.Enabled := False; | ||||
|   if not(Chromium1.CreateBrowser(CEFWindowParent1, '')) and not(Chromium1.Initialized) then | ||||
|     Timer1.Enabled := True; | ||||
| end; | ||||
|  | ||||
| procedure TSchemeRegistrationBrowserFrm.BrowserCreatedMsg(var aMessage : TMessage); | ||||
| begin | ||||
|   CEFWindowParent1.UpdateSize; | ||||
|   AddressBarPnl.Enabled := True; | ||||
|   GoBtn.Click; | ||||
| end; | ||||
|  | ||||
| procedure TSchemeRegistrationBrowserFrm.BrowserDestroyMsg(var aMessage : TMessage); | ||||
| begin | ||||
|   CEFWindowParent1.Free; | ||||
| 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; | ||||
|  | ||||
| procedure TSchemeRegistrationBrowserFrm.WMEnterMenuLoop(var aMessage: TMessage); | ||||
| begin | ||||
|   inherited; | ||||
|  | ||||
|   if (aMessage.wParam = 0) and (GlobalCEFApp <> nil) then GlobalCEFApp.OsmodalLoop := True; | ||||
| end; | ||||
|  | ||||
| procedure TSchemeRegistrationBrowserFrm.WMExitMenuLoop(var aMessage: TMessage); | ||||
| begin | ||||
|   inherited; | ||||
|  | ||||
|   if (aMessage.wParam = 0) and (GlobalCEFApp <> nil) then GlobalCEFApp.OsmodalLoop := False; | ||||
| end; | ||||
|  | ||||
| end. | ||||
| @@ -21,7 +21,7 @@ | ||||
|     </CompilerOptions> | ||||
|     <Description Value="CEF4Delphi is an open source project created by Salvador Díaz Fau to embed Chromium-based browsers in applications made with Delphi or Lazarus/FPC."/> | ||||
|     <License Value="MPL 1.1"/> | ||||
|     <Version Major="92" Release="25"/> | ||||
|     <Version Major="92" Release="26"/> | ||||
|     <Files Count="203"> | ||||
|       <Item1> | ||||
|         <Filename Value="..\source\uCEFAccessibilityHandler.pas"/> | ||||
|   | ||||
| @@ -66,13 +66,13 @@ uses | ||||
| const | ||||
|   CEF_SUPPORTED_VERSION_MAJOR   = 92; | ||||
|   CEF_SUPPORTED_VERSION_MINOR   = 0; | ||||
|   CEF_SUPPORTED_VERSION_RELEASE = 25; | ||||
|   CEF_SUPPORTED_VERSION_RELEASE = 26; | ||||
|   CEF_SUPPORTED_VERSION_BUILD   = 0; | ||||
|  | ||||
|   CEF_CHROMEELF_VERSION_MAJOR   = 92; | ||||
|   CEF_CHROMEELF_VERSION_MINOR   = 0; | ||||
|   CEF_CHROMEELF_VERSION_RELEASE = 4515; | ||||
|   CEF_CHROMEELF_VERSION_BUILD   = 131; | ||||
|   CEF_CHROMEELF_VERSION_BUILD   = 159; | ||||
|  | ||||
|   {$IFDEF MSWINDOWS} | ||||
|   LIBCEF_DLL     = 'libcef.dll'; | ||||
|   | ||||
| @@ -2,9 +2,9 @@ | ||||
|   "UpdateLazPackages" : [ | ||||
|     { | ||||
|       "ForceNotify" : true, | ||||
|       "InternalVersion" : 313, | ||||
|       "InternalVersion" : 314, | ||||
|       "Name" : "cef4delphi_lazarus.lpk", | ||||
|       "Version" : "92.0.25.0" | ||||
|       "Version" : "92.0.26.0" | ||||
|     } | ||||
|   ], | ||||
|   "UpdatePackageData" : { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user