引 言
【程序编程相关:Delphi学习:在Listbox加背景】这篇文章最先发表于2000年07月25日,最后一次修改是在2001年02月07日.这里再次贴出的目的,一是作为前一阶段的完结,所以文章中的错误都不作修改;二是希望作为一个新的起点.我准备整理一下至今所积累的浏览器编程的知识,比较完整地写出来,与网友共勉. 【推荐阅读:在Delphi中如何维护COM+的状态信】
twebbrowser编程简述 【扩展信息:在Delphi7中调试COM+】
摘要:delphi 3开始有了twebbrowser构件,不过那时是以activex控件的形式出现的,而且需要自己引入,在其后的4.0与5.0中,它就在封装好shdocvw.dll之后作为internet构件组之一出现在构件面板上了.常常听到有人骂delphi的帮助做得极差,这次的twebbrowser又是microsoft的东东,自然不会好到哪里去,虽说msdn上什么都有,可是内容太过庞杂,如果没有入口点更是件烦人的事,查找起来给人的感觉大概可以用一句话来形容:非常复杂.复杂非常.
这里有平时我自己用twebbrowser做程序的一些心得与上网收集到的部分例子与资料,整理了一下,希望能给有兴趣用twebbrowser编程的朋友带来些帮助.
1.初始化与终止化(initialization & finalization) 大家在执行twebbrowser的某个方法以进行期望的操作,如execwb等的时候可能都碰到过“试图激活未注册的丢失目标”或“ole对象未注册”等错误,或者并没有出错但是得不到希望的结果,比如不能将选中的网页内容复制到剪贴板等.以前用它编程的时候,我发现execwb有时侯起作用但有时侯又不行,在delphi生成的缺省工程主窗口上加入twebbrowser,运行时并不会出现“ole对象未注册”的错误.同样是一个偶然的机会,我才知道ole对象需要初始化与终止化(懂得的东东实在太少了). 我用我的前一篇文章«delphi程序窗口动画&正常排列平铺的解决»所说的方法编程,运行时出了上面所说的错误,我便猜想应该有oleinitialize之类的语句,于是,找到并加上了下面几句话,终于搞定!究其原因,我想大概是由于twebbrowser是一个嵌入的ole对象而不算是用delphi编写的vcl吧.initialization
oleinitialize(nil); finalization try oleuninitialize; except end;这几句话放在主窗口所有语句之后,“end.”之前.
--------------------------------------------------------------------------------------------------------
2.emptyparam
在delphi 5中twebbrowser的navigate方法被多次重载:
procedure navigate(const url: widestring); overload;
procedure navigate(const url: widestring; var flags: olevariant); overload; procedure navigate(const url: widestring; var flags: olevariant; var targetframename: olevariant); overload; procedure navigate(const url: widestring; var flags: olevariant; var targetframename: olevariant; var postdata: olevariant); overload; procedure navigate(const url: widestring; var flags: olevariant; var targetframename: olevariant; var postdata: olevariant; var headers: olevariant); overload;而在实际应用中,使用后几种方法调用时,由于我们很少用到后面几个参数,但函数声明又要求是变量参数,一般的做法如下:
var
t:olevariant; begin ... 下一页