我是用WebBrowser开发的,我以前用DHTML控件做的HTML编辑器已经不能用了,微软的一个补丁造成的,现在需要重新做过,请问用WebBrowser如何插入表格呢?

解决方案 »

  1.   

    用DHTML已经不行了,MS在Win2003SP1和WinXPSP2上关闭了DHTML的DOM接口但用MSHTML还可以的http://lysoft.7u7.net
      

  2.   

    直接将html字符串读入webbrower中
    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;
     
      

  3.   

    to ly_liuyang(Liu Yang):
    我也知道DHTML已经不行了,所以现在才改写这个HTML编辑器呀,能否解答一下如何使用MSHTML在WebBrowser中插入一个表格和设置WebBrowser的段落格式呢?谢谢!
      

  4.   

    to darkliu(钢铁工人甲):
    我问的问题好像不是这个哦
      

  5.   

    错!DHTML可以用在XPSP2上,我就是用的XPSP2,不过控件要改一下(可能这么说有点武断,也希望你能试一下证明我的判断是对的)
    改的方法见http://groups.yahoo.com/group/delphi-dhtmledit/message/1759另推荐一个这方面的专门网站
    http://www.euromind.com/iedelphi/
      

  6.   

    to newc_k(帕拉丁):
    我明天回去试试这个方法,不过DHTML这个控件的技术已经比较老了,说不定改天微软又发布一个补丁,就又不能用了,所以我还是比较偏向采用新的技术,假如使用WebBrowser作为编辑器,怎样插入表格和设置段落格式呢?
      

  7.   

    我觉得用WebBrowser也不过是在如IHTMLDOCUMENT2这些接口上打转转,如果是这样我认为你不要把目光局限在IE上,有一些别的图文混合控件可以参考一下,比如我就知道有一个WPTools
      

  8.   

    另外也可以看看其它浏览器提供的ACTIVEX,比如Mozilla
      

  9.   

    WebBrowser作为编辑器的历史比DHTML这个控件还老。要在运行时修改IE的文档对象模型的话,可以参考http://msdn.microsoft.com/workshop/browser/editing/modifyingdoc.asp
      

  10.   

    to newc_k(帕拉丁):
    我按照上面介绍的做法还是不行,我用的是D6
      

  11.   

    我希望有一个 EditPlus 那样的,不过功能加强点的,就差不多了。如:加入 VS.net 的代码配对。