2个按钮内容分开的时候可以用的...但是合并在一个按钮里就不能用了...为什么呢?//分开时候
procedure TForm1.Button1Click(Sender: TObject);
begin
  webbrowser1.Navigate('http://www.csdn.net');
end;procedure TForm1.Button2Click(Sender: TObject);
var Document:   IHTMLDocument2;
f:textfile;
begin 
  Document   :=   Webbrowser1.Document   as   IHtmlDocument2;
  memo1.lines.add(Document.body.innerTEXT);
  assignfile(f,'e:\'+edit1.Text+'.txt');
  rewrite(f);
  closefile(f);
  memo1.Lines.SaveToFile('e:\'+edit1.Text+'.txt');
  document.close;
end;
//合并在一起
procedure TForm1.Button1Click(Sender: TObject);
var Document:   IHTMLDocument2;
f:textfile;
begin
  webbrowser1.Navigate('http://www.csdn.net');
  Document   :=   Webbrowser1.Document   as   IHtmlDocument2;
  memo1.lines.add(Document.body.innerTEXT);
  assignfile(f,'e:\'+edit1.Text+'.txt');
  rewrite(f);
  closefile(f);
  memo1.Lines.SaveToFile('e:\'+edit1.Text+'.txt');
  document.close;
end;

解决方案 »

  1.   

    原因是你执行了Navigate操作,而该操作需要从网络上获取网页资料,并予以显示,在还没有下载完毕之前,它的IHTMLDocument2接口为空,所以,执行不下去了,你可以在 WebBrowser控件的OnDocumentComplete事件中写代码。
      

  2.   

    Navigate  操作是异步的, 执行了以后并不等得到了整个网页后才返回.
    如果接下来立即操作Document就会出现异常.
    可以按照楼上所说的将Button2Click事件内容到OnDocumentComplete事件中去相应.这样能够保证Document对象存在.其实如果你很快的点了button1而马上点button2的话, 也是会出现合并后的效果的.
      

  3.   

    webbrowser1.Navigate('http://www.csdn.net'); 
    sleep(2000);//让它睡上2秒,你可以视你的网速而定
      Document  :=  Webbrowser1.Document  as  IHtmlDocument2; 
      memo1.lines.add(Document.body.innerTEXT); 
      assignfile(f,'e:\'+edit1.Text+'.txt'); 
      rewrite(f); 
      closefile(f); 
      memo1.Lines.SaveToFile('e:\'+edit1.Text+'.txt'); 
      document.close;