В принципе все работает но появляется копия базовой формы .
Возможно потому что в DLL используется еще один экземпляр TApplication
Но как это может влиять на основное приложение непонятно совершенно!
Обычно windows.SetParent работает с чем угодно без особых хлопот .

Код "вызывателя"
LPR
- Код: Выделить всё
program callerGUI_01;
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Interfaces, // this includes the LCL widgetset
Forms, c_gui_mf_02
{ you can add units after this };
{$R *.res}
procedure IntBrowser;external 'BuildInBrowser' name 'IntBrowser';
procedure CEFAppFree;external 'BuildInBrowser' name 'CEFAppFree';
Function GetBrApp:TApplication; external 'BuildInBrowser' name 'GetBrApp';
begin
IntBrowser;
RequireDerivedFormResource:=True;
Application.Scaled:=True;
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
if GetBrApp = Nil then exit;
GetBrApp.Terminate;
CEFAppFree;
end.
Форма
- Код: Выделить всё
unit c_gui_mf_02;
{$mode objfpc}{$H+}
interface
uses
Windows, Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, ExtCtrls;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
Panel1: TPanel;
procedure Button1Click(Sender: TObject);
procedure FormResize(Sender: TObject);
private
public
end;
var
Form1: TForm1;
BrApp:TApplication=Nil;
BR_MainForm:TForm=Nil;
implementation
{$R *.lfm}
{ TForm1 }
procedure IntBrowser;external 'BuildInBrowser' name 'IntBrowser';
procedure CEFAppFree;external 'BuildInBrowser' name 'CEFAppFree';
Function GetBrApp:TApplication; external 'BuildInBrowser' name 'GetBrApp';
Function GetBR_MainForm:TForm; external 'BuildInBrowser' name 'GetBR_MainForm';
procedure TForm1.Button1Click(Sender: TObject);
begin
BrApp:=GetBrApp;
if BrApp <> Nil then
begin
if BR_MainForm=Nil then begin
BR_MainForm:=GetBR_MainForm;
windows.SetParent( BR_MainForm.Handle,Panel1.Handle );
end ;
BR_MainForm.Visible:= not BR_MainForm.Visible;
BR_MainForm.WindowState:=wsMaximized;
end;
end;
procedure TForm1.FormResize(Sender: TObject);
begin
if BR_MainForm = nil then exit;
BR_MainForm.WindowState:=wsNormal;
BR_MainForm.WindowState:=wsMaximized;
end;
end.
Причем "левая копия" базовой формы появляется только после загрузки станицы .
LPR DLL
- Код: Выделить всё
library BuildInBrowser;
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Interfaces, // this includes the LCL widgetset
Forms, u1_browsermode,
{ you can add units after this }
uCEFApplication;
{$IFDEF MSWINDOWS}
// CEF3 needs to set the LARGEADDRESSAWARE flag which allows 32-bit processes to use up to 3GB of RAM.
{$SetPEFlags $20}
{$ENDIF}
procedure IntBrowser;
begin
If GlobalCEFApp <> Nil then exit;
GlobalCEFApp := TCefApplication.Create;
if GlobalCEFApp.StartMainProcess then
begin
RequireDerivedFormResource:=True;
Application.Initialize;
Application.CreateForm(TBR_MainForm, BR_MainForm);
// Application.Run;//! Run не вызывается специально
end;
end;
procedure CEFAppFree;
begin
GlobalCEFApp.Free;
GlobalCEFApp := nil;
end;
Function GetBrApp:TApplication;
begin
GetBrApp:=Application;
end;
Function GetBR_MainForm:TBR_MainForm;
begin
GetBR_MainForm:=BR_MainForm;
end;
exports IntBrowser name 'IntBrowser';
exports CEFAppFree name 'CEFAppFree';
exports GetBrApp name 'GetBrApp';
exports GetBR_MainForm name 'GetBR_MainForm';
begin
end.