1
0
mirror of https://github.com/salvadordf/CEF4Delphi.git synced 2025-07-12 22:30:17 +02:00

Added CopyCEFDlls tool made by raelb

Added GlobalCEFApp properties with most of the switches defined in cef_switches.cc
This commit is contained in:
Salvador Díaz Fau
2019-07-22 09:33:24 +02:00
parent 2cb513540a
commit 5c6539e3a9
9 changed files with 1275 additions and 6 deletions

View File

@ -165,10 +165,27 @@ type
FAllowFileAccessFromFiles : boolean;
FAllowRunningInsecureContent : boolean;
FMustCreateResourceBundleHandler : boolean;
FMustCreateBrowserProcessHandler : boolean;
FMustCreateRenderProcessHandler : boolean;
FMustCreateLoadHandler : boolean;
FPluginPolicy : TCefPluginPolicySwitch;
FDefaultEncoding : string;
FDisableJavascript : boolean;
FDisableJavascriptCloseWindows : boolean;
FDisableJavascriptAccessClipboard : boolean;
FDisableJavascriptDomPaste : boolean;
FAllowUniversalAccessFromFileUrls : boolean;
FDisableImageLoading : boolean;
FImageShrinkStandaloneToFit : boolean;
FDisableTextAreaResize : boolean;
FDisableTabToLinks : boolean;
FDisablePlugins : boolean;
FEnableProfanityFilter : boolean;
FDisableSpellChecking : boolean;
FOverrideSpellCheckLang : string;
//FEnablePrintPreview : boolean;
FMustCreateResourceBundleHandler : boolean;
FMustCreateBrowserProcessHandler : boolean;
FMustCreateRenderProcessHandler : boolean;
FMustCreateLoadHandler : boolean;
// ICefBrowserProcessHandler
FOnContextInitialized : TOnContextInitializedEvent;
@ -420,6 +437,24 @@ type
property MetricsRecordingOnly : boolean read FMetricsRecordingOnly write FMetricsRecordingOnly;
property AllowFileAccessFromFiles : boolean read FAllowFileAccessFromFiles write FAllowFileAccessFromFiles;
property AllowRunningInsecureContent : boolean read FAllowRunningInsecureContent write FAllowRunningInsecureContent;
//property EnablePrintPreview : boolean read FEnablePrintPreview write FEnablePrintPreview;
property PluginPolicy : TCefPluginPolicySwitch read FPluginPolicy write FPluginPolicy;
property DefaultEncoding : string read FDefaultEncoding write FDefaultEncoding;
property DisableJavascript : boolean read FDisableJavascript write FDisableJavascript;
property DisableJavascriptCloseWindows : boolean read FDisableJavascriptCloseWindows write FDisableJavascriptCloseWindows;
property DisableJavascriptAccessClipboard : boolean read FDisableJavascriptAccessClipboard write FDisableJavascriptAccessClipboard;
property DisableJavascriptDomPaste : boolean read FDisableJavascriptDomPaste write FDisableJavascriptDomPaste;
property AllowUniversalAccessFromFileUrls : boolean read FAllowUniversalAccessFromFileUrls write FAllowUniversalAccessFromFileUrls;
property DisableImageLoading : boolean read FDisableImageLoading write FDisableImageLoading;
property ImageShrinkStandaloneToFit : boolean read FImageShrinkStandaloneToFit write FImageShrinkStandaloneToFit;
property DisableTextAreaResize : boolean read FDisableTextAreaResize write FDisableTextAreaResize;
property DisableTabToLinks : boolean read FDisableTabToLinks write FDisableTabToLinks;
property DisablePlugins : boolean read FDisablePlugins write FDisablePlugins;
property EnableProfanityFilter : boolean read FEnableProfanityFilter write FEnableProfanityFilter;
property DisableSpellChecking : boolean read FDisableSpellChecking write FDisableSpellChecking;
property OverrideSpellCheckLang : string read FOverrideSpellCheckLang write FOverrideSpellCheckLang;
property ChildProcessesCount : integer read GetChildProcessesCount;
property UsedMemory : cardinal read GetUsedMemory;
property TotalSystemMemory : uint64 read GetTotalSystemMemory;
@ -573,11 +608,28 @@ begin
FMetricsRecordingOnly := False;
FAllowFileAccessFromFiles := False;
FAllowRunningInsecureContent := False;
FPluginPolicy := PLUGIN_POLICY_SWITCH_ALLOW;
FDefaultEncoding := '';
FDisableJavascript := False;
FEnableFeatures := '';
FDisableFeatures := '';
FEnableBlinkFeatures := '';
FDisableBlinkFeatures := '';
FDisableJavascriptCloseWindows := False;
FDisableJavascriptAccessClipboard := False;
FDisableJavascriptDomPaste := False;
FAllowUniversalAccessFromFileUrls := False;
FDisableImageLoading := False;
FImageShrinkStandaloneToFit := False;
FDisableTextAreaResize := False;
FDisableTabToLinks := False;
FDisablePlugins := False;
FEnableProfanityFilter := False;
FDisableSpellChecking := False;
FOverrideSpellCheckLang := '';
//FEnablePrintPreview := False;
FMustCreateResourceBundleHandler := False;
FMustCreateBrowserProcessHandler := True;
FMustCreateRenderProcessHandler := False;
@ -1617,6 +1669,56 @@ begin
if FAllowRunningInsecureContent then
commandLine.AppendSwitch('--allow-running-insecure-content');
//if FEnablePrintPreview then commandLine.AppendSwitch('--enable-print-preview');
case FPluginPolicy of
PLUGIN_POLICY_SWITCH_DETECT : commandLine.AppendSwitchWithValue('--plugin-policy', 'detect');
PLUGIN_POLICY_SWITCH_BLOCK : commandLine.AppendSwitchWithValue('--plugin-policy', 'block');
end;
if (length(FDefaultEncoding) > 0) then
commandLine.AppendSwitchWithValue('--default-encoding', FDefaultEncoding);
if FDisableJavascript then
commandLine.AppendSwitch('--disable-javascript');
if FDisableJavascriptCloseWindows then
commandLine.AppendSwitch('--disable-javascript-close-windows');
if FDisableJavascriptAccessClipboard then
commandLine.AppendSwitch('--disable-javascript-access-clipboard');
if FDisableJavascriptDomPaste then
commandLine.AppendSwitch('--disable-javascript-dom-paste');
if FAllowUniversalAccessFromFileUrls then
commandLine.AppendSwitch('--allow-universal-access-from-files');
if FDisableImageLoading then
commandLine.AppendSwitch('--disable-image-loading');
if FImageShrinkStandaloneToFit then
commandLine.AppendSwitch('--image-shrink-standalone-to-fit');
if FDisableTextAreaResize then
commandLine.AppendSwitch('--disable-text-area-resize');
if FDisableTabToLinks then
commandLine.AppendSwitch('--disable-tab-to-links');
if FDisablePlugins then
commandLine.AppendSwitch('--disable-plugins');
if FEnableProfanityFilter then
commandLine.AppendSwitch('--enable-profanity-filter');
if FDisableSpellChecking then
commandLine.AppendSwitch('--disable-spell-checking');
if (length(FOverrideSpellCheckLang) > 0) then
commandLine.AppendSwitchWithValue('--override-spell-check-lang', FOverrideSpellCheckLang);
// The list of features you can enable is here :
// https://chromium.googlesource.com/chromium/src/+/master/chrome/common/chrome_features.cc
if (length(FEnableFeatures) > 0) then

