说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

在Delphi程序中应用IE浏览器控件

HTML文档下载 WORD文档下载 PDF文档下载
在Delphi程序中应用IE浏览器控件

大概大家还记得Delphi的范例程序中的那个浏览器的例子吧。在那个例子中,利用控件THttp的属性和方法制作了一个浏览器。该例子用于理解THttp控件的使用方法,确实不错。但很少有人会用它作为一个真正的浏览器,原因很简单,功能太有限了,不支持Frame,不支持Script脚本语言,不能以本地文件方式查看HTML文件等等。大部分用户在使用IE或Navigator;我们程序员也乐意使用现成的浏览器,在需要使用浏览器时,就在程序中通过WinExec或CreateProcess等方法调用外部浏览器让用户使用。这种方法确实挺省事的,但总让笔者有点不甘心,把程序控制权让给其它外部程序总让自己很感到麻烦,尤其当应用软件的使用者的计算机使用水平不是很高时。如果能有一个浏览器控件,就可把浏览器嵌入到自己的程序中,那应该挺不错的。

如果你的软件的外部环境是WIN95+IE或WIN98(这样的软件使用率还很高的),那样在系统中就已经有了一个IE浏览器控件可以使用了,也许是你长时间没有发觉吧,别浪费资源了,拿来使用吧。当系统中已经安装了IE3.X或IE4.X时,IE浏览器控件已经注册到系统中了,请运行Regedit,用“编辑”菜单下的“查找”功能,查找“Shell.Explorer”键名,你会发现 IE控件已经作为ActiveX控件注册在系统中了,这样就我们可以在Delphi中使用该控件了。

一、 在Delphi中引入IE浏览器控件

由于IE浏览器控件需要提供显示功能才能使用,所以不能在程序中用CreateOleObject取得一个实例后直接使用其属性和方法,否则程序在运行时会引起错误;这时需要用Delphi中提供的 “Import ActiveX Control”功能,操作方法见下所述。

在“Components”菜单中,调用“Import ActiveX Control”功能,在Registered Controls (注册控件)列表中选择“Microsoft Internet Controls(Version1.1)”,下方的提示栏中显示出其路径为C:\PWin98\System\SHDOCVW.DLL,在Class Names(类型列表)中列出了可注册的三个控件: TWebBrowser_V1、TWebBrowser和TShellFolderViewOC,分别为IE3浏览器控件、IE4浏览器控件和 “Microsoft外壳文件夹查看路由器”控件。单击Install进行安装。安装完成后,在“ActiveX” 控件栏中,将增加三个控件,分别为TWebBrowser_V1、TWebBrowser和TShellFolderViewOC;在 Delphi的Imports目录下,将创建一个文件SHDocVw_TLB.PAS,其中有这三个控件的包装细节,当然含控件的属性和方法说明了,它可以作为我们使用控件的参考资料。

二、 在Delphi程序中使用IE浏览器控件

以TWebBrowser(IE4浏览器控件)为例子。

TWebBrowser的常见属性和方法主要有:

GoBack:方法,后退到上一个页面。

GoForward:方法,前进到下一个页面。

GoHome:方法,调用默认的主页页面,

该页面在IE的选项中设定。

GoSearch:方法,调用默认的搜索页面,

该页面在IE的选项中设定。

Navigate(const URL: WideString;

var Flags

TargetFrameName

PostData

Headers: OleVariant):方法,

调用指定页面,具体参数如下:

URL:指定页面的URL。Flags:

Word类型,作用还不清楚,可设为0。

TargetFrameName:WideString,

打开页面所在的Frame,为空字符串时在当前的

Frame中打开;TargetFrameName

指定的Frame存在时在Frame中打开;

TargetFrameName指定的Frame

不存在时则新建一个窗口打开,此时就相当

于调用外部的IE浏览器了。

PostData:boolean,是否允许发送数据。

Headers:WideString,

要发送的URL请求的头部数据。

Refresh:方法,刷新当前页面。

Stop:方法,停止调用或打开当前页面。

LocationName:属性(WideString),当前位置的名称。

LocationURL:属性(WideString),当前位置的URL。

Busy: 属性(Boolean),是否正忙。

Visible: 属性(Boolean),浏览器窗口是否可见。

(以下属性为在TWebBrowser新增,

TWebBrowser_V1中没有,其作用有待探索)

StatusBar: 属性(Boolean),是否显示状态栏。

StatusText: 属性(WideString),状态栏内容。

ToolBar: 属性(SYSINT),工具栏中的内容。

MenuBar: 属性(Boolean),是否显示菜单条。

FullScreen: 属性(Boolean),是否全屏显示。

Offline: 属性(Boolean),是否脱机浏览。

AddressBar: 属性(Boolean),是否显示地址栏。

TWebBrowser的常见事件主要有:

OnStatusTextChange = procedure

(Sender: TObject; const Text: WideString)

of object;

在状态栏提示信息变化时发生,参数Text为当前状态栏提示信息,我们可以根据该信息来更新我们自己的状态栏提示信息或处理其它的事务.

