mirror of
https://github.com/salvadordf/CEF4Delphi.git
synced 2024-11-15 15:55:56 +01:00
Update to CEF 99.2.14
Added the MobileBrowser demo
This commit is contained in:
parent
1700eedac7
commit
fd331e266c
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 99.2.13 which includes Chromium 99.0.4844.83.
|
||||
CEF4Delphi uses CEF 99.2.14 which includes Chromium 99.0.4844.84.
|
||||
|
||||
The CEF binaries used by CEF4Delphi are available for download at Spotify :
|
||||
* [Windows 32 bits](https://cef-builds.spotifycdn.com/cef_binary_99.2.13%2Bgd9af866%2Bchromium-99.0.4844.83_windows32.tar.bz2)
|
||||
* [Windows 64 bits](https://cef-builds.spotifycdn.com/cef_binary_99.2.13%2Bgd9af866%2Bchromium-99.0.4844.83_windows64.tar.bz2)
|
||||
* [Linux x86 32 bits](https://cef-builds.spotifycdn.com/cef_binary_99.2.13%2Bgd9af866%2Bchromium-99.0.4844.83_linux32.tar.bz2)
|
||||
* [Linux x86 64 bits](https://cef-builds.spotifycdn.com/cef_binary_99.2.13%2Bgd9af866%2Bchromium-99.0.4844.83_linux64.tar.bz2)
|
||||
* [Linux ARM 32 bits](https://cef-builds.spotifycdn.com/cef_binary_99.2.13%2Bgd9af866%2Bchromium-99.0.4844.83_linuxarm.tar.bz2)
|
||||
* [Linux ARM 64 bits](https://cef-builds.spotifycdn.com/cef_binary_99.2.13%2Bgd9af866%2Bchromium-99.0.4844.83_linuxarm64.tar.bz2)
|
||||
* [MacOS x86 64 bits](https://cef-builds.spotifycdn.com/cef_binary_99.2.13%2Bgd9af866%2Bchromium-99.0.4844.83_macosx64.tar.bz2)
|
||||
* [Windows 32 bits](https://cef-builds.spotifycdn.com/cef_binary_99.2.14%2Bg3f796b8%2Bchromium-99.0.4844.84_windows32.tar.bz2)
|
||||
* [Windows 64 bits](https://cef-builds.spotifycdn.com/cef_binary_99.2.14%2Bg3f796b8%2Bchromium-99.0.4844.84_windows64.tar.bz2)
|
||||
* [Linux x86 32 bits](https://cef-builds.spotifycdn.com/cef_binary_99.2.14%2Bg3f796b8%2Bchromium-99.0.4844.84_linux32.tar.bz2)
|
||||
* [Linux x86 64 bits](https://cef-builds.spotifycdn.com/cef_binary_99.2.14%2Bg3f796b8%2Bchromium-99.0.4844.84_linux64.tar.bz2)
|
||||
* [Linux ARM 32 bits](https://cef-builds.spotifycdn.com/cef_binary_99.2.14%2Bg3f796b8%2Bchromium-99.0.4844.84_linuxarm.tar.bz2)
|
||||
* [Linux ARM 64 bits](https://cef-builds.spotifycdn.com/cef_binary_99.2.14%2Bg3f796b8%2Bchromium-99.0.4844.84_linuxarm64.tar.bz2)
|
||||
* [MacOS x86 64 bits](https://cef-builds.spotifycdn.com/cef_binary_99.2.14%2Bg3f796b8%2Bchromium-99.0.4844.84_macosx64.tar.bz2)
|
||||
|
||||
CEF4Delphi was developed and tested on Delphi 11.0 and it has been tested in Delphi 7, Delphi XE, Delphi 10, Delphi 10.2, Delphi 10.3, Delphi 10.4 and Lazarus 2.2.0/FPC 3.2.2. CEF4Delphi includes VCL, FireMonkey (FMX) and Lazarus components.
|
||||
|
||||
|
18
demos/Delphi_VCL/MobileBrowser/00-DeleteDCUs.bat
Normal file
18
demos/Delphi_VCL/MobileBrowser/00-DeleteDCUs.bat
Normal file
@ -0,0 +1,18 @@
|
||||
del /s /q *.dcu
|
||||
del /s /q *.exe
|
||||
del /s /q *.res
|
||||
del /s /q *.rsm
|
||||
del /s /q *.log
|
||||
del /s /q *.dsk
|
||||
del /s /q *.identcache
|
||||
del /s /q *.stat
|
||||
del /s /q *.local
|
||||
del /s /q *.~*
|
||||
rmdir Win32\Debug
|
||||
rmdir Win32\Release
|
||||
rmdir Win32
|
||||
rmdir Win64\Debug
|
||||
rmdir Win64\Release
|
||||
rmdir Win64
|
||||
rmdir __history
|
||||
rmdir __recovery
|
88
demos/Delphi_VCL/MobileBrowser/MobileBrowser.dpr
Normal file
88
demos/Delphi_VCL/MobileBrowser/MobileBrowser.dpr
Normal file
@ -0,0 +1,88 @@
|
||||
// ************************************************************************
|
||||
// ***************************** 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 MobileBrowser;
|
||||
|
||||
{$I cef.inc}
|
||||
|
||||
uses
|
||||
{$IFDEF DELPHI16_UP}
|
||||
Vcl.Forms,
|
||||
WinApi.Windows,
|
||||
{$ELSE}
|
||||
Forms,
|
||||
Windows,
|
||||
{$ENDIF }
|
||||
uCEFApplication, uCEFConstants,
|
||||
uMobileBrowser in 'uMobileBrowser.pas' {Form1};
|
||||
|
||||
{$R *.res}
|
||||
|
||||
// CEF3 needs to set the LARGEADDRESSAWARE flag which allows 32-bit processes to use up to 3GB of RAM.
|
||||
// If you don't add this flag the rederer process will crash when you try to load large images.
|
||||
{$SetPEFlags IMAGE_FILE_LARGE_ADDRESS_AWARE}
|
||||
|
||||
begin
|
||||
GlobalCEFApp := TCefApplication.Create;
|
||||
|
||||
// In case you want to use custom directories for the CEF3 binaries, cache and user data.
|
||||
// If you don't set a cache directory the browser will use in-memory cache.
|
||||
{
|
||||
GlobalCEFApp.FrameworkDirPath := 'c:\cef';
|
||||
GlobalCEFApp.ResourcesDirPath := 'c:\cef';
|
||||
GlobalCEFApp.LocalesDirPath := 'c:\cef\locales';
|
||||
GlobalCEFApp.EnableGPU := True; // Enable hardware acceleration
|
||||
GlobalCEFApp.cache := 'c:\cef\cache';
|
||||
GlobalCEFApp.UserDataPath := 'c:\cef\User Data';
|
||||
}
|
||||
|
||||
// You *MUST* call GlobalCEFApp.StartMainProcess in a if..then clause
|
||||
// with the Application initialization inside the begin..end.
|
||||
// Read this https://www.briskbard.com/index.php?lang=en&pageid=cef
|
||||
if GlobalCEFApp.StartMainProcess then
|
||||
begin
|
||||
Application.Initialize;
|
||||
{$IFDEF DELPHI11_UP}
|
||||
Application.MainFormOnTaskbar := True;
|
||||
{$ENDIF}
|
||||
Application.CreateForm(TForm1, Form1);
|
||||
Application.Run;
|
||||
end;
|
||||
|
||||
GlobalCEFApp.Free;
|
||||
GlobalCEFApp := nil;
|
||||
end.
|
1321
demos/Delphi_VCL/MobileBrowser/MobileBrowser.dproj
Normal file
1321
demos/Delphi_VCL/MobileBrowser/MobileBrowser.dproj
Normal file
File diff suppressed because it is too large
Load Diff
507
demos/Delphi_VCL/MobileBrowser/cef.inc
Normal file
507
demos/Delphi_VCL/MobileBrowser/cef.inc
Normal file
@ -0,0 +1,507 @@
|
||||
// ************************************************************************
|
||||
// ***************************** 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}
|
||||
|
||||
// Rad Studio 11.0 - Delphi Alexandria
|
||||
{$IFDEF VER350}
|
||||
{$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}
|
||||
{$DEFINE DELPHI28_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}
|
||||
{$DEFINE DELPHI28_UP}
|
||||
{$ENDIF}
|
||||
{$ENDIF}
|
||||
|
||||
{$IFDEF DELPHI9_UP}
|
||||
{$DEFINE SUPPORTS_INLINE}
|
||||
{$ENDIF}
|
||||
|
||||
{$IF DEFINED(CPUX32) OR
|
||||
DEFINED(CPU32) 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}
|
||||
{$ELSE}
|
||||
{$IF DEFINED(CPUX64) OR
|
||||
DEFINED(CPU64) OR
|
||||
DEFINED(CPU64BITS) OR
|
||||
DEFINED(CPUARM64) OR
|
||||
DEFINED(WIN64) OR
|
||||
DEFINED(IOS64) OR
|
||||
DEFINED(MACOS64) OR
|
||||
DEFINED(LINUX64) OR
|
||||
DEFINED(POSIX64) OR
|
||||
DEFINED(ANDROID64)}
|
||||
{$DEFINE TARGET_64BITS}
|
||||
{$IFEND}
|
||||
{$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}
|
480
demos/Delphi_VCL/MobileBrowser/uMobileBrowser.dfm
Normal file
480
demos/Delphi_VCL/MobileBrowser/uMobileBrowser.dfm
Normal file
@ -0,0 +1,480 @@
|
||||
object Form1: TForm1
|
||||
Left = 0
|
||||
Top = 0
|
||||
Caption = 'Initializing browser. Please wait...'
|
||||
ClientHeight = 624
|
||||
ClientWidth = 1038
|
||||
Color = clBtnFace
|
||||
Font.Charset = DEFAULT_CHARSET
|
||||
Font.Color = clWindowText
|
||||
Font.Height = -11
|
||||
Font.Name = 'Tahoma'
|
||||
Font.Style = []
|
||||
Position = poScreenCenter
|
||||
OnCloseQuery = FormCloseQuery
|
||||
OnCreate = FormCreate
|
||||
OnShow = FormShow
|
||||
PixelsPerInch = 96
|
||||
TextHeight = 13
|
||||
object Splitter1: TSplitter
|
||||
Left = 741
|
||||
Top = 0
|
||||
Height = 624
|
||||
Align = alRight
|
||||
MinSize = 220
|
||||
ExplicitLeft = 728
|
||||
ExplicitTop = 336
|
||||
ExplicitHeight = 100
|
||||
end
|
||||
object Panel1: TPanel
|
||||
Left = 744
|
||||
Top = 0
|
||||
Width = 294
|
||||
Height = 624
|
||||
Align = alRight
|
||||
BevelOuter = bvNone
|
||||
TabOrder = 0
|
||||
object LogMem: TMemo
|
||||
Left = 0
|
||||
Top = 406
|
||||
Width = 294
|
||||
Height = 218
|
||||
Align = alClient
|
||||
ReadOnly = True
|
||||
ScrollBars = ssBoth
|
||||
TabOrder = 0
|
||||
end
|
||||
object Panel3: TPanel
|
||||
Left = 0
|
||||
Top = 0
|
||||
Width = 294
|
||||
Height = 80
|
||||
Align = alTop
|
||||
BevelOuter = bvNone
|
||||
Padding.Left = 10
|
||||
Padding.Top = 10
|
||||
Padding.Right = 10
|
||||
Padding.Bottom = 10
|
||||
TabOrder = 1
|
||||
object CanEmulateBtn: TButton
|
||||
Left = 10
|
||||
Top = 10
|
||||
Width = 274
|
||||
Height = 25
|
||||
Align = alTop
|
||||
Caption = 'Can emulate'
|
||||
TabOrder = 0
|
||||
OnClick = CanEmulateBtnClick
|
||||
end
|
||||
object ClearDeviceMetricsOverrideBtn: TButton
|
||||
Left = 10
|
||||
Top = 45
|
||||
Width = 274
|
||||
Height = 25
|
||||
Align = alBottom
|
||||
Caption = 'Clear device metrics override'
|
||||
TabOrder = 1
|
||||
OnClick = ClearDeviceMetricsOverrideBtnClick
|
||||
end
|
||||
end
|
||||
object Panel4: TPanel
|
||||
Left = 0
|
||||
Top = 80
|
||||
Width = 294
|
||||
Height = 121
|
||||
Align = alTop
|
||||
BevelOuter = bvNone
|
||||
Padding.Left = 10
|
||||
Padding.Right = 10
|
||||
Padding.Bottom = 10
|
||||
TabOrder = 2
|
||||
object GroupBox1: TGroupBox
|
||||
Left = 10
|
||||
Top = 0
|
||||
Width = 274
|
||||
Height = 86
|
||||
Align = alTop
|
||||
Caption = ' User agent '
|
||||
Padding.Left = 10
|
||||
Padding.Top = 5
|
||||
Padding.Right = 10
|
||||
Padding.Bottom = 10
|
||||
TabOrder = 0
|
||||
object UserAgentCb: TComboBox
|
||||
Left = 12
|
||||
Top = 20
|
||||
Width = 250
|
||||
Height = 21
|
||||
Align = alTop
|
||||
ItemIndex = 0
|
||||
TabOrder = 0
|
||||
Text =
|
||||
'Mozilla/5.0 (Linux; Android 11; M2102K1G) AppleWebKit/537.36 (KH' +
|
||||
'TML, like Gecko) Chrome/91.0.4472.101 Mobile Safari/537.36'
|
||||
Items.Strings = (
|
||||
|
||||
'Mozilla/5.0 (Linux; Android 11; M2102K1G) AppleWebKit/537.36 (KH' +
|
||||
'TML, like Gecko) Chrome/91.0.4472.101 Mobile Safari/537.36'
|
||||
|
||||
'Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWe' +
|
||||
'bKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E304 Saf' +
|
||||
'ari/602.1'
|
||||
|
||||
'Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; SCH-I535 Build/KOT4' +
|
||||
'9H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Sa' +
|
||||
'fari/534.30'
|
||||
|
||||
'Mozilla/5.0 (Linux; Android 7.0; SM-G930V Build/NRD90M) AppleWeb' +
|
||||
'Kit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.125 Mobile Safar' +
|
||||
'i/537.36'
|
||||
|
||||
'Mozilla/5.0 (Linux; Android 7.0; SM-A310F Build/NRD90M) AppleWeb' +
|
||||
'Kit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.91 Mobile Safari' +
|
||||
'/537.36 OPR/42.7.2246.114996'
|
||||
|
||||
'Opera/9.80 (Android 4.1.2; Linux; Opera Mobi/ADR-1305251841) Pre' +
|
||||
'sto/2.11.355 Version/12.10'
|
||||
|
||||
'Opera/9.80 (J2ME/MIDP; Opera Mini/5.1.21214/28.2725; U; ru) Pres' +
|
||||
'to/2.8.119 Version/11.10'
|
||||
|
||||
'Mozilla/5.0 (iPhone; CPU iPhone OS 7_1_2 like Mac OS X) AppleWeb' +
|
||||
'Kit/537.51.2 (KHTML, like Gecko) OPiOS/10.2.0.93022 Mobile/11D25' +
|
||||
'7 Safari/9537.53'
|
||||
|
||||
'Mozilla/5.0 (Android 7.0; Mobile; rv:54.0) Gecko/54.0 Firefox/54' +
|
||||
'.0'
|
||||
|
||||
'Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_2 like Mac OS X) AppleWe' +
|
||||
'bKit/603.2.4 (KHTML, like Gecko) FxiOS/7.5b3349 Mobile/14F89 Saf' +
|
||||
'ari/603.2.4'
|
||||
|
||||
'Mozilla/5.0 (Linux; U; Android 7.0; en-US; SM-G935F Build/NRD90M' +
|
||||
') AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 UCBrowser/1' +
|
||||
'1.3.8.976 U3/0.8.0 Mobile Safari/534.30'
|
||||
|
||||
'Mozilla/5.0 (Linux; Android 6.0.1; SM-G920V Build/MMB29K) AppleW' +
|
||||
'ebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.98 Mobile Safa' +
|
||||
'ri/537.36'
|
||||
|
||||
'Mozilla/5.0 (Linux; Android 5.1.1; SM-N750K Build/LMY47X; ko-kr)' +
|
||||
' AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Mob' +
|
||||
'ile Safari/537.36 Puffin/6.0.8.15804AP'
|
||||
|
||||
'Mozilla/5.0 (Linux; Android 5.1.1; SM-N750K Build/LMY47X; ko-kr)' +
|
||||
' AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Mob' +
|
||||
'ile Safari/537.36 Puffin/6.0.8.15804AP'
|
||||
|
||||
'Mozilla/5.0 (Linux; Android 7.0; SAMSUNG SM-G955U Build/NRD90M) ' +
|
||||
'AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/5.4 Chrome' +
|
||||
'/51.0.2704.106 Mobile Safari/537.36'
|
||||
|
||||
'Mozilla/5.0 (Linux; Android 6.0; Lenovo K50a40 Build/MRA58K) App' +
|
||||
'leWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.137 YaBrows' +
|
||||
'er/17.4.1.352.00 Mobile Safari/537.36'
|
||||
|
||||
'Mozilla/5.0 (Linux; U; Android 7.0; en-us; MI 5 Build/NRD90M) Ap' +
|
||||
'pleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/53.0.278' +
|
||||
'5.146 Mobile Safari/537.36 XiaoMi/MiuiBrowser/9.0.3'
|
||||
|
||||
'Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6' +
|
||||
'.0; IEMobile/10.0; ARM; Touch; Microsoft; Lumia 950)'
|
||||
|
||||
'Mozilla/5.0 (Windows Phone 10.0; Android 6.0.1; Microsoft; Lumia' +
|
||||
' 950) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.11' +
|
||||
'6 Mobile Safari/537.36 Edge/15.14977'
|
||||
|
||||
'Mozilla/5.0 (BB10; Kbd) AppleWebKit/537.35+ (KHTML, like Gecko) ' +
|
||||
'Version/10.3.3.2205 Mobile Safari/537.35+')
|
||||
end
|
||||
object OverrideUserAgentBtn: TButton
|
||||
Left = 12
|
||||
Top = 49
|
||||
Width = 250
|
||||
Height = 25
|
||||
Align = alBottom
|
||||
Caption = 'Override user agent'
|
||||
TabOrder = 1
|
||||
OnClick = OverrideUserAgentBtnClick
|
||||
end
|
||||
end
|
||||
object EmulateTouchChk: TCheckBox
|
||||
Left = 10
|
||||
Top = 94
|
||||
Width = 274
|
||||
Height = 17
|
||||
Align = alBottom
|
||||
Caption = 'Emulate Touch'
|
||||
TabOrder = 1
|
||||
OnClick = EmulateTouchChkClick
|
||||
end
|
||||
end
|
||||
object Panel5: TPanel
|
||||
Left = 0
|
||||
Top = 201
|
||||
Width = 294
|
||||
Height = 205
|
||||
Align = alTop
|
||||
BevelOuter = bvNone
|
||||
Padding.Left = 10
|
||||
Padding.Right = 10
|
||||
Padding.Bottom = 10
|
||||
TabOrder = 3
|
||||
object GroupBox2: TGroupBox
|
||||
Left = 10
|
||||
Top = 0
|
||||
Width = 274
|
||||
Height = 195
|
||||
Align = alClient
|
||||
Caption = ' Emulate device metrics '
|
||||
Padding.Left = 10
|
||||
Padding.Top = 5
|
||||
Padding.Right = 10
|
||||
Padding.Bottom = 10
|
||||
TabOrder = 0
|
||||
object Panel6: TPanel
|
||||
Left = 12
|
||||
Top = 47
|
||||
Width = 250
|
||||
Height = 27
|
||||
Align = alTop
|
||||
BevelOuter = bvNone
|
||||
Padding.Bottom = 5
|
||||
TabOrder = 0
|
||||
object Label1: TLabel
|
||||
Left = 0
|
||||
Top = 0
|
||||
Width = 75
|
||||
Height = 22
|
||||
Align = alLeft
|
||||
AutoSize = False
|
||||
Caption = 'Height'
|
||||
Layout = tlCenter
|
||||
end
|
||||
object HeightEdt: TSpinEdit
|
||||
Left = 75
|
||||
Top = 0
|
||||
Width = 175
|
||||
Height = 22
|
||||
Align = alClient
|
||||
MaxValue = 10000000
|
||||
MinValue = 0
|
||||
TabOrder = 0
|
||||
Value = 0
|
||||
end
|
||||
end
|
||||
object Panel7: TPanel
|
||||
Left = 12
|
||||
Top = 20
|
||||
Width = 250
|
||||
Height = 27
|
||||
Align = alTop
|
||||
BevelOuter = bvNone
|
||||
Padding.Bottom = 5
|
||||
TabOrder = 1
|
||||
object Label2: TLabel
|
||||
Left = 0
|
||||
Top = 0
|
||||
Width = 75
|
||||
Height = 22
|
||||
Align = alLeft
|
||||
AutoSize = False
|
||||
Caption = 'Width'
|
||||
Layout = tlCenter
|
||||
end
|
||||
object WidthEdt: TSpinEdit
|
||||
Left = 75
|
||||
Top = 0
|
||||
Width = 175
|
||||
Height = 22
|
||||
Align = alClient
|
||||
MaxValue = 10000000
|
||||
MinValue = 0
|
||||
TabOrder = 0
|
||||
Value = 0
|
||||
end
|
||||
end
|
||||
object OverrideDeviceMetricsBtn: TButton
|
||||
Left = 12
|
||||
Top = 158
|
||||
Width = 250
|
||||
Height = 25
|
||||
Align = alBottom
|
||||
Caption = 'Override device metrics'
|
||||
TabOrder = 2
|
||||
OnClick = OverrideDeviceMetricsBtnClick
|
||||
end
|
||||
object Panel8: TPanel
|
||||
Left = 12
|
||||
Top = 74
|
||||
Width = 250
|
||||
Height = 27
|
||||
Align = alTop
|
||||
BevelOuter = bvNone
|
||||
Padding.Bottom = 5
|
||||
TabOrder = 3
|
||||
object Label3: TLabel
|
||||
Left = 0
|
||||
Top = 0
|
||||
Width = 75
|
||||
Height = 22
|
||||
Align = alLeft
|
||||
AutoSize = False
|
||||
Caption = 'Scale'
|
||||
Layout = tlCenter
|
||||
end
|
||||
object ScaleEdt: TMaskEdit
|
||||
Left = 75
|
||||
Top = 0
|
||||
Width = 175
|
||||
Height = 22
|
||||
Align = alClient
|
||||
EditMask = '#.##;1;0'
|
||||
MaxLength = 4
|
||||
TabOrder = 0
|
||||
Text = '1. '
|
||||
ExplicitHeight = 21
|
||||
end
|
||||
end
|
||||
object Panel9: TPanel
|
||||
Left = 12
|
||||
Top = 101
|
||||
Width = 250
|
||||
Height = 27
|
||||
Align = alTop
|
||||
BevelOuter = bvNone
|
||||
Padding.Bottom = 5
|
||||
TabOrder = 4
|
||||
object Label4: TLabel
|
||||
Left = 0
|
||||
Top = 0
|
||||
Width = 75
|
||||
Height = 22
|
||||
Align = alLeft
|
||||
AutoSize = False
|
||||
Caption = 'Orientation'
|
||||
Layout = tlCenter
|
||||
end
|
||||
object OrientationCb: TComboBox
|
||||
Left = 75
|
||||
Top = 0
|
||||
Width = 175
|
||||
Height = 21
|
||||
Align = alClient
|
||||
Style = csDropDownList
|
||||
ItemIndex = 0
|
||||
TabOrder = 0
|
||||
Text = 'Portrait Primary'
|
||||
Items.Strings = (
|
||||
'Portrait Primary'
|
||||
'Portrait Secondary'
|
||||
'Landscape Primary'
|
||||
'Landscape Secondary')
|
||||
end
|
||||
end
|
||||
object Panel10: TPanel
|
||||
Left = 12
|
||||
Top = 128
|
||||
Width = 250
|
||||
Height = 27
|
||||
Align = alTop
|
||||
BevelOuter = bvNone
|
||||
Padding.Bottom = 5
|
||||
TabOrder = 5
|
||||
object Label5: TLabel
|
||||
Left = 0
|
||||
Top = 0
|
||||
Width = 75
|
||||
Height = 22
|
||||
Align = alLeft
|
||||
AutoSize = False
|
||||
Caption = 'Angle'
|
||||
Layout = tlCenter
|
||||
ExplicitHeight = 36
|
||||
end
|
||||
object AngleEdt: TSpinEdit
|
||||
Left = 75
|
||||
Top = 0
|
||||
Width = 175
|
||||
Height = 22
|
||||
Align = alClient
|
||||
MaxValue = 360
|
||||
MinValue = 0
|
||||
TabOrder = 0
|
||||
Value = 0
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
object Panel2: TPanel
|
||||
Left = 0
|
||||
Top = 0
|
||||
Width = 741
|
||||
Height = 624
|
||||
Align = alClient
|
||||
BevelOuter = bvNone
|
||||
TabOrder = 1
|
||||
object AddressPnl: TPanel
|
||||
Left = 0
|
||||
Top = 0
|
||||
Width = 741
|
||||
Height = 30
|
||||
Align = alTop
|
||||
BevelOuter = bvNone
|
||||
Enabled = False
|
||||
Padding.Left = 5
|
||||
Padding.Top = 5
|
||||
Padding.Right = 5
|
||||
Padding.Bottom = 5
|
||||
TabOrder = 0
|
||||
object AddressEdt: TEdit
|
||||
Left = 5
|
||||
Top = 5
|
||||
Width = 700
|
||||
Height = 20
|
||||
Margins.Right = 5
|
||||
Align = alClient
|
||||
TabOrder = 0
|
||||
Text = 'http://www.google.com'
|
||||
ExplicitHeight = 21
|
||||
end
|
||||
object GoBtn: TButton
|
||||
Left = 705
|
||||
Top = 5
|
||||
Width = 31
|
||||
Height = 20
|
||||
Margins.Left = 5
|
||||
Align = alRight
|
||||
Caption = 'Go'
|
||||
TabOrder = 1
|
||||
OnClick = GoBtnClick
|
||||
end
|
||||
end
|
||||
object CEFWindowParent1: TCEFWindowParent
|
||||
Left = 0
|
||||
Top = 30
|
||||
Width = 741
|
||||
Height = 594
|
||||
Align = alClient
|
||||
TabOrder = 1
|
||||
end
|
||||
end
|
||||
object Timer1: TTimer
|
||||
Enabled = False
|
||||
Interval = 300
|
||||
OnTimer = Timer1Timer
|
||||
Left = 56
|
||||
Top = 88
|
||||
end
|
||||
object Chromium1: TChromium
|
||||
OnBeforePopup = Chromium1BeforePopup
|
||||
OnAfterCreated = Chromium1AfterCreated
|
||||
OnBeforeClose = Chromium1BeforeClose
|
||||
OnClose = Chromium1Close
|
||||
OnOpenUrlFromTab = Chromium1OpenUrlFromTab
|
||||
OnDevToolsMethodResult = Chromium1DevToolsMethodResult
|
||||
Left = 56
|
||||
Top = 152
|
||||
end
|
||||
end
|
467
demos/Delphi_VCL/MobileBrowser/uMobileBrowser.pas
Normal file
467
demos/Delphi_VCL/MobileBrowser/uMobileBrowser.pas
Normal file
@ -0,0 +1,467 @@
|
||||
// ************************************************************************
|
||||
// ***************************** 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 © 2022 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 uMobileBrowser;
|
||||
|
||||
{$I cef.inc}
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
|
||||
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls, Vcl.Mask, Vcl.Samples.Spin,
|
||||
uCEFChromium, uCEFWindowParent, uCEFInterfaces, uCEFConstants, uCEFTypes, uCEFJson,
|
||||
uCEFWinControl, uCEFSentinel, uCEFChromiumCore, uCEFDictionaryValue;
|
||||
|
||||
type
|
||||
TForm1 = class(TForm)
|
||||
Timer1: TTimer;
|
||||
Chromium1: TChromium;
|
||||
Panel1: TPanel;
|
||||
Panel2: TPanel;
|
||||
AddressPnl: TPanel;
|
||||
AddressEdt: TEdit;
|
||||
GoBtn: TButton;
|
||||
CEFWindowParent1: TCEFWindowParent;
|
||||
Splitter1: TSplitter;
|
||||
LogMem: TMemo;
|
||||
Panel3: TPanel;
|
||||
CanEmulateBtn: TButton;
|
||||
ClearDeviceMetricsOverrideBtn: TButton;
|
||||
Panel4: TPanel;
|
||||
GroupBox1: TGroupBox;
|
||||
UserAgentCb: TComboBox;
|
||||
OverrideUserAgentBtn: TButton;
|
||||
EmulateTouchChk: TCheckBox;
|
||||
Panel5: TPanel;
|
||||
GroupBox2: TGroupBox;
|
||||
Panel6: TPanel;
|
||||
Label1: TLabel;
|
||||
HeightEdt: TSpinEdit;
|
||||
Panel7: TPanel;
|
||||
Label2: TLabel;
|
||||
WidthEdt: TSpinEdit;
|
||||
OverrideDeviceMetricsBtn: TButton;
|
||||
Panel8: TPanel;
|
||||
Label3: TLabel;
|
||||
ScaleEdt: TMaskEdit;
|
||||
Panel9: TPanel;
|
||||
Label4: TLabel;
|
||||
OrientationCb: TComboBox;
|
||||
Panel10: TPanel;
|
||||
Label5: TLabel;
|
||||
AngleEdt: TSpinEdit;
|
||||
|
||||
procedure GoBtnClick(Sender: TObject);
|
||||
procedure Timer1Timer(Sender: TObject);
|
||||
procedure CanEmulateBtnClick(Sender: TObject);
|
||||
procedure OverrideUserAgentBtnClick(Sender: TObject);
|
||||
|
||||
procedure FormShow(Sender: TObject);
|
||||
procedure FormCreate(Sender: TObject);
|
||||
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
|
||||
|
||||
procedure Chromium1AfterCreated(Sender: TObject; const browser: ICefBrowser);
|
||||
procedure Chromium1Close(Sender: TObject; const browser: ICefBrowser; var aAction : TCefCloseBrowserAction);
|
||||
procedure Chromium1BeforeClose(Sender: TObject; const browser: ICefBrowser);
|
||||
procedure 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, Result: Boolean);
|
||||
procedure Chromium1OpenUrlFromTab(Sender: TObject; const browser: ICefBrowser; const frame: ICefFrame; const targetUrl: ustring; targetDisposition: TCefWindowOpenDisposition; userGesture: Boolean; out Result: Boolean);
|
||||
procedure Chromium1DevToolsMethodResult(Sender: TObject; const browser: ICefBrowser; message_id: Integer; success: Boolean; const result: ICefValue);
|
||||
procedure EmulateTouchChkClick(Sender: TObject);
|
||||
procedure ClearDeviceMetricsOverrideBtnClick(Sender: TObject);
|
||||
procedure OverrideDeviceMetricsBtnClick(Sender: TObject);
|
||||
|
||||
protected
|
||||
// Variables to control when can we destroy the form safely
|
||||
FCanClose : boolean; // Set to True in TChromium.OnBeforeClose
|
||||
FClosing : boolean; // Set to True in the CloseQuery event.
|
||||
|
||||
// You have to handle this two messages to call NotifyMoveOrResizeStarted or some page elements will be misaligned.
|
||||
procedure WMMove(var aMessage : TWMMove); message WM_MOVE;
|
||||
procedure WMMoving(var aMessage : TMessage); message WM_MOVING;
|
||||
// You also have to handle these two messages to set GlobalCEFApp.OsmodalLoop
|
||||
procedure WMEnterMenuLoop(var aMessage: TMessage); message WM_ENTERMENULOOP;
|
||||
procedure WMExitMenuLoop(var aMessage: TMessage); message WM_EXITMENULOOP;
|
||||
|
||||
procedure BrowserCreatedMsg(var aMessage : TMessage); message CEF_AFTERCREATED;
|
||||
procedure BrowserDestroyMsg(var aMessage : TMessage); message CEF_DESTROY;
|
||||
|
||||
procedure HandleSetUserAgentResult(aSuccess : boolean; const aResult: ICefValue);
|
||||
procedure HandleSetTouchEmulationEnabledResult(aSuccess : boolean; const aResult: ICefValue);
|
||||
procedure HandleCanEmulateResult(aSuccess : boolean; const aResult: ICefValue);
|
||||
procedure HandleClearDeviceMetricsOverrideResult(aSuccess : boolean; const aResult: ICefValue);
|
||||
procedure HandleSetDeviceMetricsOverrideResult(aSuccess : boolean; const aResult: ICefValue);
|
||||
public
|
||||
{ Public declarations }
|
||||
end;
|
||||
|
||||
var
|
||||
Form1: TForm1;
|
||||
|
||||
implementation
|
||||
|
||||
{$R *.dfm}
|
||||
|
||||
uses
|
||||
uCEFApplication, uCefMiscFunctions;
|
||||
|
||||
// This demo allows you to emulate a mobile browser using the "Emulation" namespace of the DevTools.
|
||||
// It's necesary to reload the browser after using the controls in the right panel.
|
||||
|
||||
// This demo uses a TChromium and a TCEFWindowParent
|
||||
|
||||
// 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.
|
||||
|
||||
const
|
||||
DEVTOOLS_SETUSERAGENTOVERRIDE_MSGID = 1;
|
||||
DEVTOOLS_SETTOUCHEMULATIONENABLED_MSGID = 2;
|
||||
DEVTOOLS_CANEMULATE_MSGID = 3;
|
||||
DEVTOOLS_CLEARDEVICEMETRICSOVERRIDE_MSGID = 4;
|
||||
DEVTOOLS_SETDEVICEMETRICSOVERRIDE_MSGID = 5;
|
||||
|
||||
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
|
||||
begin
|
||||
CanClose := FCanClose;
|
||||
|
||||
if not(FClosing) then
|
||||
begin
|
||||
FClosing := True;
|
||||
Visible := False;
|
||||
Chromium1.CloseBrowser(True);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TForm1.FormCreate(Sender: TObject);
|
||||
begin
|
||||
FCanClose := False;
|
||||
FClosing := False;
|
||||
Chromium1.DefaultURL := AddressEdt.Text;
|
||||
end;
|
||||
|
||||
procedure TForm1.FormShow(Sender: TObject);
|
||||
begin
|
||||
// You *MUST* call CreateBrowser to create and initialize the browser.
|
||||
// This will trigger the AfterCreated event when the browser is fully
|
||||
// initialized and ready to receive commands.
|
||||
|
||||
// GlobalCEFApp.GlobalContextInitialized has to be TRUE before creating any browser
|
||||
// If it's not initialized yet, we use a simple timer to create the browser later.
|
||||
if not(Chromium1.CreateBrowser(CEFWindowParent1)) then Timer1.Enabled := True;
|
||||
end;
|
||||
|
||||
procedure TForm1.CanEmulateBtnClick(Sender: TObject);
|
||||
begin
|
||||
Chromium1.ExecuteDevToolsMethod(DEVTOOLS_CANEMULATE_MSGID, 'Emulation.canEmulate', nil);
|
||||
end;
|
||||
|
||||
procedure TForm1.Chromium1AfterCreated(Sender: TObject; const browser: ICefBrowser);
|
||||
begin
|
||||
// Now the browser is fully initialized we can send a message to the main form to load the initial web page.
|
||||
PostMessage(Handle, CEF_AFTERCREATED, 0, 0);
|
||||
end;
|
||||
|
||||
procedure TForm1.Chromium1BeforeClose(Sender: TObject;
|
||||
const browser: ICefBrowser);
|
||||
begin
|
||||
FCanClose := True;
|
||||
PostMessage(Handle, WM_CLOSE, 0, 0);
|
||||
end;
|
||||
|
||||
procedure TForm1.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, 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 TForm1.Chromium1Close(Sender: TObject;
|
||||
const browser: ICefBrowser; var aAction : TCefCloseBrowserAction);
|
||||
begin
|
||||
PostMessage(Handle, CEF_DESTROY, 0, 0);
|
||||
aAction := cbaDelay;
|
||||
end;
|
||||
|
||||
procedure TForm1.Chromium1DevToolsMethodResult(Sender: TObject;
|
||||
const browser: ICefBrowser; message_id: Integer; success: Boolean;
|
||||
const result: ICefValue);
|
||||
begin
|
||||
case message_id of
|
||||
DEVTOOLS_SETUSERAGENTOVERRIDE_MSGID : HandleSetUserAgentResult(success, result);
|
||||
DEVTOOLS_SETTOUCHEMULATIONENABLED_MSGID : HandleSetTouchEmulationEnabledResult(success, result);
|
||||
DEVTOOLS_CANEMULATE_MSGID : HandleCanEmulateResult(success, result);
|
||||
DEVTOOLS_CLEARDEVICEMETRICSOVERRIDE_MSGID : HandleClearDeviceMetricsOverrideResult(success, result);
|
||||
DEVTOOLS_SETDEVICEMETRICSOVERRIDE_MSGID : HandleSetDeviceMetricsOverrideResult(success, result);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TForm1.Chromium1OpenUrlFromTab(Sender: TObject;
|
||||
const browser: ICefBrowser; const frame: ICefFrame;
|
||||
const targetUrl: ustring; targetDisposition: TCefWindowOpenDisposition;
|
||||
userGesture: Boolean; out 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 TForm1.ClearDeviceMetricsOverrideBtnClick(Sender: TObject);
|
||||
begin
|
||||
Chromium1.ExecuteDevToolsMethod(DEVTOOLS_CLEARDEVICEMETRICSOVERRIDE_MSGID, 'Emulation.clearDeviceMetricsOverride', nil);
|
||||
end;
|
||||
|
||||
procedure TForm1.EmulateTouchChkClick(Sender: TObject);
|
||||
var
|
||||
TempParams : ICefDictionaryValue;
|
||||
begin
|
||||
try
|
||||
TempParams := TCefDictionaryValueRef.New;
|
||||
TempParams.SetBool('enabled', EmulateTouchChk.Checked);
|
||||
|
||||
if EmulateTouchChk.Checked then
|
||||
TempParams.SetInt('maxTouchPoints', 2);
|
||||
|
||||
Chromium1.ExecuteDevToolsMethod(DEVTOOLS_SETTOUCHEMULATIONENABLED_MSGID, 'Emulation.setTouchEmulationEnabled', TempParams);
|
||||
finally
|
||||
TempParams := nil;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TForm1.BrowserCreatedMsg(var aMessage : TMessage);
|
||||
begin
|
||||
Caption := 'Mobile Browser';
|
||||
AddressPnl.Enabled := True;
|
||||
end;
|
||||
|
||||
procedure TForm1.BrowserDestroyMsg(var aMessage : TMessage);
|
||||
begin
|
||||
CEFWindowParent1.Free;
|
||||
end;
|
||||
|
||||
procedure TForm1.GoBtnClick(Sender: TObject);
|
||||
begin
|
||||
// This will load the URL in the edit box
|
||||
Chromium1.LoadURL(AddressEdt.Text);
|
||||
end;
|
||||
|
||||
procedure TForm1.OverrideDeviceMetricsBtnClick(Sender: TObject);
|
||||
var
|
||||
TempParams, TempDict : ICefDictionaryValue;
|
||||
TempFormatSettings : TFormatSettings;
|
||||
TempOrientation : string;
|
||||
begin
|
||||
try
|
||||
TempParams := TCefDictionaryValueRef.New;
|
||||
TempParams.SetInt('width', WidthEdt.Value);
|
||||
TempParams.SetInt('height', HeightEdt.Value);
|
||||
|
||||
TempFormatSettings := TFormatSettings.Create;
|
||||
TempFormatSettings.DecimalSeparator := '.';
|
||||
TempParams.SetDouble('deviceScaleFactor', StrToFloat(ScaleEdt.Text, TempFormatSettings));
|
||||
|
||||
TempParams.SetBool('mobile', True);
|
||||
|
||||
case OrientationCb.ItemIndex of
|
||||
0 : TempOrientation := 'portraitPrimary';
|
||||
1 : TempOrientation := 'portraitSecondary';
|
||||
2 : TempOrientation := 'landscapePrimary';
|
||||
else TempOrientation := 'landscapeSecondary';
|
||||
end;
|
||||
|
||||
TempDict := TCefDictionaryValueRef.New;
|
||||
TempDict.SetString('type', TempOrientation);
|
||||
TempDict.SetInt('angle', AngleEdt.Value);
|
||||
TempParams.SetDictionary('screenOrientation', TempDict);
|
||||
|
||||
Chromium1.ExecuteDevToolsMethod(DEVTOOLS_SETDEVICEMETRICSOVERRIDE_MSGID, 'Emulation.setDeviceMetricsOverride', TempParams);
|
||||
finally
|
||||
TempDict := nil;
|
||||
TempParams := nil;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TForm1.OverrideUserAgentBtnClick(Sender: TObject);
|
||||
var
|
||||
TempParams : ICefDictionaryValue;
|
||||
begin
|
||||
try
|
||||
TempParams := TCefDictionaryValueRef.New;
|
||||
TempParams.SetString('userAgent', UserAgentCb.Text);
|
||||
|
||||
Chromium1.ExecuteDevToolsMethod(DEVTOOLS_SETUSERAGENTOVERRIDE_MSGID, 'Emulation.setUserAgentOverride', TempParams);
|
||||
finally
|
||||
TempParams := nil;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TForm1.Timer1Timer(Sender: TObject);
|
||||
begin
|
||||
Timer1.Enabled := False;
|
||||
if not(Chromium1.CreateBrowser(CEFWindowParent1)) and not(Chromium1.Initialized) then
|
||||
Timer1.Enabled := True;
|
||||
end;
|
||||
|
||||
procedure TForm1.WMMove(var aMessage : TWMMove);
|
||||
begin
|
||||
inherited;
|
||||
|
||||
if (Chromium1 <> nil) then Chromium1.NotifyMoveOrResizeStarted;
|
||||
end;
|
||||
|
||||
procedure TForm1.WMMoving(var aMessage : TMessage);
|
||||
begin
|
||||
inherited;
|
||||
|
||||
if (Chromium1 <> nil) then Chromium1.NotifyMoveOrResizeStarted;
|
||||
end;
|
||||
|
||||
procedure TForm1.WMEnterMenuLoop(var aMessage: TMessage);
|
||||
begin
|
||||
inherited;
|
||||
|
||||
if (aMessage.wParam = 0) and (GlobalCEFApp <> nil) then GlobalCEFApp.OsmodalLoop := True;
|
||||
end;
|
||||
|
||||
procedure TForm1.WMExitMenuLoop(var aMessage: TMessage);
|
||||
begin
|
||||
inherited;
|
||||
|
||||
if (aMessage.wParam = 0) and (GlobalCEFApp <> nil) then GlobalCEFApp.OsmodalLoop := False;
|
||||
end;
|
||||
|
||||
procedure TForm1.HandleSetUserAgentResult(aSuccess : boolean; const aResult: ICefValue);
|
||||
begin
|
||||
if aSuccess and (aResult <> nil) then
|
||||
TThread.ForceQueue(nil,
|
||||
procedure
|
||||
begin
|
||||
LogMem.Lines.Add('Successful SetUserAgentOverride');
|
||||
end)
|
||||
else
|
||||
TThread.ForceQueue(nil,
|
||||
procedure
|
||||
begin
|
||||
LogMem.Lines.Add('Unsuccessful SetUserAgentOverride');
|
||||
end);
|
||||
end;
|
||||
|
||||
procedure TForm1.HandleSetTouchEmulationEnabledResult(aSuccess : boolean; const aResult: ICefValue);
|
||||
begin
|
||||
if aSuccess and (aResult <> nil) then
|
||||
TThread.ForceQueue(nil,
|
||||
procedure
|
||||
begin
|
||||
LogMem.Lines.Add('Successful SetTouchEmulationEnabled');
|
||||
end)
|
||||
else
|
||||
TThread.ForceQueue(nil,
|
||||
procedure
|
||||
begin
|
||||
LogMem.Lines.Add('Unsuccessful SetTouchEmulationEnabled');
|
||||
end);
|
||||
end;
|
||||
|
||||
procedure TForm1.HandleCanEmulateResult(aSuccess : boolean; const aResult: ICefValue);
|
||||
var
|
||||
TempRsltDict : ICefDictionaryValue;
|
||||
TempResult : boolean;
|
||||
begin
|
||||
if aSuccess and (aResult <> nil) then
|
||||
begin
|
||||
TempRsltDict := aResult.GetDictionary;
|
||||
|
||||
if TCEFJson.ReadBoolean(TempRsltDict, 'result', TempResult) and TempResult then
|
||||
TThread.ForceQueue(nil,
|
||||
procedure
|
||||
begin
|
||||
LogMem.Lines.Add('Successful CanEmulate. Emulation is supported.');
|
||||
end)
|
||||
else
|
||||
TThread.ForceQueue(nil,
|
||||
procedure
|
||||
begin
|
||||
LogMem.Lines.Add('Successful CanEmulate. Emulation is not supported.');
|
||||
end);
|
||||
end
|
||||
else
|
||||
TThread.ForceQueue(nil,
|
||||
procedure
|
||||
begin
|
||||
LogMem.Lines.Add('Unsuccessful CanEmulate');
|
||||
end);
|
||||
end;
|
||||
|
||||
procedure TForm1.HandleClearDeviceMetricsOverrideResult(aSuccess : boolean; const aResult: ICefValue);
|
||||
begin
|
||||
if aSuccess and (aResult <> nil) then
|
||||
TThread.ForceQueue(nil,
|
||||
procedure
|
||||
begin
|
||||
LogMem.Lines.Add('Successful ClearDeviceMetricsOverride');
|
||||
end)
|
||||
else
|
||||
TThread.ForceQueue(nil,
|
||||
procedure
|
||||
begin
|
||||
LogMem.Lines.Add('Unsuccessful ClearDeviceMetricsOverride');
|
||||
end);
|
||||
end;
|
||||
|
||||
procedure TForm1.HandleSetDeviceMetricsOverrideResult(aSuccess : boolean; const aResult: ICefValue);
|
||||
begin
|
||||
if aSuccess and (aResult <> nil) then
|
||||
TThread.ForceQueue(nil,
|
||||
procedure
|
||||
begin
|
||||
LogMem.Lines.Add('Successful SetDeviceMetricsOverride');
|
||||
end)
|
||||
else
|
||||
TThread.ForceQueue(nil,
|
||||
procedure
|
||||
begin
|
||||
LogMem.Lines.Add('Unsuccessful SetDeviceMetricsOverride');
|
||||
end);
|
||||
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="99" Minor="2" Release="13"/>
|
||||
<Version Major="99" Minor="2" Release="14"/>
|
||||
<Files Count="204">
|
||||
<Item1>
|
||||
<Filename Value="..\source\uCEFAccessibilityHandler.pas"/>
|
||||
|
@ -68,13 +68,13 @@ uses
|
||||
const
|
||||
CEF_SUPPORTED_VERSION_MAJOR = 99;
|
||||
CEF_SUPPORTED_VERSION_MINOR = 2;
|
||||
CEF_SUPPORTED_VERSION_RELEASE = 13;
|
||||
CEF_SUPPORTED_VERSION_RELEASE = 14;
|
||||
CEF_SUPPORTED_VERSION_BUILD = 0;
|
||||
|
||||
CEF_CHROMEELF_VERSION_MAJOR = 99;
|
||||
CEF_CHROMEELF_VERSION_MINOR = 0;
|
||||
CEF_CHROMEELF_VERSION_RELEASE = 4844;
|
||||
CEF_CHROMEELF_VERSION_BUILD = 83;
|
||||
CEF_CHROMEELF_VERSION_BUILD = 84;
|
||||
|
||||
{$IFDEF MSWINDOWS}
|
||||
LIBCEF_DLL = 'libcef.dll';
|
||||
|
@ -2,9 +2,9 @@
|
||||
"UpdateLazPackages" : [
|
||||
{
|
||||
"ForceNotify" : true,
|
||||
"InternalVersion" : 373,
|
||||
"InternalVersion" : 374,
|
||||
"Name" : "cef4delphi_lazarus.lpk",
|
||||
"Version" : "99.2.13.0"
|
||||
"Version" : "99.2.14.0"
|
||||
}
|
||||
],
|
||||
"UpdatePackageData" : {
|
||||
|
Loading…
Reference in New Issue
Block a user