2011-09-17 6 views
4

DelphiフォームでChromeを埋め込むための華麗なDelphi Chromiumプロジェクトが見つかりました。これは、ハッキングのビットの後にDelphi7でうまく動作し、私はデモアプリケーションを実行させることができます。LoadURL on TChromiumでエラーが発生しました

しかし、コンポーネントで自分のアプリを実行すると、自分のURLを読み込むことができません。私はアクセス違反を取得します。

Chromium2.Browser.MainFrame.LoadUrl('http://www.example.com'); 

TChromiumコンポーネントが働いていると私はDefaultUrlを設定した場合、それは正常に動作しますので、私は、適切な場所にすべてのDLLを持っています。

TPageControlページにChromium2があり、ボタンのOnClickイベントで上記のコードが呼び出されています。私はアクセス違反を取得する。メインフレームはnilです。

私はこれを回避する方法を見つけることができません。

+0

ソースを見ましたか? MainFrameはどこに作成されるのですか? –

+0

あなたは手動で作成する必要はありません。また、ボタンのクリックでAVを取得するので(formcreate ...ではなく)、これは不足しているDLLにリンクされていることを99%確信しています; – Whiler

+0

@Whiler、私はDLLがないとは思わない。 defaultUrlプロパティで動作します。 –

答えて

4

私はまだ避難所」 tを解決しましたが、次のような問題がありました。

procedure TForm1.lblWebsiteClick(Sender: TObject); 
var MainFrame : ICefFrame; 
begin 
    MainFrame := Chromium2.Browser.GetMainFrame; 
    MainFrame.LoadUrl('http://www.cookingisfun.ie'); 
end; 
+0

それは回避策のように見えません。それはどのように使用されるのかのように見えます。フロントページには「CefFrameはブラウザウィンドウ内の単一のフレームを表し、各ブラウザウィンドウにはCefBrowser :: GetMainFrame()メソッドを介してアクセスできるトップレベルのメインフレームもあります」 –

+0

@David、デモアプリケーションのコードは、元々Chromium2.Browser.MainFrame.LoadUrl( 'http://www.example.com');を試した構造体のコードを使用しています。それは使われることを意図していました。 –

+0

あなたはソースを持っています。私はしません。 MainFrameがどこに割り当てられているのか分かりやすいはずです。 –

0

アプリケーションがビルドされているフォルダに必要なDLLがすべてありますか?

あなたが必要です:libcef.dll、icudt.dll、...

チェック彼らのサポートグループでこのthread


あなたがデモを実行/ビルドすると、彼らはこのサブフォルダ(* DCC_ExeOutput *)でビルドされています。それは彼らと働く理由です \ DCEF \ビン...

+1

@David:動的にロードされている場合GetProcAddressはnilを返します。 –

+0

@Rudy 'GetProcAddress'が' nil'を返すと、 'MainFrame'が' nil'になることはまずありません。 'MainFrame'は手続きアドレスではなく私のコンポーネントのように聞こえる。あなたはそれが手続きアドレスだと思いますか?私は何が欠けていますか? –

+0

私はこのコンポーネントを使用していますが、実行可能フォルダからDLLを削除した場合、この動作をしています...これは彼がこのAVを取得する理由だと思います... – Whiler

3

問題があるのは、ページが読み込まれた後にのみメインフレームが読み込まれることです。

は、一つには、あなたは何をする必要があります。

if Assigned(Chromium2.Browser.MainFrame) 
    then Chromium2.Browser.MainFrame... 

しかし、それがナビゲートする好ましい方法ではなく、あなたが行う必要があります。

Chromium1.Load(theUrl); 

あなたはまだ使用したい場合MainFrameOnLoadEndイベントでそれを行います。

+0

Chromium1.Loadは上記と同じです。 MainFrameがnilのときは、ただ静かに失敗します。 – migajek

2

は、同様の問題を抱えていたし、問題があり、かなりの数時間後:TChromiumは、[OK]をアプリケーションのメインフォーム上にある場合

  1. を。次いで

  2. TChromiumメインフォーム(又はフレーム上)にない場合:

    1. オープンcef.incと定義するドットを削除:

      {.$DEFINE CEF_MULTI_THREADED_MESSAGE_LOOP} 
      
    2. ようDefaultURL値を削除それは空の文字列です。

私はCEF_MULTI_THREADED_MESSAGE_LOOPをグーグルが、それはすべての非常に思い付くしませんでした。

最後に、alClientにアライメントを設定していても、サイズ変更/リフレッシュの問題がありました。同様に、この問題を持っていた

 if crm.Height < panclient.Height then 
     crm.Height := panclient.Height; 
0

:短期修正は
crmLoadEndイベント内のような何かを行うことです。フレーム/ウィンドウが表示されると、MainFrameが最初に作成されたようです。 しかし、その周りに簡単な方法があります。ちょうどTChromiumオブジェクトの.Load( 'about:blank')を呼び出してください。これにより、失われたフレームが早く初期化されます。

関連する問題