以编程方式创建ChromiumOSR时出错

时间:2013-11-27 19:13:31

标签: delphi tchromium

我正在尝试以编程方式创建ChromiumOSR,但我一直收到错误(访问冲突)。 以下是导致问题的示例代码:

var
pChromiumOSR: TChromiumOSR;
begin
  pChromiumOSR := TChromiumOSR.Create(Self);
  pChromiumOSR.OnLoadEnd := pChromiumOSRLoadEnd;
  pChromiumOSR.Browser.MainFrame.LoadUrl('www.google.com');
end;

问题是pChromiumOSR.Browser.MainFrame总是为零。如果我做 pChromiumOSR.load( 'www.google.com');我没有得到任何错误,但它没有触发onLoadend。

任何人都可以就我可能做错的事给我任何建议吗? 我正在使用Delphi XE2,但不确定哪个版本的铬(我在哪里可以找到该版本?)

1 个答案:

答案 0 :(得分:5)

您尝试使用Load方法加载页面是正确的。另一个是错误的并且因为未创建Browser实例而失败。这是因为TChromiumOSR被设计为设计时组件而不是动态创建。

现在,创建Browser实例的唯一位置是Loaded方法,该方法在从流加载其父表单后调用该组件。由于您是动态创建的,因此永远不会创建Browser实例。

由于某种原因,CreateBrowser方法(创建Browser实例)也被声明为私有,这使得它的调用变得复杂(除非您决定修改源并使其公开)。如果您不想更改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实例,请在第一次访问CreateBrowserInstance实例(此处为Browser方法)之前添加Load调用:

var
  pChromiumOSR: TChromiumOSR;
begin
  pChromiumOSR := TChromiumOSR.Create(Self);
  pChromiumOSR.OnLoadEnd := pChromiumOSRLoadEnd;
  pChromiumOSR.CreateBrowserInstance;
  pChromiumOSR.Load('www.google.com');
end;