View File

@ -872,6 +872,13 @@ type
PLUGIN_POLICY_DISABLE
);
// cef/libcef/common/cef_switches.cc (values for the --plugin-policy switch)
TCefPluginPolicySwitch = (
PLUGIN_POLICY_SWITCH_ALLOW, // Default value
PLUGIN_POLICY_SWITCH_DETECT,
PLUGIN_POLICY_SWITCH_BLOCK
);
// /include/internal/cef_types.h (cef_color_type_t)
TCefColorType = (
CEF_COLOR_TYPE_RGBA_8888,

View File

@ -0,0 +1,19 @@
del /s /q *.dcu
del /s /q *.exe
del /s /q *.txt
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

View File

@ -0,0 +1,15 @@
program CopyCEFDlls;
uses
Vcl.Forms,
Unit1 in 'Unit1.pas' {Form1},
Utils in 'Utils.pas';
{$R *.res}
begin
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.

View File

@ -0,0 +1,614 @@
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ProjectGuid>{2D055E2A-FD0C-4776-9677-14D76C011347}</ProjectGuid>
<ProjectVersion>18.5</ProjectVersion>
<FrameworkType>VCL</FrameworkType>
<MainSource>CopyCEFDlls.dpr</MainSource>
<Base>True</Base>
<Config Condition="'$(Config)'==''">Debug</Config>
<Platform Condition="'$(Platform)'==''">Win32</Platform>
<TargetedPlatforms>1</TargetedPlatforms>
<AppType>Application</AppType>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Base' or '$(Base)'!=''">
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Base)'=='true') or '$(Base_Win32)'!=''">
<Base_Win32>true</Base_Win32>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Win64' and '$(Base)'=='true') or '$(Base_Win64)'!=''">
<Base_Win64>true</Base_Win64>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Debug' or '$(Cfg_1)'!=''">
<Cfg_1>true</Cfg_1>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Cfg_1)'=='true') or '$(Cfg_1_Win32)'!=''">
<Cfg_1_Win32>true</Cfg_1_Win32>
<CfgParent>Cfg_1</CfgParent>
<Cfg_1>true</Cfg_1>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Config)'=='Release' or '$(Cfg_2)'!=''">
<Cfg_2>true</Cfg_2>
<CfgParent>Base</CfgParent>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="('$(Platform)'=='Win32' and '$(Cfg_2)'=='true') or '$(Cfg_2_Win32)'!=''">
<Cfg_2_Win32>true</Cfg_2_Win32>
<CfgParent>Cfg_2</CfgParent>
<Cfg_2>true</Cfg_2>
<Base>true</Base>
</PropertyGroup>
<PropertyGroup Condition="'$(Base)'!=''">
<DCC_DcuOutput>.\$(Platform)\$(Config)</DCC_DcuOutput>
<DCC_ExeOutput>.\$(Platform)\$(Config)</DCC_ExeOutput>
<DCC_E>false</DCC_E>
<DCC_N>false</DCC_N>
<DCC_S>false</DCC_S>
<DCC_F>false</DCC_F>
<DCC_K>false</DCC_K>
<DCC_UsePackage>RESTBackendComponents;CloudService;soaprtl;soapmidas;RESTComponents;FireDACIBDriver;FireDACCommon;soapserver;FireDACCommonDriver;inet;FireDAC;FireDACSqliteDriver;$(DCC_UsePackage)</DCC_UsePackage>
<DCC_Namespace>System;Xml;Data;Datasnap;Web;Soap;Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;$(DCC_Namespace)</DCC_Namespace>
<Icon_MainIcon>$(BDS)\bin\delphi_PROJECTICON.ico</Icon_MainIcon>
<UWP_DelphiLogo44>$(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_44.png</UWP_DelphiLogo44>
<UWP_DelphiLogo150>$(BDS)\bin\Artwork\Windows\UWP\delphi_UwpDefault_150.png</UWP_DelphiLogo150>
<SanitizedProjectName>CopyCEFDlls</SanitizedProjectName>
</PropertyGroup>
<PropertyGroup Condition="'$(Base_Win32)'!=''">
<DCC_UsePackage>DBXSqliteDriver;smwordRX102;dxSpreadSheetCoreDialogsRS25;dxRibbonCustomizationFormRS25;dxPSPrVwRibbonRS25;vclactnband;vclFireDAC;TMSUnicodeDX102;cxExportRS25;dxSpreadSheetInplaceRichEditRS25;dxHttpIndyRequestRS25;tethering;lmdrtplugin;dxPScxCommonRS25;FireDACADSDriver;NxCommonDsgn_d10_2;cxPivotGridOLAPRS25;StrSecII250;SMCmpntPk;NxCollection6Dsgn_d10_2;cxSchedulerGridRS25;vcltouch;vcldb;Intraweb;svn;NxGridDsgn_d10_2;hclcore_xe102;cxLibraryRS25;dxGaugeControlRS25;lmdrtdialog;vclib;VirtualShellToolsD;dxFlowChartAdvancedCustomizeFormRS25;NxDBGrid6Run_d10_2;NxCollection6Run_d10_2;vclx;lmdrtelpro;EmbeddedWebBrowser_Tokyo;lmdrtthemes;BCComponents.XE102.Designtime;dxSpreadSheetConditionalFormattingDialogsRS25;dxTileControlRS25;FrameViewerXE102;dxMapControlRS25;dxPDFViewerRS25;dxDockingRS25;VCLRESTComponents;NxCommonRun_d10_2;dxPSLnksRS25;dxWizardControlRS25;dxRichEditControlRS25;NxLayout6Run_d10_2;vclie;bindengine;dxFireDACServerModeRS25;vquery250;FireDACMySQLDriver;RvHtmlD10_2;dxPSdxPDFViewerLnkRS25;ALCINOE_XE102;bindcompdbx;NxGridRun_d10_2;GR32_D;dxPSdxLCLnkRS25;RVPkgD10_2;IndyIPServer;dac250;IndySystem;PngComponents;dsnapcon;djsonrt;VirtualTreesR;dxPSRichEditControlLnkRS25;FireDACMSAccDriver;fmxFireDAC;vclimg;dxdbtrRS25;dxPScxTLLnkRS25;dxSpreadSheetRS25;dxPScxSchedulerLnkRS25;cxGridRS25;dxSpreadSheetCoreConditionalFormattingDialogsRS25;DbxCommonDriver;dxorgcRS25;RvXmlD10_2;dxCloudServiceLibraryRS25;xmlrtl;BCControls.XE102.Runtime;fmxobj;ATFileNotificationPk;unidacfmx250;rtl;GR32_R;DbxClientDriver;dacvcl250;dxPScxGridLnkRS25;dxPSCoreRS25;dxmdsRS25;lmdrtprint;PBClipboardPk;NxCollectionRun_d10_2;BCEditor.XE102.Runtime;appanalytics;lmdrtdocking;IndyIPClient;bindcompvcl;dxADOEMFRS25;dklang250;VclSmp;RVHunSpellPkgD10_2;tb2k_d12;RtmRxCtl250;cxVerticalGridRS25;dxtrmdRS25;dxADOServerModeRS25;ZComponent;dxCoreRS25;dxRichEditControlCoreRS25;DBXInterBaseDriver;cxSchedulerTreeBrowserRS25;ZCore;BCControls.XE102.Designtime;svnui;NxDBGridDsgn_d10_2;lmdrtl;htmlcompfm_xe102;dxPSdxFCLnkRS25;dxRichEditCoreRS25;NxDBGridRun_d10_2;bindcompfmx;lmdrteldb;unidac250;inetdb;CEF4Delphi;RaizeComponentsVcl;RaizeComponentsVclDb;fmx;fmxdae;EasyListviewD;dxBarDBNavRS25;dxTabbedMDIRS25;ZipMasterR;dxPScxPivotGridLnkRS25;SpTBXLib;dbexpress;IndyCore;NxLayout6Dsgn_d10_2;rvHtmlViewImportD10_2;NxGrid6Run_d10_2;RVASpellPkgD10_2;ZParseSql;dxFlowChartRS25;dsnap;lmdrtrtlx;dxRichEditDocumentModelRS25;dxBarRS25;STPageControlPk;JvSStdCtrls;dxdborRS25;lmdrtelcore;htmlcomp_xe102;dxPScxExtCommonRS25;acntDX10Tokyo_R;cxPivotGridRS25;FileLabelPk;dxSpreadSheetReportDesignerRS25;dxNavBarRS25;dxPSdxSpreadSheetLnkRS25;cxSchedulerRibbonStyleEventEditorRS25;DBXMySQLDriver;NxInspectorDsgn_d10_2;NxInspector6Run_d10_2;FireDACCommonODBC;NxInspector6Dsgn_d10_2;cxTreeListRS25;IndyIPCommon;vcl;HotKeyManagerPk;dxPScxVGridLnkRS25;NativeExcelPk;dxBarExtItemsRS25;dxSkinsCoreRS25;dxComnRS25;RichViewActionsD10_2;dxPSdxDBTVLnkRS25;NxInspectorRun_d10_2;NxGrid6Dsgn_d10_2;madExcept_;madBasic_;ZDbc;dxSpreadSheetCoreRS25;dxServerModeRS25;dxPScxPCProdRS25;NxStandard6Dsgn_d10_2;BCComponents.XE102.Runtime;dxFlowChartLayoutsRS25;FireDACPgDriver;ibmonitor;dxEMFRS25;ibxpress;htmlvtree_xe102;ibxbindings;dxPsPrVwAdvRS25;vclwinx;ImageListExPk;DIHtmlParser_D10_2;madDisAsm_;dxRichEditInplaceRS25;htmlreports_xe102;cxTreeListdxBarPopupMenuRS25;CustomIPTransport;vcldsnap;cxSchedulerWebServiceStorageRS25;dxPSdxOCLnkRS25;bindcomp;ZPlain;crcontrols250;cxPivotGridChartRS25;StyleControls_dxe102Tokyo;dxBarExtDBItemsRS25;cxSchedulerRS25;SynEdit_R;dxDBXServerModeRS25;dxFireDACEMFRS25;dxGDIPlusRS25;NxCollectionDsgn_d10_2;dxPSdxGaugeControlLnkRS25;NxStandard6Run_d10_2;dbxcds;unidacvcl250;adortl;NxDBGrid6Dsgn_d10_2;AbbreviaVCL;RVDBPkgD10_2;dacfmx250;MPCommonLibD;dxPSdxDBOCLnkRS25;dxRibbonRS25;dsnapxml;dxSpellCheckerRS25;dbrtl;IndyProtocols;inetdbxpress;dxFlowChartDesignerRS25;Python_XE102;dxPSdxMapControlLnkRS25;fmxase;$(DCC_UsePackage)</DCC_UsePackage>
<DCC_Namespace>Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace)</DCC_Namespace>
<BT_BuildType>Debug</BT_BuildType>
<VerInfo_IncludeVerInfo>true</VerInfo_IncludeVerInfo>
<VerInfo_Keys>CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=</VerInfo_Keys>
<VerInfo_Locale>1033</VerInfo_Locale>
<Manifest_File>$(BDS)\bin\default_app.manifest</Manifest_File>
</PropertyGroup>
<PropertyGroup Condition="'$(Base_Win64)'!=''">
<DCC_UsePackage>DBXSqliteDriver;smwordRX102;dxSpreadSheetCoreDialogsRS25;dxRibbonCustomizationFormRS25;dxPSPrVwRibbonRS25;vclactnband;vclFireDAC;cxExportRS25;dxSpreadSheetInplaceRichEditRS25;dxHttpIndyRequestRS25;tethering;lmdrtplugin;dxPScxCommonRS25;FireDACADSDriver;cxPivotGridOLAPRS25;cxSchedulerGridRS25;vcltouch;vcldb;Intraweb;cxLibraryRS25;dxGaugeControlRS25;lmdrtdialog;vclib;VirtualShellToolsD;dxFlowChartAdvancedCustomizeFormRS25;vclx;lmdrtelpro;lmdrtthemes;dxSpreadSheetConditionalFormattingDialogsRS25;dxTileControlRS25;dxMapControlRS25;dxPDFViewerRS25;dxDockingRS25;VCLRESTComponents;NxCommonRun_d10_2;dxPSLnksRS25;dxWizardControlRS25;dxRichEditControlRS25;vclie;bindengine;dxFireDACServerModeRS25;FireDACMySQLDriver;dxPSdxPDFViewerLnkRS25;bindcompdbx;NxGridRun_d10_2;dxPSdxLCLnkRS25;IndyIPServer;IndySystem;PngComponents;dsnapcon;VirtualTreesR;dxPSRichEditControlLnkRS25;FireDACMSAccDriver;fmxFireDAC;vclimg;dxdbtrRS25;dxPScxTLLnkRS25;dxSpreadSheetRS25;dxPScxSchedulerLnkRS25;cxGridRS25;dxSpreadSheetCoreConditionalFormattingDialogsRS25;DbxCommonDriver;dxorgcRS25;dxCloudServiceLibraryRS25;xmlrtl;fmxobj;rtl;GR32_R;DbxClientDriver;dxPScxGridLnkRS25;dxPSCoreRS25;dxmdsRS25;lmdrtprint;NxCollectionRun_d10_2;appanalytics;lmdrtdocking;IndyIPClient;bindcompvcl;dxADOEMFRS25;VclSmp;cxVerticalGridRS25;dxtrmdRS25;dxADOServerModeRS25;dxCoreRS25;dxRichEditControlCoreRS25;DBXInterBaseDriver;cxSchedulerTreeBrowserRS25;lmdrtl;dxPSdxFCLnkRS25;dxRichEditCoreRS25;NxDBGridRun_d10_2;bindcompfmx;lmdrteldb;inetdb;CEF4Delphi;RaizeComponentsVcl;RaizeComponentsVclDb;fmx;fmxdae;EasyListviewD;dxBarDBNavRS25;dxTabbedMDIRS25;dxPScxPivotGridLnkRS25;SpTBXLib;dbexpress;IndyCore;rvHtmlViewImportD10_2;dxFlowChartRS25;dsnap;lmdrtrtlx;dxRichEditDocumentModelRS25;dxBarRS25;dxdborRS25;lmdrtelcore;dxPScxExtCommonRS25;cxPivotGridRS25;dxSpreadSheetReportDesignerRS25;dxNavBarRS25;dxPSdxSpreadSheetLnkRS25;cxSchedulerRibbonStyleEventEditorRS25;DBXMySQLDriver;FireDACCommonODBC;cxTreeListRS25;IndyIPCommon;vcl;dxPScxVGridLnkRS25;dxBarExtItemsRS25;dxSkinsCoreRS25;dxComnRS25;RichViewActionsD10_2;dxPSdxDBTVLnkRS25;NxInspectorRun_d10_2;dxSpreadSheetCoreRS25;dxServerModeRS25;dxPScxPCProdRS25;dxFlowChartLayoutsRS25;FireDACPgDriver;ibmonitor;dxEMFRS25;ibxpress;ibxbindings;dxPsPrVwAdvRS25;vclwinx;dxRichEditInplaceRS25;cxTreeListdxBarPopupMenuRS25;CustomIPTransport;vcldsnap;cxSchedulerWebServiceStorageRS25;dxPSdxOCLnkRS25;bindcomp;cxPivotGridChartRS25;StyleControls_dxe102Tokyo;dxBarExtDBItemsRS25;cxSchedulerRS25;SynEdit_R;dxDBXServerModeRS25;dxFireDACEMFRS25;dxGDIPlusRS25;dxPSdxGaugeControlLnkRS25;dbxcds;adortl;AbbreviaVCL;MPCommonLibD;dxPSdxDBOCLnkRS25;dxRibbonRS25;dsnapxml;dxSpellCheckerRS25;dbrtl;IndyProtocols;inetdbxpress;dxFlowChartDesignerRS25;dxPSdxMapControlLnkRS25;fmxase;$(DCC_UsePackage)</DCC_UsePackage>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_1)'!=''">
<DCC_Define>DEBUG;$(DCC_Define)</DCC_Define>
<DCC_DebugDCUs>true</DCC_DebugDCUs>
<DCC_Optimize>false</DCC_Optimize>
<DCC_GenerateStackFrames>true</DCC_GenerateStackFrames>
<DCC_DebugInfoInExe>true</DCC_DebugInfoInExe>
<DCC_RemoteDebug>true</DCC_RemoteDebug>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_1_Win32)'!=''">
<DCC_RemoteDebug>false</DCC_RemoteDebug>
<AppEnableRuntimeThemes>true</AppEnableRuntimeThemes>
<AppDPIAwarenessMode>PerMonitor</AppDPIAwarenessMode>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_2)'!=''">
<DCC_LocalDebugSymbols>false</DCC_LocalDebugSymbols>
<DCC_Define>RELEASE;$(DCC_Define)</DCC_Define>
<DCC_SymbolReferenceInfo>0</DCC_SymbolReferenceInfo>
<DCC_DebugInformation>0</DCC_DebugInformation>
</PropertyGroup>
<PropertyGroup Condition="'$(Cfg_2_Win32)'!=''">
<AppEnableRuntimeThemes>true</AppEnableRuntimeThemes>
<AppDPIAwarenessMode>PerMonitor</AppDPIAwarenessMode>
</PropertyGroup>
<ItemGroup>
<DelphiCompile Include="$(MainSource)">
<MainSource>MainSource</MainSource>
</DelphiCompile>
<DCCReference Include="Unit1.pas">
<Form>Form1</Form>
<FormType>dfm</FormType>
</DCCReference>
<DCCReference Include="Utils.pas"/>
<BuildConfiguration Include="Release">
<Key>Cfg_2</Key>
<CfgParent>Base</CfgParent>
</BuildConfiguration>
<BuildConfiguration Include="Base">
<Key>Base</Key>
</BuildConfiguration>
<BuildConfiguration Include="Debug">
<Key>Cfg_1</Key>
<CfgParent>Base</CfgParent>
</BuildConfiguration>
</ItemGroup>
<ProjectExtensions>
<Borland.Personality>Delphi.Personality.12</Borland.Personality>
<Borland.ProjectType>Application</Borland.ProjectType>
<BorlandProject>
<Delphi.Personality>
<Source>
<Source Name="MainSource">CopyCEFDlls.dpr</Source>
</Source>
</Delphi.Personality>
<Deployment Version="3">
<DeployFile LocalName="Win32\Debug\CopyCEFDlls.exe" Configuration="Debug" Class="ProjectOutput">
<Platform Name="Win32">
<RemoteName>CopyCEFDlls.exe</RemoteName>
<Overwrite>true</Overwrite>
</Platform>
</DeployFile>
<DeployClass Name="AdditionalDebugSymbols">
<Platform Name="iOSSimulator">
<Operation>1</Operation>
</Platform>
<Platform Name="OSX32">
<RemoteDir>Contents\MacOS</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Win32">
<Operation>0</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidClassesDexFile">
<Platform Name="Android">
<RemoteDir>classes</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidFileProvider">
<Platform Name="Android">
<RemoteDir>res\xml</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidGDBServer">
<Platform Name="Android">
<RemoteDir>library\lib\armeabi-v7a</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidLibnativeArmeabiFile">
<Platform Name="Android">
<RemoteDir>library\lib\armeabi</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidLibnativeMipsFile">
<Platform Name="Android">
<RemoteDir>library\lib\mips</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidServiceOutput">
<Platform Name="Android">
<RemoteDir>library\lib\armeabi-v7a</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidSplashImageDef">
<Platform Name="Android">
<RemoteDir>res\drawable</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidSplashStyles">
<Platform Name="Android">
<RemoteDir>res\values</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="AndroidSplashStylesV21">
<Platform Name="Android">
<RemoteDir>res\values-v21</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_DefaultAppIcon">
<Platform Name="Android">
<RemoteDir>res\drawable</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_LauncherIcon144">
<Platform Name="Android">
<RemoteDir>res\drawable-xxhdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_LauncherIcon36">
<Platform Name="Android">
<RemoteDir>res\drawable-ldpi</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_LauncherIcon48">
<Platform Name="Android">
<RemoteDir>res\drawable-mdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_LauncherIcon72">
<Platform Name="Android">
<RemoteDir>res\drawable-hdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_LauncherIcon96">
<Platform Name="Android">
<RemoteDir>res\drawable-xhdpi</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_SplashImage426">
<Platform Name="Android">
<RemoteDir>res\drawable-small</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_SplashImage470">
<Platform Name="Android">
<RemoteDir>res\drawable-normal</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_SplashImage640">
<Platform Name="Android">
<RemoteDir>res\drawable-large</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="Android_SplashImage960">
<Platform Name="Android">
<RemoteDir>res\drawable-xlarge</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="DebugSymbols">
<Platform Name="iOSSimulator">
<Operation>1</Operation>
</Platform>
<Platform Name="OSX32">
<RemoteDir>Contents\MacOS</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Win32">
<Operation>0</Operation>
</Platform>
</DeployClass>
<DeployClass Name="DependencyFramework">
<Platform Name="OSX32">
<RemoteDir>Contents\MacOS</RemoteDir>
<Operation>1</Operation>
<Extensions>.framework</Extensions>
</Platform>
<Platform Name="OSX64">
<RemoteDir>Contents\MacOS</RemoteDir>
<Operation>1</Operation>
<Extensions>.framework</Extensions>
</Platform>
<Platform Name="Win32">
<Operation>0</Operation>
</Platform>
</DeployClass>
<DeployClass Name="DependencyModule">
<Platform Name="iOSDevice32">
<Operation>1</Operation>
<Extensions>.dylib</Extensions>
</Platform>
<Platform Name="iOSDevice64">
<Operation>1</Operation>
<Extensions>.dylib</Extensions>
</Platform>
<Platform Name="iOSSimulator">
<Operation>1</Operation>
<Extensions>.dylib</Extensions>
</Platform>
<Platform Name="OSX32">
<RemoteDir>Contents\MacOS</RemoteDir>
<Operation>1</Operation>
<Extensions>.dylib</Extensions>
</Platform>
<Platform Name="OSX64">
<RemoteDir>Contents\MacOS</RemoteDir>
<Operation>1</Operation>
<Extensions>.dylib</Extensions>
</Platform>
<Platform Name="Win32">
<Operation>0</Operation>
<Extensions>.dll;.bpl</Extensions>
</Platform>
</DeployClass>
<DeployClass Required="true" Name="DependencyPackage">
<Platform Name="iOSDevice32">
<Operation>1</Operation>
<Extensions>.dylib</Extensions>
</Platform>
<Platform Name="iOSDevice64">
<Operation>1</Operation>
<Extensions>.dylib</Extensions>
</Platform>
<Platform Name="iOSSimulator">
<Operation>1</Operation>
<Extensions>.dylib</Extensions>
</Platform>
<Platform Name="OSX32">
<RemoteDir>Contents\MacOS</RemoteDir>
<Operation>1</Operation>
<Extensions>.dylib</Extensions>
</Platform>
<Platform Name="OSX64">
<RemoteDir>Contents\MacOS</RemoteDir>
<Operation>1</Operation>
<Extensions>.dylib</Extensions>
</Platform>
<Platform Name="Win32">
<Operation>0</Operation>
<Extensions>.bpl</Extensions>
</Platform>
</DeployClass>
<DeployClass Name="File">
<Platform Name="Android">
<Operation>0</Operation>
</Platform>
<Platform Name="iOSDevice32">
<Operation>0</Operation>
</Platform>
<Platform Name="iOSDevice64">
<Operation>0</Operation>
</Platform>
<Platform Name="iOSSimulator">
<Operation>0</Operation>
</Platform>
<Platform Name="OSX32">
<RemoteDir>Contents\Resources\StartUp\</RemoteDir>
<Operation>0</Operation>
</Platform>
<Platform Name="OSX64">
<RemoteDir>Contents\Resources\StartUp\</RemoteDir>
<Operation>0</Operation>
</Platform>
<Platform Name="Win32">
<Operation>0</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPad_Launch1024">
<Platform Name="iOSDevice32">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice64">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPad_Launch1536">
<Platform Name="iOSDevice32">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice64">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPad_Launch2048">
<Platform Name="iOSDevice32">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice64">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPad_Launch768">
<Platform Name="iOSDevice32">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice64">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPhone_Launch320">
<Platform Name="iOSDevice32">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice64">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPhone_Launch640">
<Platform Name="iOSDevice32">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice64">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="iPhone_Launch640x1136">
<Platform Name="iOSDevice32">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice64">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectAndroidManifest">
<Platform Name="Android">
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectiOSDeviceDebug">
<Platform Name="iOSDevice32">
<RemoteDir>..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice64">
<RemoteDir>..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectiOSDeviceResourceRules">
<Platform Name="iOSDevice32">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice64">
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectiOSEntitlements">
<Platform Name="iOSDevice32">
<RemoteDir>..\</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice64">
<RemoteDir>..\</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectiOSInfoPList">
<Platform Name="iOSDevice32">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice64">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectiOSResource">
<Platform Name="iOSDevice32">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice64">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectOSXDebug">
<Platform Name="OSX64">
<RemoteDir>..\$(PROJECTNAME).app.dSYM\Contents\Resources\DWARF</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectOSXEntitlements">
<Platform Name="OSX32">
<RemoteDir>..\</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="OSX64">
<RemoteDir>..\</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectOSXInfoPList">
<Platform Name="OSX32">
<RemoteDir>Contents</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="OSX64">
<RemoteDir>Contents</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectOSXResource">
<Platform Name="OSX32">
<RemoteDir>Contents\Resources</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="OSX64">
<RemoteDir>Contents\Resources</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Required="true" Name="ProjectOutput">
<Platform Name="Android">
<RemoteDir>library\lib\armeabi-v7a</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice32">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSDevice64">
<Operation>1</Operation>
</Platform>
<Platform Name="iOSSimulator">
<Operation>1</Operation>
</Platform>
<Platform Name="Linux64">
<Operation>1</Operation>
</Platform>
<Platform Name="OSX32">
<RemoteDir>Contents\MacOS</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="OSX64">
<RemoteDir>Contents\MacOS</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Win32">
<Operation>0</Operation>
</Platform>
</DeployClass>
<DeployClass Name="ProjectUWPManifest">
<Platform Name="Win32">
<Operation>1</Operation>
</Platform>
<Platform Name="Win64">
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="UWP_DelphiLogo150">
<Platform Name="Win32">
<RemoteDir>Assets</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Win64">
<RemoteDir>Assets</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<DeployClass Name="UWP_DelphiLogo44">
<Platform Name="Win32">
<RemoteDir>Assets</RemoteDir>
<Operation>1</Operation>
</Platform>
<Platform Name="Win64">
<RemoteDir>Assets</RemoteDir>
<Operation>1</Operation>
</Platform>
</DeployClass>
<ProjectRoot Platform="iOSDevice64" Name="$(PROJECTNAME).app"/>
<ProjectRoot Platform="Win64" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="iOSDevice32" Name="$(PROJECTNAME).app"/>
<ProjectRoot Platform="Linux64" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="Win32" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="OSX32" Name="$(PROJECTNAME).app"/>
<ProjectRoot Platform="Android" Name="$(PROJECTNAME)"/>
<ProjectRoot Platform="OSX64" Name="$(PROJECTNAME).app"/>
<ProjectRoot Platform="iOSSimulator" Name="$(PROJECTNAME).app"/>
</Deployment>
<Platforms>
<Platform value="Win32">True</Platform>
<Platform value="Win64">False</Platform>
</Platforms>
</BorlandProject>
<ProjectFileVersion>12</ProjectFileVersion>
</ProjectExtensions>
<Import Project="$(BDS)\Bin\CodeGear.Delphi.Targets" Condition="Exists('$(BDS)\Bin\CodeGear.Delphi.Targets')"/>
<Import Project="$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj" Condition="Exists('$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj')"/>
<Import Project="$(MSBuildProjectName).deployproj" Condition="Exists('$(MSBuildProjectName).deployproj')"/>
</Project>

