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 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 :
|
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 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.13%2Bgd9af866%2Bchromium-99.0.4844.83_windows64.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.13%2Bgd9af866%2Bchromium-99.0.4844.83_linux32.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.13%2Bgd9af866%2Bchromium-99.0.4844.83_linux64.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.13%2Bgd9af866%2Bchromium-99.0.4844.83_linuxarm.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.13%2Bgd9af866%2Bchromium-99.0.4844.83_linuxarm64.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.13%2Bgd9af866%2Bchromium-99.0.4844.83_macosx64.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.
|
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>
|
</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."/>
|
<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"/>
|
<License Value="MPL 1.1"/>
|
||||||
<Version Major="99" Minor="2" Release="13"/>
|
<Version Major="99" Minor="2" Release="14"/>
|
||||||
<Files Count="204">
|
<Files Count="204">
|
||||||
<Item1>
|
<Item1>
|
||||||
<Filename Value="..\source\uCEFAccessibilityHandler.pas"/>
|
<Filename Value="..\source\uCEFAccessibilityHandler.pas"/>
|
||||||
|
@ -68,13 +68,13 @@ uses
|
|||||||
const
|
const
|
||||||
CEF_SUPPORTED_VERSION_MAJOR = 99;
|
CEF_SUPPORTED_VERSION_MAJOR = 99;
|
||||||
CEF_SUPPORTED_VERSION_MINOR = 2;
|
CEF_SUPPORTED_VERSION_MINOR = 2;
|
||||||
CEF_SUPPORTED_VERSION_RELEASE = 13;
|
CEF_SUPPORTED_VERSION_RELEASE = 14;
|
||||||
CEF_SUPPORTED_VERSION_BUILD = 0;
|
CEF_SUPPORTED_VERSION_BUILD = 0;
|
||||||
|
|
||||||
CEF_CHROMEELF_VERSION_MAJOR = 99;
|
CEF_CHROMEELF_VERSION_MAJOR = 99;
|
||||||
CEF_CHROMEELF_VERSION_MINOR = 0;
|
CEF_CHROMEELF_VERSION_MINOR = 0;
|
||||||
CEF_CHROMEELF_VERSION_RELEASE = 4844;
|
CEF_CHROMEELF_VERSION_RELEASE = 4844;
|
||||||
CEF_CHROMEELF_VERSION_BUILD = 83;
|
CEF_CHROMEELF_VERSION_BUILD = 84;
|
||||||
|
|
||||||
{$IFDEF MSWINDOWS}
|
{$IFDEF MSWINDOWS}
|
||||||
LIBCEF_DLL = 'libcef.dll';
|
LIBCEF_DLL = 'libcef.dll';
|
||||||
|
@ -2,9 +2,9 @@
|
|||||||
"UpdateLazPackages" : [
|
"UpdateLazPackages" : [
|
||||||
{
|
{
|
||||||
"ForceNotify" : true,
|
"ForceNotify" : true,
|
||||||
"InternalVersion" : 373,
|
"InternalVersion" : 374,
|
||||||
"Name" : "cef4delphi_lazarus.lpk",
|
"Name" : "cef4delphi_lazarus.lpk",
|
||||||
"Version" : "99.2.13.0"
|
"Version" : "99.2.14.0"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"UpdatePackageData" : {
|
"UpdatePackageData" : {
|
||||||
|
Loading…
Reference in New Issue
Block a user