i create a CEF component in a delphi form with code like this :
- Code: Select all
unit frmchr;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, cefvcl, ceflib, OleCtrls, SHDocVw_EWB, EwbCore, EmbeddedWB,
ExtCtrls, StdCtrls;
type
TFormChr = class(TForm)
pnl1: TPanel;
btntest: TButton;
procedure FormCreate(Sender: TObject);
procedure btntestClick(Sender: TObject);
private
chromium : TChromium;
public
end;
var
FormChr: TFormChr;
implementation
{$R *.dfm}
procedure TFormChr.FormCreate(Sender: TObject);
var i: integer;
mycontrol: TChromium;
begin
if Assigned(chromium) then
chromium.Free;
chromium := TChromium.Create(pnl1);
chromium.Parent := pnl1;
chromium.Align := alClient;
chromium.Width := pnl1.Width;
chromium.Height := pnl1.Height;
chromium.DefaultUrl := 'http://www.useragentstring.com/';
chromium.Visible := True;
end;
when i run the form all is ok, but when i send a message (to visit dom) it seems that the Chromium component do not receive; nothing is happening
i have add the code following :
- Code: Select all
...
type TCustomRenderProcessHandler = class(TCefRenderProcessHandlerOwn)
protected
function OnProcessMessageReceived(const browser: ICefBrowser;sourceProcess: TCefProcessId; const message: ICefProcessMessage): Boolean; override;
end;
...
procedure CallBackVisitDomProc(const doc: ICefDomDocument);
begin
ShowMessage('Hi');
end;
function TCustomRenderProcessHandler.OnProcessMessageReceived(
const browser: ICefBrowser; sourceProcess: TCefProcessId;
const message: ICefProcessMessage): Boolean;
begin
if (message.Name = 'visitdom') then browser.MainFrame.VisitDomProc(CallBackVisitDomProc);
Result := True;
end;
procedure TFormChr.btntestClick(Sender: TObject);
var resBool:Boolean;
targetProcess: TCefProcessId;
message: ICefProcessMessage;
mesg:TWndMethod;
begin
targetProcess := PID_RENDERER;
message := TCefProcessMessageRef.New('visitdom');
resBool := chromium.browser.SendProcessMessage(targetProcess,message);
end;
initialization
CefRenderProcessHandler := TCustomRenderProcessHandler.Create;
end.
end.
Have you an idea ?
Thanks