4

Chrome を Delphi フォームに埋め込む素晴らしいDelphi Chromiumプロジェクトを見つけました。少しハッキングした後、Delphi7 で問題なく動作し、デモ アプリを実行できます。

ただし、コンポーネントを使用して独自のアプリを作成すると、独自の URL を読み込めません。アクセス違反になります。

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

TChromium コンポーネントは機能しており、すべての DLL が適切な場所に配置されています。設定DefaultUrlすると問題なく動作するからです。

TPageControl ページに Chromium2 があり、ボタンの OnClick イベントで上記のコードを呼び出します。AccessViolation が発生します。メインフレームはnil.

これを回避する方法が見つかりません。誰かがこれを機能させましたか?

4

5 に答える 5

4

私はまだ解決策を見つけていませんが、次の回避策を見つけました

procedure TForm1.lblWebsiteClick(Sender: TObject);
var MainFrame : ICefFrame;
begin
  MainFrame := Chromium2.Browser.GetMainFrame;
  MainFrame.LoadUrl('http://www.cookingisfun.ie');
end;
于 2011-09-17T13:44:51.587 に答える
3

問題は、ページがロードされた後にのみメインフレームがロードされることです。

まず、次のことを行う必要があります。

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

ただし、これはナビゲートするための推奨される方法ではありませんが、代わりに次のようにする必要があります。

Chromium1.Load( theUrl );

それでも使用したい場合はMainFrameOnLoadEndイベントで使用してください。

于 2011-09-17T16:32:58.330 に答える
2

同様の問題があり、かなりの数時間後に問題が特定されました。

  1. TChromium がアプリケーションのメイン フォームにある場合は問題ありません。

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

    1. cef.inc を開き、ドットを削除して次を定義します。

      {.$DEFINE CEF_MULTI_THREADED_MESSAGE_LOOP} 
      
    2. 空の文字列になるように DefaultURL 値を削除します。

私は CEF_MULTI_THREADED_MESSAGE_LOOP をグーグルで検索しましたが、あまり出てきませんでした。

最後に、サイズ変更/更新の問題がありました (配置が alClient に設定されていても)。短期的な修正は、
crmLoadEnd イベント内で次のように行います。

     if crm.Height < panclient.Height then
        crm.Height := panclient.Height;
于 2011-09-24T13:03:00.273 に答える
0

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

必要なもの: libcef.dll、icudt.dll、...

サポート グループのこのスレッドを確認してください。


デモをビルド/実行すると、このサブフォルダー (*DCC_ExeOutput*): DCEF\bin\ にビルドされます。

于 2011-09-17T09:21:05.057 に答える
0

この問題もありました。フレーム/ウィンドウが表示されると、メインフレームが最初に作成されるようです。しかし、それを回避する簡単な方法があります。TChromium オブジェクトで .Load('about:blank') を直接呼び出すだけです。これにより、不足しているフレームが初期化されます。

于 2014-07-07T07:58:43.767 に答える