1
0
mirror of https://github.com/salvadordf/CEF4Delphi.git synced 2025-04-07 06:50:04 +02:00
2024-06-02 18:27:25 +02:00

121 lines
2.7 KiB
ObjectPascal

unit ucustombrowserloader;
{$mode ObjFPC}{$H+}
interface
uses
Classes, SysUtils;
const
LIBNAME = 'libcustombrowser.so';
type
TInitializeCEF4DelphiFunc = procedure; cdecl;
TFinalizeCEF4DelphiFunc = procedure; cdecl;
TTakeSnapshotFunc = procedure; cdecl;
TCustomBrowserLoader = class
private
FInitializeCEF4Delphi : TInitializeCEF4DelphiFunc;
FFinalizeCEF4Delphi : TFinalizeCEF4DelphiFunc;
FTakeSnapshot : TTakeSnapshotFunc;
FLibHandle : TLibHandle;
FLibLoaded : boolean;
function GetLibPath : string;
function LoadCEFLibrary: boolean;
procedure UnloadCEFLibrary;
procedure InitializeCEF4Delphi;
procedure FinalizeCEF4Delphi;
public
constructor Create;
procedure AfterConstruction; override;
procedure BeforeDestruction; override;
procedure TakeSnapshot;
end;
var
GlobalCustomBrowseLoader : TCustomBrowserLoader = nil;
implementation
constructor TCustomBrowserLoader.Create;
begin
inherited Create;
FInitializeCEF4Delphi := nil;
FFinalizeCEF4Delphi := nil;
FTakeSnapshot := nil;
FLibHandle := 0;
FLibLoaded := False;
end;
procedure TCustomBrowserLoader.AfterConstruction;
begin
inherited AfterConstruction;
if LoadCEFLibrary then
InitializeCEF4Delphi;
end;
procedure TCustomBrowserLoader.BeforeDestruction;
begin
FinalizeCEF4Delphi;
UnloadCEFLibrary;
inherited BeforeDestruction;
end;
function TCustomBrowserLoader.LoadCEFLibrary: boolean;
begin
Result := False;
FLibHandle := LoadLibrary(GetLibPath());
if (FLibHandle <> 0) then
begin
Pointer(FInitializeCEF4Delphi) := GetProcAddress(FLibHandle, 'InitializeCEF4Delphi');
Pointer(FFinalizeCEF4Delphi) := GetProcAddress(FLibHandle, 'FinalizeCEF4Delphi');
Pointer(FTakeSnapshot) := GetProcAddress(FLibHandle, 'TakeSnapshot');
FLibLoaded := assigned(FInitializeCEF4Delphi) and
assigned(FFinalizeCEF4Delphi) and
assigned(FTakeSnapshot);
Result := FLibLoaded;
end;
end;
function TCustomBrowserLoader.GetLibPath : string;
begin
Result := IncludeTrailingPathDelimiter(ExtractFileDir(ParamStr(0))) + LIBNAME;
end;
procedure TCustomBrowserLoader.UnloadCEFLibrary;
begin
if FLibLoaded then
FreeLibrary(FLibHandle);
end;
procedure TCustomBrowserLoader.InitializeCEF4Delphi;
begin
if FLibLoaded then
FInitializeCEF4Delphi();
end;
procedure TCustomBrowserLoader.FinalizeCEF4Delphi;
begin
if FLibLoaded then
FFinalizeCEF4Delphi();
end;
procedure TCustomBrowserLoader.TakeSnapshot;
begin
if FLibLoaded then
FTakeSnapshot();
end;
end.