mirror of
https://github.com/salvadordf/CEF4Delphi.git
synced 2024-11-16 00:05:55 +01:00
254 lines
5.8 KiB
ObjectPascal
254 lines
5.8 KiB
ObjectPascal
|
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.
|