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

在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下调试通过。

电子书追踪统计,App Annie for eBooks上线 先驱还是模仿者?细数海外移动应用推广平台 IDC:PC出货量下滑终于放缓 联想销量再次第一 为什么说,用一块屏幕玩游戏是远远不够的? 编写代码?先熟悉一下编程语言界限吧! Spanner vs. F1:谷歌两大数据管理利器的整体对比及关联 移动设计需摒弃的几大PC应用设计方法 响应式导航设计案例解析(多图) 所见即所得:七大无需编程的DIY开发工具 前Google员工发布无痕搜索产品,阻老东家财路 VMware推出vCloud Suite及vSphere新版:可用性及性能双丰收 TIOBE 2013年10月编程语言排行榜:Groovy首次挤进Top 20 Cookie时代将结束:微软将开发跨PC、移动和Xbox跟踪技术 Web设计里需要避免的八大糟糕趋势 Groupon从ROR迁移至Node.js,响应速度大幅提升 腾讯云的Container实现 专为物联网打造的数据库TempoDB获得320万美元投资 MongoDB成为首位10亿美元初创,功臣可归功于Oracle? 程序员遇到Bug后的30种常见反应 扎克伯格豪掷3000万美元购四套房 梅耶尔和拉里佩奇也居于此 IBM研究人员:仅200条微博 就可构建人格剖析图 MDCC重磅讲师:Pebble CEO Eric Migicovsky 历届中国大数据技术大会PPT精粹(一) 通讯也“跨界”:几行代码,API+SDK,用PaaS实现移动互联 MIT风景线:丝绸雕塑、VR代码、机器人、智能按钮及保时捷 深度学习新算法,完成字里行间的情绪识别 如何在开发项目里和难缠的程序员合作? 移动周报:七大无需编程的DIY开发工具 手把手教学,用jQuery Mobile创建Web App 别惊讶,Android绿色机器人标志灵感来自于卫生间标识 Google TV更名为Android TV 智能电视的路不好走 怎样通过程序设置使浏览器不出现工具条和minibox,maxbox 如何修改注册表来删除ie中的查看》浏览栏按钮? 关于函数指针的问题,欢迎讨论. 还是没有解决的问题:关于VFP报表打印的问题—急急急! moden是否有物理地址 如何用Delphi或C++Builder代码实现一个程序关闭另处一个应用程序。 请各位推荐几本好一点的JAVA参考书,THANKS 这样的代码为什么不能连接SQL SERVER数据库 当二个进程运行时,几就是两次运行FTP 动画关闭窗体API的问题 什么叫串行端口,什么叫并行端口? 程序员级考试就是中级考试吧 各位高手:请问*.html和*.htm文件有何区别? 在活动目录中如何实现组的嵌套? swing窗口布局的问题 毕设还要翻译6000子科技文献,谁介绍一篇呀! 介绍几个考中级的网址来噶 CNET网站重新架构,我们的链接也要改了~~ 急,真的急 各位,有谁能告诉我怎样使得程序中每个Show的窗体都以新窗体出现在任务栏。(答对了一定加分!!!!) 能不能获得来访者的计算机名 help me!高手请看! 11号帖子,救命呀,很急,很重要! 怎样在恢复一个被删除的文件时恢复文件全名? 我急!深夜提问!大家看一看 有谁告诉我Microsoft Visual InterDev 6.0如何使用其中的站点管理 如何在Word工具条上加一个按钮 请问系统和上网的速度有关系吗 急需foxpro for win版,哪有??? 请教一下,ado.net里如何返回表里的行数? 如何在HTML页面中使用 Acrobat 的 PDF 阅读器控件 关于一个遗传算法得问题!! 请问一个TSR问题! 关于跨数据库查询的问题 请问在ListBox中可不可以将每一行字符串设置成不同的颜色? vb6.0中如何将dbgrid里的内容添加到数据库里? 请问怎样才能将窗体上的最大化按钮设置成无用,而保留最小化按钮? 各位专家:请问win2000 PRO 下的config.msi目录中的好多以rbf为扩展名的文件是什么文件?有什么用?可以删除吗? ASP.NET中DATAGRILD的烦人处 新手问两个简单的问题??? 想知道如何才能看见前页纸油笔写过后留下的字迹?(散分) 为什么用odbc连接的paradox表不能编辑? 哪位大侠帮看一下代码(关于链表),为何出"invalid type argument of `->'"的错 一个非常非常想从事计算机软件开发的愿望 关于Hook的一个小问题 文档视图结构中无法显示编辑框,怎么办啊??用什么代替啊 十万火急! 通过网络,进行语音聊天的程序。 你了解人工受精吗? 有关“无纸化考试系统”bow api中的常量 关于addslashes的问题 已知a与b互为相反数,且b不等于0,求a+b与b分之a的值 在锐角△ABC中,b=2,B=π/3,sinA+sin(A-C)-sinB=0,则△ABC的面积为 二次函数两根距离公式是什么 已知a b互为相反数,且a,b不等于0 ,则a分之b的值为 在三角形abc中,已知bd和ce分别是ac,ab边上的中线,且bd垂直于ce,bd等于4ce等于6,求三角形abc的面积 在△ABC中,设角A,B,C的对边分别为a,b,c,且cosC/cosB=(2a-c)/b,求角B 已知a和b互为相反数且b不等于0,求b分之a与a加b的值我知道a加b等于0,但是为什么b分之a等于负1?而且题目是a加b与b分之a的值. 滑轮组中摩擦力移动的距离和绳子移动的距离一致吗 已知x的平方-y的平方=8,x-y=2,求x的平方+y的平方的值 已知a,b互为相反数且b不等于0,求a,b于a/b的值? 已知三角形ABC的面积是根3,角A,B,C所对的边分别是a,b,c,而且sin2C=sin2A+sin2B+sinA点乘sinB,求角C已知三角形ABC的面积是根3,角A,C所对的边分别是a,b,c,而且sin2C=sin2A+sin2B+sinA点乘sinB。1求角C. 已知(x+y)的平方=12,(x-y)的平方=8 求x的平方+y的平方的值 在三角形ABC中,角C=90度,AD平分角BAC,AB=5,CD=2,则三角形ABD的面积 物G重90N,受如图所示滑轮组作用时,在拉力F为20N时恰好作匀速运动,则物体所受摩擦力大小是 N,摩擦力方向是 ,若F在5s内前进了5m,则重物G移动的距离是 ,G移动的速度是 . 如图,在三角形ABC中,AD,BE,CF是三条中线,它们相交于同一点G,问三角形AGF和三角形AGE是否相等?为什么? 在三角形ABC中,角C=90度,AC=BC=4,角BAC的平分线交BC于D,求三角形ABD的面积.( 已知:如图,在三角形ABC中,AB等于BC等于CA,AE等于CD,AD和BE相交于P 点,BQ垂直已知:如图,在三角形ABC中,AB等于BC等于CA,AE等于CD,AD和BE相交于P 点,BQ垂直AD于点Q .求证:BP等于2PQ △ABC中,∠B=480,AB=AC.AD是BC的高,CE、CF是∠C的三等分线,分别与AD相交于E、F,BE交AC于G,求∠AGF 二元函数的连续和极限二元函数能不能用等价无穷小替换和洛必达定理?为什么? 几何证明 如图,在正三角形ABC中,点D,E分别在边BC,CA上,使得CD=AE,AD与BE相交于点P,BQ垂直于AD于点Q,求QP/QB值 已知B(-6,0),C (6,0)是三角形ABC的两个顶点,内角A,B,C满足 sinB- sinC=1/2sinA,求顶点A的轨迹方 在三角形ABC中,∠C=90°,a=6,c=10,则三角形ABC的面积为 已知方程(a-4)X|a|-3+2=0是一元一次方程.则a=? 已知4x²=144,y³+8=0,求x加y的值. 在三角形ABC中, 一条路,已经修了30%,距离中点还有1000米,这条路有多长 二次函数中抛物线与x轴交点间的距离公式 二元函数的极限 在三角形ABC中,已知BD和CE分别是两边上的中线,并且BD垂直CE,BD=4,CD=6.求三角形ABC的面积不要复制别人的答案说一个我可以听懂的题目上的图形我都画不出来,所以清说详细一点上面题目打错 二元一次函数求最值1.5X-0.75Y+1 1>x>y>0 求该函数的最大值 此事 X Y各等于多少 求二元函数极限,如下图.不仅说下答案 如图在三角形ABC中,已知BD和CE分别是AC,AB边上的中线,且BD垂直CE,BD=4,CE=6,求三角形ABC的面积. 在三角形ABC中,角A,角B,角C的对边分别为a.b.c,若b*cosC=(2a-c)cosB,角B的大小是多少若b=根号7,a+c=4,求三角形ABC的面积 请求:二元函数求极限lim (x2+y2 )1/2-sin(x2+y2 )1/2(x,y→0) (x2+y2 )3/2请帮忙解决,题中的数字均为上标(x2+y2 )1/2-sin(x2+y2 )1/2除以 (x2+y2 )3/2当xy均趋于0时,求二元函数的极限 如图,在三角形ABC中,AB=AC,BD,CE分别是边AC,AB上的中线,且BD⊥CE,那么tan∠ABC= 在三角形ABC中,a.b.c分别是角A,B,C的对边,且COSB分之COSC=-b分之 2a+c,1.求角B的大小2.b=根下13,a+c=4.求三角形ABC的面积 a分之|a|的值(a不等于0) 33毫米等于几厘米啊 在△ABC中,a,b,c分别是角A,B,C的对边,且cosC/cosB=2a+c/b,则角B的大小为_求详解,要过程.谢谢! 2次函数顶点式y=a(x-x1)(x-x2)是怎么得出这个式子的?请列一下步奏写错了.是交点式 已知正三角形三边长度之和为33厘米,求每边的长 两根之和 和 两根之积各等于什么是两个专有名词.好像一个等于一次项系数的相反数,还有一个等于常数项. 2次函数一般式变顶点式 一个直角三角形,两个锐角的边长是4厘米求两个锐角阴影面积 两根之和等于?还有两根之积等于 2次函数怎么化顶点式将y=(1/2)x^2+x-1 化为y=a(x-h)^2+k的形式 注;我不知道怎么化,请详写下步骤,最好加上文字说明 有四个数,每次选取其中三个数算出它们的平均数,用这种方法计算了四次,分别得到四个数:85,92,100,106那么原来这四个数的平均数是( ) [紧急] 两根之和,两根之积等于什么? 怎么判断2次函数是顶点式还是一般式还是什么式 4个数每次取3个数,算上他们的平均数再加上另一个数;用这种方法计算了4次,分别得到以下4个数:86,92,100,106,那么原来4个数的平均数是多少? 已知(x平方+y平方)(x平方+y平方-8)+16=0 求x平方+y平方的值 2次函数顶点式的解析式?到司是y=a(x+h)^2+k 还是y=a(x-h)^2+k 怎样算直角三角形或锐角三角形的面积 二次函数的两根之和和两根之差公式 三个数的平均数是86,其中第一个数是92,是第二个数的2倍,第三个是多少 有四个数,每次选取其中三个数,算出它们的平均数再加上另一个数,这样计算了四次,得到了下面四个数:86,92,100,106.求原来四个数的平均数. 二次函数中的两根之和,两根之积怎么求 已知a和b互为相反数且b不等于0,求a+b与b分之a的值.紧急 请回复 在锐角△ABC中,角A,B,C所对的边分别是a,b,c,若b=2,B=π/3,且sin2A+sin(A-C)=sinB,求△ABC面积 求二次函数两根距离公式应该有三个'一个跟韦达定理有关'一个跟戴尔塔有关'还有一个带个k这个k是什么意思'.
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