1

HTML ファイルを作成する Delphi プログラムがあります。後でボタンが押されると、TWebBrowser が作成され、WebBrowser.Navigate によって html ページが表示されます。

WebBrowserの「デフォルトディレクトリ」を設定して、HTMLファイルではなくDelphi実行可能ファイルの場所になるようにする方法はありますか?

HTML の Base 値をハードコードされた値に設定したくありません。それは、HTML が別の Delphi exe から実行されたときに見つからないためです。

例えば:

exe が D:\data\delphi\pgm.exe から実行される場合、ベースの場所は D:\data\delphi\ で、jpg は D:\data\delphi\jpgs\ にあります。

ただし、exe が C:\stuff\pgm.exe から実行される場合、ベースの場所を C:\stuff\ に、jpg を C:\stuff\jpgs\ にします。

したがって、別のexeから実行すると、そのexeの間違った場所を指すため、HTMLにベースの場所を含む行を書くことはできません。

したがって、Web ブラウザーを作成するときに HTML を読み取る前にベースの場所を設定するか、ベースの場所を設定できる場所を Web ブラウザーに渡す方法が必要です。

長々と申し訳ありませんが、必要なものを表示する方法がわかりませんでした。

4

2 に答える 2

2

HTML ファイルが JPG と同じフォルダーに保存されている場合、ベース パスを設定する必要はありません。

HTML ファイルのベース パスは、ファイルのロード元のパス、または<base href="...">タグを介して HTML 自体で指定されたパスです。コレクションを介してアクセスできる新しい基本パスを設定できますIHTMLDocument2.all.tags('base')が、最初に HTML ファイルが読み込まれて解析されるまでアクセスできません。これはキャッチ 22 です。事前にドキュメントを読み込まないと、ベース パスを設定できません。

于 2010-04-21T23:08:04.947 に答える
1

TWebBrowser は Internet Explorer エンジンの単なるラッパーであるため、ブラウザでクライアント側スクリプトを有効にできる場合は、別の方法を試すことができます。

  1. インターフェイスを実装するアプリでオートメーション オブジェクトを作成しIDispatch 、アプリの現在の実行パスを返す文字列プロパティを指定します。
  2. インターフェイスを実装する Automation オブジェクトを作成し、IDocHostUIHandler そのメソッドをオーバーライドしてGetExternal() 、#1 からオブジェクトへのポインターを返します。
  3. ブラウザーのICustomDoc インターフェースを取得し、IDocHostUIHandler オブジェクトをそのSetUIHandler()メソッドに渡します。

詳細については、MSDN を参照してください。

http://msdn.microsoft.com/en-us/library/aa770041.aspx

window.externalこのように、オブジェクトを使用してアプリのパスを取得し、その JPG 参照を OnLoad イベントなどで動的に更新できるスクリプトを HTML に含めることができます。

<script language="JScript">
function UpdateJPGs()
{
  var path = window.external.ExePath;
  document.images.item("jpg1").src = path + "1.jpg";
  document.images.item("jpg2").src = path + "2.jpg";
  // etc...
}
</script>

<body onLoad="UpdateJPGs">
于 2010-04-21T23:22:21.830 に答える