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;
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;
我也知道DHTML已经不行了,所以现在才改写这个HTML编辑器呀,能否解答一下如何使用MSHTML在WebBrowser中插入一个表格和设置WebBrowser的段落格式呢?谢谢!
我问的问题好像不是这个哦
改的方法见http://groups.yahoo.com/group/delphi-dhtmledit/message/1759另推荐一个这方面的专门网站
http://www.euromind.com/iedelphi/
我明天回去试试这个方法,不过DHTML这个控件的技术已经比较老了,说不定改天微软又发布一个补丁,就又不能用了,所以我还是比较偏向采用新的技术,假如使用WebBrowser作为编辑器,怎样插入表格和设置段落格式呢?
我按照上面介绍的做法还是不行,我用的是D6