В принципе все работает но появляется копия базовой формы .
Возможно потому что в 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.




 .
 . 
 
  
 
 