mirror of
https://github.com/salvadordf/CEF4Delphi.git
synced 2025-04-07 06:50:04 +02:00
121 lines
2.7 KiB
ObjectPascal
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.
|
|
|