Memo1.textをファイルとしてWebBrowser1で開きたい

解決


尾崎@初心者です  2005-07-27 11:07:49  No: 16643

はじめまして

Memo1にhtmlソースを書いて置き、それをWebBrowser1で開きたいのですが
どうすればよいでしょうか

>Memo1.Lines.SaveToFile('tmp.html');
>WebBrowser1.Navigate('file:///'+GetCurrentDir+'\tmp.html');

ファイルに一度保存してそれを開く事はできるのですが、
保存せずに直接開く方法は無いでしょうか


正攻法  2005-07-27 18:05:31  No: 16644

ms := TMemoryStream.Create;
   try
    Memo1.Lines.SaveToStream(ms);
    ms.Position := 0;
    (WebBrowser1.Document as IPersistStreamInit).Load(TStreamAdapter.Create(ms));
  finally
    ms.Free;
  end;


篠田雅夫  2005-07-27 19:11:25  No: 16645

メモを直で書き込むならov.Write(を工夫すればOKだと思いますが。
台風の被害がなくてよかったね

procedure foo(wb: TWebBrowser);
var
  ov: OleVariant;
begin

  wb.Navigate('about:blank');
  while wb.ReadyState < READYSTATE_INTERACTIVE  do//READYSTATE_INTERACTIVE
    Application.ProcessMessages;

  case wb.ReadyState of
    READYSTATE_COMPLETE:;
    else exit;
  end;
  ov := OleVariant(wb.Document as IHTMLDocument2);
  ov.Write('<html lang="ja">');
  ov.Write('<body>');
  ov.Write('<p>ハラヘッター</p>');
  ov.Write('</body>');
  ov.Write('</html>');
end;


尾崎@初心者です  2005-07-27 20:24:02  No: 16646

正攻法様、篠田雅夫様  返信ありがとうございます

正攻法様の方法で試したところ(uses節にActiveXを追加)
>(WebBrowser1.Document as IPersistStreamInit).Load(TStreamAdapter.Create(ms));
の部分で「EAccesViolation クラスの例外を生成しました」
とでてしまいました
WebBrowser1.Navigate('〜〜');
として一度何か開いた後だとこのエラーは出ないのですが
それでもMemo1に書いたHTMLは表示されませんでした・・・

篠田雅夫様の方法は上手く行きました、感謝しております
しかしまた別な問題がありまして、Memo1には
<body onload="document.frm2.submit();">
  <FORM name=frm2 action=http://〜〜.cgi method=post>
    <INPUT value=AAA name=cmd>
    <INPUT value=BBB name=name>
    <INPUT value=CCC name=pass>
    <INPUT type=submit>
  </FORM>
<body>
の用に書いてあるのですが、実行されません
BODYタグの部分を消して、自分でボタンを押すと上手くいくのですが
value=BBB のBBBに全角文字を使うとその値がPOSTされないようです

長くなってすみません、どのようにしたら解決できるのでしょうか


台風一過  2005-07-27 21:03:37  No: 16647

>>(WebBrowser1.Document as IPersistStreamInit).Load(TStreamAdapter.Create(ms));
>の部分で「EAccesViolation クラスの例外を生成しました」
>とでてしまいました
>WebBrowser1.Navigate('〜〜');
>として一度何か開いた後だとこのエラーは出ないのですが
初期状態のWebBrowserにはDocumentがないので、'about:blank'でも
読み込んでおかなければエラーが出るのは当然。

>それでもMemo1に書いたHTMLは表示されませんでした・・・
それはソースのどこかに記述ミスがあるから。

>実行されません
正攻法なら実行される。


篠田雅夫  2005-07-27 21:27:48  No: 16648


うん、うん。
HTMLのソースに関する質問はしないほうがよいかも。
正攻法さんのコードはいいコードだ。


尾崎@初心者です  2005-07-28 00:06:09  No: 16649

>それはソースのどこかに記述ミスがあるから。
台風一過様の言うとおりでした、すみませんでした

次の用にしました
>var
>  ms: TMemoryStream;
>begin
>  WebBrowser1.Navigate('about:blank');
>  ms := TMemoryStream.Create;
>  try
>    Memo1.Lines.SaveToStream(ms);
>    ms.Position := 0;
>    (WebBrowser1.Document as IPersistStreamInit).Load(TStreamAdapter.Create(ms));
>  finally
>    ms.Free;
>  end;
>end;

1度目は上手くいくのに2回目以降上手くいかないのは何故でしょうか
質問してばかりですみません。。。


篠田雅夫  2005-07-28 01:09:36  No: 16650

たぶんブラウザが準備できてないのが原因だと思うです。
2005/07/27(水) 10:11:25の私のコードの前半をうまくくっつけるとできるかもね。
あれは無駄なループに見えるけど待ってるのよね。
明日は休みだ、うれし


ほっとけの(‾_‾)は何度まで?  2005-07-28 03:02:14  No: 16651

>1度目は上手くいくのに2回目以降上手くいかないのは何故でしょうか
連続して何度も呼び出すのなら、以下のチェックが必ックション(>o<)

  if WebBrowser1.Busy then exit;
  if not Assigned(WebBrowser1.Document) then begin
   WebBrowser1.Navigate('about:blank');
   while WebBrowser1.ReadyState <> READYSTATE_COMPLETE do
    Application.ProcessMessages;
  end;
  ........


尾崎@初心者です  2005-07-28 06:46:03  No: 16652

篠田雅夫様、ほっとけの(‾_‾)は何度まで?様
2回目以降もきちんと上手くいきました、ありがとうございます

篠田雅夫様が既に解決方法を提示して下さっていたのに、
追加質問してしまって反省しています

正攻法様、篠田雅夫様、台風一過様、ほっとけの(‾_‾)は何度まで?様
質問してばかりの私のために丁寧な返信とても感謝しております

質問する側としてではなく、困っている人を手助けするために
書き込みできるように成るために夏休みを利用して精進しようと思います

最後に、本当に皆様ありがとうございました!


尾崎@皆様に感謝!  2005-07-28 06:47:59  No: 16653

解決いれるの忘れてました、、(汗


よく分からない  2005-07-29 10:33:58  No: 16654

正攻法さんが提示しているコードの
(WebBrowser1.Document as IPersistStreamInit).Load(TStreamAdapter.Create(ms));
のIPersistStreamInitが定義されていないとエラーがでました。
これは、どこに定義されているのでしょうか。

WebBrowser1はIEコンポですよね。


よーくみて  2005-07-29 19:07:24  No: 16655

4番目の発言に答えがありますよ。


よく分からない  2005-07-30 04:48:57  No: 16656

>uses節にActiveXを追加

あうっ、すみません。
見てませんでした。
ありがとう。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加