以编程方式创建ChromiumOSR时出错

use*_*933 5 delphi tchromium

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

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

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

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

TLa*_*ama 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;
Run Code Online (Sandbox Code Playgroud)

然后创建一个Browser实例CreateBrowserInstance在第一次访问Browser实例之前添加调用(这是Load方法):

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