OnProgressChange = procedure(Sender: TObject; Progress

ProgressMax: Integer) of object;

在打开页面的进度变化时发生,参数Progress为当前进度,ProgressMax为总进度,我们可以根据这两个参数来更新我们自己的状态栏提示信息或处理其它的事务.

OnCommandStateChange = procedure(Sender: TObject; Command: Integer; Enable: WordBool) of object;

当执行新的命令时发生,Command为命令标识,Enable为是否允许执行该命令. OnTitleChange = procedure(Sender: TObject; const Text: WideString) of object;

在页面的标题发生变化时发生,Text为当前标题.

OnPropertyChange = procedure(Sender: TObject; const Property_: WideString) of object;

在页面的属性发生变化时发生,Property_为属性名称 OnDownloadComplete: TNotifyEvent

在下载页面完成后发生.

OnDownloadBegin: TNotifyEvent

在下载页面开始前发生.

三、 在Delphi程序中应用IE浏览器控件的两个例子

(1)制作自己的帮助系统

我们利用IE浏览器控件为用户制作了一个帮助系统,帮助文件由多个HTML文件组成,一个主题对应一个 HTML文件(Topic.HTM),每个主题下的项目对应HTML文件中的一个标签(#Item)。这样在我们的系统中,就不必再调用IE浏览器或WinHelp程序来为用户提供帮助了。相信大家知道HTML帮助文件与传统的HLP帮助文件相比的优势所在吧。

在下面例子中,演示了TWebBrowser(IE4浏览器控件)的Navigate方法的使用方法。请注意程序中的注释。(下面为程序的主要片段)。

{根据主题和项目调用帮助文件}

procedure ShowHelp

( HelpTopic

HelpItem : String );

var

TargetFrameName

PostData

Heads

Flags : OleVariant;

URL : widestring;

begin

TargetFrameName := '';{指定Frame的空字符串时

则在当前Frame中打开帮助文件}

PostData := false;{不发送数据}

Heads := '';{Header信息为空}

Flags := 0;{Flags设为0}

URL := HelpTopic + '.HTM#'+HelpItem;

{帮助信息的URL}

with formHelp.webbrowser do{在帮助窗口

中的IE浏览器控件中显示帮助信息}

begin

navigate(URL

Flags

TargetFrameName

PostData

Heads);{显示帮助信息}

end;

end;

(2)显示一个GIF动画

假如你还没有一个适合的动画显示控件,不妨试用一下下面方法.

procedure ShowGIF( GIFFileName : String );

var

TargetFrameName

PostData

Heads

Flags : OleVariant;

URL : widestring;

begin

TargetFrameName := '';{指定Frame的空字符串时

则在当前Frame中打开动画文件}

PostData := false;{不发送数据}

Heads := '';{Header信息为空}

Flags := 0;{Flags设为0}

URL := GIFFileName;

with formGIF.webbrowser do{在指定窗口中的

IE浏览器控件中显示动画}

begin

navigate(URL

Flags

TargetFrameName

PostData

Heads);{显示动画文件}

end;

end;

以上程序在PWIN98+Delphi3.0下调试通过。

VB如何取得磁盘序列号? VB如何让Window不接受键盘输入及Mouse Click VB如何让程序拥有多个热键? VB如何让用户自行输入方程式,并计算其结果? VB如何使程序不在Ctrl+Alt+Del弹出的对话框内? VB如何使用 VB 编写自动反安装的程序? VB如何用VB建立快捷方式 VB如何用VB在桌面建立快捷方式 VB如何在 VB 中控制 Modem 行为? VB如何在VB中判断Windows9x的运行模式 VB如何在Visual Basic中实现异步执行程序 VB如何在开机时自动更换墙纸? 使回车具有 Tab 的功能-VB资料 输入时,自动转换成小写? -VB资料 显示多媒体信息 -VB资料 也谈Windows 下的自动存盘 -VB资料 一个小巧精致的CPU监视器 -VB资料 应用VB4.0实现工业控制的实时曲线和历史曲线 应用程序中实现关机功能-VB资料 萤幕抓取与萤幕保护程式 -VB资料 用VB5.0创建Windows快捷方式 用VB5.0收集键盘和鼠标信息 用VBA限制非注册软件使用时间 用VB编程检测当前电池使用情况 用VB编写定时关闭计算机的程序 用VB编写键盘拦截程序 用VB函数轻松访问系统注册表 用VB设计一个定时闹钟程序 用VB实现拖放功能 在VB中启动控制面板 在VB中异步执行程序 webbrowse控件怎样控制直接打开一个WORD文档,而不用提示是打开还是下载呢? 急!!请高手指点,分不够可以加! 怎么使自己做出来的网页在IE浏览器中浏览中不出现水平滚动条 怎么解决? IE无法打开另弹出窗口的连接!为什么? 如何读写ini文件的问题?搜索的全打不开 cross join的问题 请微软专家、思归、江雨.net,spring.z进来!请问如何在winform模式下调用Web Service?想实现相当于asp下的XMLHTTP的功能!十万火急!!! 求教:在asp.net中能不能实现类似于javaApplet的功能,怎么实现 谁手上有地域情人的《三句话搞定QQ菜单》,能发一份给我吗?在线等待 Delphi 中怎样设置、取消 注释块?找到以前但是打不开,这个该死的CSDN!!! access数据库的数据要放入sql数据库,代码怎么写? 安装声卡的驱动alsa,make后,出现Need by“hwdep.o”stop.请问这是怎么会事?! 这样给二维指针分配内存可以吗?? 请问如何实现win2k server和DOS机之间的通讯 请微软专家、思归、江雨.net,spring.z进来!请问如何在winform模式下调用Web Service?想实现相当于asp下的XMLHTTP的功能!十万火急!!! 我的显示有问题,大家帮忙看一下好吗? 统计,大家都用哪里的php收费空间? 请教JTree中怎么任意设置TreeNode的图标? 在堆栈上分配结构与用new分配结构有何区别 是否可以对datareport中添加的控件编程呢 三层中数据返回的问题 在vb.net里有什么简便的办法可以处理所有控件的keydown消息? 菜鸟问题 在线等 Page.Response.Write("<img height=13 src='images\deleteTrue.gif' width=13 align=middle>");出错 我想买一款数码像机!!! 动态连接excel表的问题 用什么方法可以实现我计算的数字,只有两位小数,谢谢!! 知道26号放假!高兴!!放分!! 问个瓜问题 推荐几个好的编程论坛(中文的),不看的后悔呀!请不要移贴或删除! 关于脚本与代码的通信问题。。。 用WiseInstall作安装程序,怎么让可执行程序自动识别专用的文件,即点击专用文件即可用对应执行程序打开 在POWERDESIGN中将数据库设计倒入WORD报表的中文乱码问题 访问数据库时遇到的问题 如何把Excel的图表另存为图形文件?? 紧急求救!!(关于调用exe的问题) 关于动态删除记录的问题,大侠指点!!! 请问如何把用户上传的文件(所有)都保存在sql里面? 在POWERDESIGN中将数据库设计倒入WORD报表的中文乱码问题 时间设置 年关已到,谁有工作总结的模扳,给小弟发一份。 今天女朋友回家,放分,终于可以自由几天了,头一次放分,只有这么多了 生气!我真的很生气!现在的人怎么都这样? to shibichen(务必请近来一下) 在VC中怎么写关于猫的AT命令的程序?最好又程序。分数不过另外给 问一个傻傻的问题 帮帮忙,我送什莫礼物给女朋友好呢? 如何将选择出的内容存入文本文件??? Delphi中数据库操作Filter的原理,他和SQL语句查询输出的结果有什么不同? 在EXCEL中如何实现分两上SHEET打印!? 浙江教育厅:明年仍坚持民办初中招生不浙大教授陈英旭受审 亿元课题经费被控天热,补习更热,暑假惨成“第三学期”浙江省教育厅:全省已有79个县实现“大学专业冷热变迁昔日最热的计算机、法北大清华在浙高考录取结束 两校共录取杭州女大学生全球招募了一批支教志愿者六年级女孩读了30多个兴趣班 家长何浙大等国内名校加盟MOOC 在线教育浙江省出台政策促进大学生就业 鼓励自中美洲公交,爱选美国旧校车美防长:美国仍在寻求“国际联盟”共同驻日本冲绳美军举行“鱼鹰”飞行部队重2只顽皮小猫躲铁轨下 纽约地铁停驶9美防长:美国仍在寻求“国际联盟”共同驻日本冲绳美军举行“鱼鹰”飞行部队重多国在南海岛礁大搞基建埃及:以民主名义争夺新法老头衔浙江高考第二批分数线公布 文科468西班牙华侨华人协会举行换届交接杭州力争削减50%以上审批事项 严控大渡河双江口、雅砻江杨房沟两大水电站媒体评论:希腊危机远没有结束湖南耒阳市文联主席因作品遭网友差评“广州查获微信贩毒犯罪团伙 暗语联络交专家:抗战伤亡和损失调研用事实揭露日广东省中山市委副书记邓小兵违纪被查广西:农村饮用水水源保护区不得再建垃广东省中山市委副书记、政法委书记邓小【长城微评】贾玲恶搞花木兰 该道歉吗福建审结一起组织领导传销活动案清华监控现真相 “保安迫降无人机”事中国外交“下半场”“大手笔”推动世界俄罗斯一架轰炸机坠毁且末县80岁以上老人按季度领“长寿工电影《云情报》开机 再现河北抗战故事三伏天赣鄱大地骄阳似火 别上火!周末福建高校本科专业开始申报 优先增设“福建旅游景区、酒店推出百余项暑期优惠广西:农村饮用水水源保护区不得再建垃贵州发布社会责任报告企业首次破百广东13市和15县已完成不动产登记机
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