我试图以编程方式创建ChromiumOSR,但我一直收到一个错误(访问冲突)。以下是导致问题的示例代码:
var
pChromiumOSR: TChromiumOSR;
begin
pChromiumOSR := TChromiumOSR.Create(Self);
pChromiumOSR.OnLoadEnd := pChromiumOSRLoadEnd;
pChromiumOSR.Browser.MainFrame.LoadUrl('www.google.com');
end;
问题是pChriumOSR.Browser.MainFrame始终为零。如果我这样做pChromiumOSR.load('ww.google.com');我没有收到任何错误,但它不会启动onLoadend。
有人能就我可能做错了什么给我一些建议吗?我使用的是DelphiXE2,但不确定铬的哪个版本(在哪里可以找到版本?)
您尝试使用Load
方法加载页面是正确的。另一个错误,由于未创建Browser
实例而失败。这是因为TChromiumOSR
被设计为设计时组件,而不是动态创建的。
现在,创建Browser
实例的唯一位置是Loaded
方法,它是在从流加载组件的父窗体后为其调用的。由于是动态创建的,因此Browser
实例永远不会创建。
出于某种原因,CreateBrowser
方法(创建Browser
实例)也被声明为private,这会使其调用稍微复杂一些(除非您决定修改源并将其公开)。如果您不想更改DCEF源代码,可以使用类助手来提供对CreateBrowser
方法的访问:
uses
ceflib, cefvcl;
type
TChromiumOSRHelper = class helper for TCustomChromiumOSR
public
procedure CreateBrowserInstance;
end;
implementation
{ TChromiumOSRHelper }
procedure TChromiumOSRHelper.CreateBrowserInstance;
begin
Self.CreateBrowser;
end;
然后要创建Browser
实例,请在第一次访问Browser
实例之前添加CreateBrowserInstance
调用(此处为Load
方法):
var
pChromiumOSR: TChromiumOSR;
begin
pChromiumOSR := TChromiumOSR.Create(Self);
pChromiumOSR.OnLoadEnd := pChromiumOSRLoadEnd;
pChromiumOSR.CreateBrowserInstance;
pChromiumOSR.Load('www.google.com');
end;