直接将html字符串读入webbrower中

 不再使用临时文件,而是直接将html字符串读入webbrower中;支持HTML页面的保存

uses  ActiveX;  
  
procedure  LoadStream(WebBrowser:  TWebBrowser;  Stream:  TStream);  
var  
PersistStreamInit:  IPersistStreamInit;  
StreamAdapter:  IStream;  
MemoryStream:  TMemoryStream;  
begin  
{Load  empty  HTML  document  into  Webbrowser  to  make  "Document"  a  valid  HTML  document}  
WebBrowser.Navigate('about:blank');  
{wait  until  finished  loading}  
repeat  
Application.ProcessMessages;  
Sleep(0);  
until  
WebBrowser.ReadyState  =  READYSTATE_COMPLETE;  
{Get  IPersistStreamInit  -  Interface}  
if  WebBrowser.Document.QueryInterface(IPersistStreamInit,  PersistStreamInit)  =  S_OK  then  
begin  
{Clear  document}  
if  PersistStreamInit.InitNew  =  S_OK  then  
begin  
{Make  local  copy  of  the  contents  of  Stream  if  you  want  to  use  Stream  directly,  you  have  to  
consider,  that  StreamAdapter  will  destroy  it  automatically}  
MemoryStream:=  TMemoryStream.Create;  
try  
MemoryStream.CopyFrom(Stream,  0);  
MemoryStream.Position:=  0;  
except  
MemoryStream.Free;  
raise;  
end;  
{Use  Stream-Adapter  to  get  IStream  Interface  to  our  stream}  
StreamAdapter:=  TStreamAdapter.Create(MemoryStream,  soOwned);  
{Load  data  from  Stream  into  WebBrowser}  
PersistStreamInit.Load(StreamAdapter);  
end;  
end;  
end;  
 
 
 
{  TForm1  }  
 
procedure  TForm1.Button1Click(Sender:  TObject);  
var  
S:  TStringStream;  
begin  
S:=  TStringStream.Create('<html><h1>Stream  Test</h1><p>:This  HTML  content  '  +  
'is  being  loaded  from  a  stream.</html>');  
try  
LoadStream(WebBrowser1,  S);  
finally  
S.Free;  
end;  
 
End;  
 
上面是把html字符串显示在WebBrowser里,下面是保存成Html文件:  
 
function  SaveHTMLCode(WebBrowser:  TWebBrowser;  const  FileName:  TFileName):  Boolean;  
var  
ps:  IPersistStreamInit;  
fs:  TFileStream;  
sa:  IStream;  
begin  
ps  :=  WebBrowser.Document  as  IPersistStreamInit;  
fs  :=  TFileStream.Create(FileName,  fmCreate);  
try  
sa  :=  TStreamAdapter.Create(fs,  soReference)  as  IStream;  
Result  :=  Succeeded(ps.Save(sa,  True));  
finally  
fs.Free;  
end;  
end;  
 
Call  with:  
SaveHTMLCode(WebBrowser1,  'C:/MyHTMLDoc.html');  
 
//保存成流:  
procedure  SaveDocumentSourceToStream(Document:  IDispatch;  Stream:  TStream);  
var  
PersistStreamInit:  IPersistStreamInit;  
StreamAdapter:  IStream;  
begin  
Stream.Size  :=  0;  
Stream.Position  :=  0;  
if  Document.QueryInterface(IPersistStreamInit,  PersistStreamInit)  =  S_OK  then  
begin  
StreamAdapter  :=  TStreamAdapter.Create(Stream,  soReference);  
PersistStreamInit.Save(StreamAdapter,  False);  
StreamAdapter  :=  nil;  
end;  
end;

摘自:http://www.faq-it.org/archives/delphi_vcl/3ada7a53a2d6a0932d80d1ce670563ed.php

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值