View File

@ -0,0 +1,147 @@
object Form1: TForm1
Left = 0
Top = 0
BorderWidth = 8
Caption = 'CEF Dlls Copy Tool'
ClientHeight = 366
ClientWidth = 553
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
OldCreateOrder = False
Position = poScreenCenter
OnCreate = FormCreate
OnDestroy = FormDestroy
PixelsPerInch = 96
TextHeight = 13
object PageControl1: TPageControl
Left = 0
Top = 0
Width = 553
Height = 366
ActivePage = TabSheet1
Align = alClient
TabOrder = 0
object TabSheet1: TTabSheet
Caption = 'Setup'
object Panel1: TPanel
Left = 0
Top = 0
Width = 545
Height = 65
Align = alTop
TabOrder = 0
DesignSize = (
545
65)
object Label1: TLabel
Left = 8
Top = 8
Width = 291
Height = 13
Caption = 'Root CEF Binaries folder (contains Release, Resources etc..)'
end
object edtRootFolder: TEdit
Left = 8
Top = 26
Width = 529
Height = 21
Anchors = [akLeft, akTop, akRight]
TabOrder = 0
end
end
object Panel2: TPanel
Left = 0
Top = 297
Width = 545
Height = 41
Align = alBottom
BevelOuter = bvNone
TabOrder = 1
object btnCopy: TButton
Left = 16
Top = 8
Width = 75
Height = 25
Caption = 'Copy'
TabOrder = 0
OnClick = btnCopyClick
end
end
object MemoPanel: TPanel
Left = 0
Top = 65
Width = 545
Height = 232
Align = alClient
BorderWidth = 8
TabOrder = 2
object Label2: TLabel
Left = 9
Top = 9
Width = 527
Height = 13
Align = alTop
Caption = 'List of destination folders: (1 on each line)'
ExplicitWidth = 202
end
object Memo1: TMemo
Left = 9
Top = 22
Width = 527
Height = 201
Align = alClient
ScrollBars = ssBoth
TabOrder = 0
WordWrap = False
end
end
end
object TabSheet2: TTabSheet
Caption = 'Log'
ImageIndex = 1
ExplicitLeft = 0
ExplicitTop = 0
ExplicitWidth = 0
ExplicitHeight = 0
object Panel3: TPanel
Left = 0
Top = 297
Width = 545
Height = 41
Align = alBottom
BevelOuter = bvNone
TabOrder = 0
object btnBack: TButton
Left = 16
Top = 8
Width = 75
Height = 25
Caption = 'Back'
TabOrder = 0
OnClick = btnBackClick
end
end
object Panel4: TPanel
Left = 0
Top = 0
Width = 545
Height = 297
Align = alClient
BorderWidth = 8
TabOrder = 1
object Memo2: TMemo
Left = 9
Top = 9
Width = 527
Height = 279
Align = alClient
TabOrder = 0
end
end
end
end
end

