2013-11-27 41 views
5

我試圖以編程方式創建ChromiumOSR但我不斷收到一個錯誤(訪問衝突)。 這裏是引起該問題的示例代碼:得到錯誤創建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,但不知道哪個版本的鉻(哪裏可以找到版本?)

感謝您的幫助。

回答

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實例首先訪問Browser前添加CreateBrowserInstance通話實例(這裏是Load方法):

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

謝謝TLama,我用你的例子,它的工作完美。感謝您的快速和偉大的答案。 – user3032933

+0

不客氣! – TLama