はじめまして
Memo1にhtmlソースを書いて置き、それをWebBrowser1で開きたいのですが
どうすればよいでしょうか
>Memo1.Lines.SaveToFile('tmp.html');
>WebBrowser1.Navigate('file:///'+GetCurrentDir+'\tmp.html');
ファイルに一度保存してそれを開く事はできるのですが、
保存せずに直接開く方法は無いでしょうか
ms := TMemoryStream.Create;
try
Memo1.Lines.SaveToStream(ms);
ms.Position := 0;
(WebBrowser1.Document as IPersistStreamInit).Load(TStreamAdapter.Create(ms));
finally
ms.Free;
end;
メモを直で書き込むなら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;
正攻法様、篠田雅夫様 返信ありがとうございます
正攻法様の方法で試したところ(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されないようです
長くなってすみません、どのようにしたら解決できるのでしょうか
>>(WebBrowser1.Document as IPersistStreamInit).Load(TStreamAdapter.Create(ms));
>の部分で「EAccesViolation クラスの例外を生成しました」
>とでてしまいました
>WebBrowser1.Navigate('〜〜');
>として一度何か開いた後だとこのエラーは出ないのですが
初期状態のWebBrowserにはDocumentがないので、'about:blank'でも
読み込んでおかなければエラーが出るのは当然。
>それでもMemo1に書いたHTMLは表示されませんでした・・・
それはソースのどこかに記述ミスがあるから。
>実行されません
正攻法なら実行される。
↑
うん、うん。
HTMLのソースに関する質問はしないほうがよいかも。
正攻法さんのコードはいいコードだ。
>それはソースのどこかに記述ミスがあるから。
台風一過様の言うとおりでした、すみませんでした
次の用にしました
>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/27(水) 10:11:25の私のコードの前半をうまくくっつけるとできるかもね。
あれは無駄なループに見えるけど待ってるのよね。
明日は休みだ、うれし
>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;
........
篠田雅夫様、ほっとけの(‾_‾)は何度まで?様
2回目以降もきちんと上手くいきました、ありがとうございます
篠田雅夫様が既に解決方法を提示して下さっていたのに、
追加質問してしまって反省しています
正攻法様、篠田雅夫様、台風一過様、ほっとけの(‾_‾)は何度まで?様
質問してばかりの私のために丁寧な返信とても感謝しております
質問する側としてではなく、困っている人を手助けするために
書き込みできるように成るために夏休みを利用して精進しようと思います
最後に、本当に皆様ありがとうございました!
解決いれるの忘れてました、、(汗
正攻法さんが提示しているコードの
(WebBrowser1.Document as IPersistStreamInit).Load(TStreamAdapter.Create(ms));
のIPersistStreamInitが定義されていないとエラーがでました。
これは、どこに定義されているのでしょうか。
WebBrowser1はIEコンポですよね。
4番目の発言に答えがありますよ。
>uses節にActiveXを追加
あうっ、すみません。
見てませんでした。
ありがとう。
ツイート | ![]() |