直接访问WebBrowser控件中的HTML源码(3) OleCheck(CreateStreamOnHGlobal(hHTMLText,True, Stream));tryOleCheck(psi.Save(Stream, False));Size := StrLen(PChar(hHTMLText));SetLength(Result, Size);CopyMemory(PChar(Result), Pointer(hHTMLText), Size);finallyStream := nil;end;finallypsi := nil;end;end;---- 此函数有一个参数WebBrowser指定从那个控件读取HTML源码,返回一个字符串为此控件中的HTML源码。首先还是要先检查WebBrowser.Document对象是否有效,无效则退出;然后取得IPersistStreamInit接口;接着取得HTML源码的大小:本来应该使用IPersistStreamInit接口的GetSizeMax函数,但在我的机器上测试,这个函数范围值衡为0,无效。因此只能先定义一个足够大的缓冲区,如BufSize = $10000字节(注意此缓冲区应该足够大);然后同样地分配全局堆内存块,建立流,然后将HTML文本写到流中。因为此HTML文本在流中是以#0结尾的字符串,因此可以用Size := StrLen(PChar(hHTMLText))取得实际长度,用SetLength(Result, Size);设置返回字符串长度为HTML源码实际长度,最后复制字符串到返回字符串中。 ---- 至此,直接访问WebBrowser控件中的HTML源码所需的两个函数全部解析完毕。 ---- 不过需要注意的时,在使用这两个函数前,最好对WebBrowser.Document对象进行初始化。下面提供一个函数,通过显示一个空白页面实现WebBrowser.Document对象初始化。 procedure ShowBlankPage(WebBrowser: TWebBrowser);varURL: OleVariant;beginURL := 'about:blank';WebBrowser.Navigate2(URL);end;---- 建议在你有WebBrowser控件的Form的FormCreate事件里调用此函数,初始化WebBrowser.Document对象。 ---- 本文程序在Win NT + Delphi 5 环境下调试通过 ---- 参考资料:MSDN ---- 特别感谢:白云黄鹤BBS(bbs.whnet.edu.cn)网友AngleFalls