View File

@ -0,0 +1,253 @@
unit Unit1;
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.ComCtrls;
type
TForm1 = class(TForm)
PageControl1: TPageControl;
TabSheet1: TTabSheet;
TabSheet2: TTabSheet;
Panel1: TPanel;
Label1: TLabel;
edtRootFolder: TEdit;
Panel2: TPanel;
MemoPanel: TPanel;
Label2: TLabel;
Memo1: TMemo;
btnCopy: TButton;
Panel3: TPanel;
btnBack: TButton;
Panel4: TPanel;
Memo2: TMemo;
procedure btnBackClick(Sender: TObject);
procedure btnCopyClick(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
procedure AddLog(const Msg: string);
procedure CopyFilesToFolder(const SrcSubFolder, DestFolder, DestSubFolder:
string; var CopyCount, ErrorCount: Integer);
procedure CopyToFolder(DestDir: string);
function GetRootDir: string;
function GetSettingsFileName: string;
procedure LoadSettings;
procedure SaveSettings;
function ValidateRootDir: Boolean;
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
// This tool was created by Rael Bauer (raelb)
// CopyCEFDlls is used to copy cef dll files to multiple destination folders.
{
Copies DLLs according to default distribution, i.e.:
\Release -> \DestDir
\Release\swiftshader -> \DestDir\swiftshader
\Resources -> \DestDir
\Resources\locales -> \DestDir\locales
}
implementation
uses
Utils;
{$R *.dfm}
procedure TForm1.AddLog(const Msg: string);
begin
Memo2.Lines.Add(Msg);
end;
procedure TForm1.btnBackClick(Sender: TObject);
begin
PageControl1.ActivePageIndex := 0;
end;
procedure TForm1.btnCopyClick(Sender: TObject);
var
I: Integer;
begin
PageControl1.ActivePageIndex := 1;
Application.ProcessMessages;
Screen.Cursor := crHourGlass;
try
for I := 0 to Memo1.Lines.Count - 1 do
CopyToFolder(RemoveTrailingBackSlash(Memo1.Lines[I]));
AddLog('Done.');
finally
Screen.Cursor := crDefault;
end;
end;
procedure TForm1.CopyFilesToFolder(const SrcSubFolder, DestFolder,
DestSubFolder: string; var CopyCount, ErrorCount: Integer);
var
DestFile: string;
I: Integer;
SourceFiles: TStringList;
SrcFile: string;
begin
SourceFiles := TStringList.Create;
try
GetFolderContents(GetRootDir + SrcSubFolder, SourceFiles, False, False,
True, False);
if not DirectoryExists(DestFolder + DestSubFolder) then
CreateDir(DestFolder + DestSubFolder);
for I := 0 to SourceFiles.Count - 1 do
begin
SrcFile := GetRootDir + SrcSubFolder + SourceFiles[I];
DestFile := DestFolder + DestSubFolder + SourceFiles[I];
try
CopyFile(PChar(SrcFile), PChar(DestFile), False);
Inc(CopyCount);
except
On E: Exception do
begin
AddLog('Error copying file: ' + SourceFiles[I]);
AddLog('To: ' + DestFolder + SrcSubFolder);
AddLog(E.ClassName +', ' + E.Message);
AddLog('');
Inc(ErrorCount);
end;
end;
end;
finally
SourceFiles.Free;
end;
end;
procedure TForm1.CopyToFolder(DestDir: string);
var
CopyCount: Integer;
ErrorCount: Integer;
begin
if not ValidateRootDir then
exit;
AddLog('Processing "' + DestDir + '"');
if not DirectoryExists(DestDir) then
begin
AddLog('Folder not found.');
AddLog('');
exit;
end;
CopyCount := 0;
ErrorCount := 0;
CopyFilesToFolder('\Release', DestDir, '', CopyCount, ErrorCount);
CopyFilesToFolder('\Release\swiftshader', DestDir, '\swiftshader', CopyCount, ErrorCount);
CopyFilesToFolder('\Resources', DestDir, '', CopyCount, ErrorCount);
CopyFilesToFolder('\Resources\locales', DestDir, '\locales', CopyCount, ErrorCount);
AddLog(CopyCount.ToString +' files copied. ' + ErrorCount.ToString +' errors.');
AddLog('');
end;
function TForm1.ValidateRootDir: Boolean;
begin
Result := False;
if not DirectoryExists(GetRootDir) then
begin
AddLog('Root directory does not exist');
exit;
end;
if not DirectoryExists(GetRootDir + '\Release') then
begin
AddLog('\Release directory does not exist');
exit;
end;
if not DirectoryExists(GetRootDir + '\Release\swiftshader') then
begin
AddLog('\Release\swiftshader directory does not exist');
exit;
end;
if not DirectoryExists(GetRootDir + '\Resources') then
begin
AddLog('\Resources directory does not exist');
exit;
end;
if not DirectoryExists(GetRootDir + '\Resources\locales') then
begin
AddLog('\Resources\locales directory does not exist');
exit;
end;
Result := True;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
SaveSettings;
end;
function TForm1.GetSettingsFileName: string;
begin
Result := ExtractFilePath(Application.ExeName) + 'settings.txt';
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
LoadSettings;
PageControl1.ActivePageIndex := 0;
end;
function TForm1.GetRootDir: string;
begin
Result := RemoveTrailingBackSlash(edtRootFolder.Text);
end;
procedure TForm1.LoadSettings;
var
StrList: TStringList;
begin
if FileExists(GetSettingsFileName) then
begin
StrList := TStringList.Create;
try
StrList.LoadFromFile(GetSettingsFileName);
edtRootFolder.Text := StrList.Values['root_dir'];
StringToList(StrList.Values['paths'], '|', Memo1.Lines);
finally
StrList.Free;
end;
end;
end;
procedure TForm1.SaveSettings;
var
S: string;
StrList: TStringList;
I: Integer;
begin
StrList := TStringList.Create;
try
StrList.Values['root_dir'] := edtRootFolder.Text;
S := '';
for I := 0 to Memo1.Lines.Count - 1 do
S := S + Memo1.Lines[I] + '|';
StrList.Values['paths'] := S;
StrList.SaveToFile(GetSettingsFileName);
finally
StrList.Free;
end;
end;
end.

View File

@ -0,0 +1,112 @@
unit Utils;
interface
uses
System.Classes, System.SysUtils;
procedure StringToList(Str: String; Delimiter: char; const strList: TStrings;
Clear: Boolean = True);
procedure GetFolderContents(Dir: String; OutputList: TStringList;
AddRoot: Boolean; IncludeDirs, IncludeFiles, IncludeSubFolders: Boolean);
function RemoveTrailingBackSlash(const Path: String): String;
implementation
function RemoveTrailingBackSlash(const Path: String): String;
Begin
Result := Path;
if Length(Result) > 0 then
If Result[Length(Result)] = '\' Then
Delete(Result, Length(Result), 1);
End;
procedure StringToList(Str: String; Delimiter: char; const strList: TStrings;
Clear: Boolean = True);
var
p : Integer;
begin
if Clear then
StrList.Clear;
if Str = '' then exit;
if (Length(Str) = 1) and (Str[1] = Delimiter) then exit;
P := Pos(Delimiter, Str);
while P > 0 do begin
// add this string to list
StrList.Add(trim(copy(str, 1, P-1)));
Delete(Str, 1, P);
P := Pos(Delimiter, Str);
end;
// add last string if it wasn't closed with a Delimiter
if Str <> '' then
StrList.Add(trim(Str));
end;
procedure GetFolderContents(Dir: String; OutputList: TStringList;
AddRoot: Boolean; IncludeDirs, IncludeFiles, IncludeSubFolders: Boolean);
procedure GetDir(FolderName: string);
var
Sr: TSearchRec;
TempList: TStringList;
I: Integer;
procedure AddCurrent;
begin
{ if current file is a directory }
if (Sr.Attr and (faDirectory))=faDirectory then
begin
if (Sr.Name='..') or (Sr.Name='.') then Exit;
TempList.Add(FolderName+'\'+Sr.Name);
end
else
{ if current file isn't a directory file }
begin
If IncludeFiles Then
Begin
If AddRoot Then
OutputList.Add(Dir + FolderName+'\'+Sr.Name)
// note: FolderName starts with '\'
Else
OutputList.Add(FolderName+'\'+Sr.Name);
End;
//Inc(Count);
end;
end; {end add current}
begin
TempList := TStringList.Create;
try
if FindFirst(Dir+FolderName+'\*.*',faanyfile,Sr)=0 then
begin
AddCurrent;
while FindNext(Sr)=0 do
AddCurrent;
end;
For I := 0 to TempList.Count - 1 do Begin
If IncludeDirs Then
Begin
If AddRoot Then
OutputList.Add(Dir + TempList[I]) // already contains '\'
Else
OutputList.Add(TempList[I]);
End;
If IncludeSubFolders Then
GetDir(TempList[I]);
End;
finally
TempList.Free;
{ always close the search variable }
System.SysUtils.FindClose(Sr);
end;
end; {end getdir}
begin {main}
Dir := RemoveTrailingBackSlash(Dir);
OutputList.Clear;
GetDir('');
End;
end.

View File

@ -1,8 +1,8 @@
{
"UpdateLazPackages" : [
{
"ForceNotify" : false,
"InternalVersion" : 16,
"ForceNotify" : true,
"InternalVersion" : 17,
"Name" : "cef4delphi_lazarus.lpk",
"Version" : "75.1.4.0"
}