【程序编程相关:利用VFI提高Delphi程序的重用性 】
w:哦……哦……(一边听一边敲出下面的代码)运行成功!太感谢了. 【推荐阅读:DBGridEh实现单击标题栏排序方法 】procedure tform1.formcreate(sender: tobject);【扩展信息:后台调用外部程序的完美实现(Delphi】
begin wbeditor.navigate(about:blank); while wbeditor.busy do application.processmessages; (wbeditor.document as ihtmldocument2).designmode := on;end;在老d的帮助下,w对twebbrowser的用法有了一个初步的了解.很显然,接口在twebbrowser的编程中至关重要.此时,为了加深对接口的了解,w决定对ihtmldocument2接口做一个深入的了解.
小知识: 在执行twebbrowser的某个方法以进行某些期望的操作如execwb等时候,可能会碰到如“试图激活未注册的丢失目标”或“ole对象未注册”等错误提示,或者并没有任何出错信息但却得不到希望的结果.这是因为twebbrowser本身是一个ole类型的com组件,你需要在使用twebbrowser前对ole进行一些初始化工作,这个工作可以放到单元的initialization与finalization段中来完成.
{uses activex}initialization oleinitialize(nil);finalization try oleuninitialize; except end;
浅谈ihtmldocument2接口
背景知识: 为了使用ihtmldocument2接口,你必须包含mshtml.pas单元(如果你采用activex导入的方式,这个单元就是mshtml_tlb.pas)
mshtml控件的document对象实现了包括ihtmldocument2接口在内的多个接口.其中document对象的常用属性.子集合.方法等都集中在ihtmldocument2接口中.通过ihtmldocument2接口,可以利用dhtml的强大功能对网页对象进行各种增删操作与属性的动态改变.
在ihtmldocument2的接口方法中,有一个特殊的方法引起了w的注意,这就是execcommand方法.很显然,这个方法与命令的调用有关.execcommand方法声明如下:
//对当前文档.选定内容或指定范围执行特定的操作hresult execcommand( bstr cmdid, variant_bool showui, variant value, variant_bool *pfret);
其中,cmdid参数定义了大多数常用的格式化命令.这样,oe编辑器工具栏上的大多数编辑功能完全可以通过这个方法来实现.为了验证自己的想法,w在窗体上新建一个按钮,并写了一些测试代码.运行结果完全符合w的猜测.
procedure tform1.button1click(sender: tobject);begin with wbeditor.document as ihtmldocument2 dobegin//改变字体的前景色execcommand(forecolor, false, red);//改变字体的粗细execcommand(bold, false, 1);//打开插入图片对话框,插入图片execcommand(insertimage, true, );//文本居中execcommand(justifycenter, false, 0);//执行撤销上一步操作execcommand(undo, false, 0); end;end;
注:为了确保execcommand调用成功,你必须保证当前页面已经完全加载.
如果考虑效率问题,iolecommandtarget::exec方法则可以提供更好的性能.事实上,execcommand命令正是对iolecommandtarget::exec方法的一个封装,其目的主要是为了给script类型的语言提供一个方便的调用入口.通过以下示例学习如何获得对iolecommandtarget接口的访问并调用exec方法:
iolecommandtarget::exec方法 procedure tform1.button2click(sender: tobject); const cgid_mshtml: tguid = {de4ba900-59ca-11cf-9592-444553540000}; begin (wbeditor.document as iolecommandtarget).exec(@cgid_mshtml,idm_bold, //bold命令的id,请参考msdn有关帮助olecmdexecopt_dodefault,0,polevariant(nil)^); end;
再谈document对象的初始化与赋值在ihtmldocument2接口中,document对象是实现dhtml模型的核心.要实现对document对象的任何操作,必须要等到document对象的初始化操作结束之后才能进行.通过navigate方法,可以实现对document对象的初始化.需要注意的是,navigate方法并不能识别常规方式下的相对路径,如果需要导航到某个文件,必须指定绝对路径.
... 下一页