引 言
【相关文章:在Delphi中调用CHM帮助文件】这篇文章最先发表于2000年07月25日,最后一次修改是在2001年02月07日。这里再次贴出的目的,一是作为前一阶段的完结,所以文章中的错误都不作修改;二是希望作为一个新的起点。我准备整理一下至今所积累的浏览器编程的知识,比较完整地写出来,与网友共勉。 【扩展阅读:delphi中的XML解析控件TXMLD】
twebbrowser编程简述 【扩展信息:Core Java Internatio】
摘要: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 webbrowser1.navigate(edit1.text,t,t,t,t); end;... 下一页