我的目的是想直接从内存流里读html到TwebBroswer里显示。
网上找了一段代码: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; 
于是,我就用了下面的代码,吧memo里的html转换成TString,结果出现“Abstract Error”,请问该如何解决?var
tmpStr  : TStream;begin
//......
tmpStr := TStream.Create;
mmoTmp.Lines.SaveToStream(tmpStr);

解决方案 »

  1.   

    是执行到
    mmoTmp.Lines.SaveToStream(tmpStr);
    这句出错的。
      

  2.   


    var
    tmpStr  : TMemoryStream;begin
    //......
    tmpStr := TMemoryStream.Create;
    Memo1.Lines.SaveToStream(tmpStr);
    end;
      

  3.   

    因為TStream是抽象類,不可直接使用,可使用其派生類
    如TFileStream\TMemoryStream
      

  4.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
    tmpStr  : TMemoryStream;begintmpStr := TMemoryStream.Create;
    LoadStream(Webbrowser1,tmpStr);
    Memo1.Lines.SaveToStream(tmpStr);
    end;
    楼主是怎么调用的,我这么调用是错了吧?
      

  5.   

    tmpStr := TMemoryStream.Create;
    Memo1.Lines.SaveToStream(tmpStr);
    LoadStream(Webbrowser1,tmpStr);
      

  6.   

    谢谢 bdmh 和 Avan_Lau