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

OpenHarmony—类型转换仅支持as T语法 在ArkTS中,as关键字是类型转换的唯一语法,错误的类型转换会导致编译时错误或者运行时抛出ClassCastException异常。ArkTS不支持使用语法进行类型转换。当需要将primitive类型(如number或boolean)转换成引用类型时,请使用new表达式。 阅读详情

 

 

        大概大家还记得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;
Delphi嵌套IE网页 Delphi嵌套IE网页源代码,此实例是嵌套手机归属接口,可以在此程序上使用手机归属地查询 立即下载

相关推荐

Chrome浏览器控件Delphi版

Chrome浏览器控件嵌入Delphi开发,开发属于自己的个性浏览器。

Delphi开发嵌入式IE浏览器监控程序

随着网络的发展和普及,对网络的监控日益成为网络安全的必然要求,也是管理和维护网络的一个有效手段。当前已经有多种应用比较广泛的网络监控和过滤程序,如美萍网管、we-blocker等,它们都可以实现基于网络URL和IP地址的监控和过滤功能。  本文将对如何开发一个嵌入到IE浏览器中的监控程序进行介绍,该程序可以根据网络URL和IP地址进行监控和过滤,并且记录系统日志,从而使你对IE(当然是使用它的用户

桂林哈秋 - 我想学编程 1784

数字IC面试核心:从MUX基础到Glitch-Free时钟切换电路深度剖析

本文深入剖析数字IC设计中的MUX基础原理及其在Glitch-Free时钟切换电路中的应用。从二选一MUX的门级实现到时钟切换中的毛刺问题,详细讲解了同步切换机制和工程优化技巧,帮助工程师掌握高速时钟电路设计的核心要点。

weixin_42629815的博客 326

Delphi控件IE窗口打开网页

use comobj; procedure TForm1.btn1Click(Sender: TObject);  procedure OpenInIE(aURL: string);   //need uses ComObj;   var     IE: Variant;   begin     IE := CreateOleObject('InternetExplorer.Appli

shandiantianying的专栏 857

电影台词预测类型:NLP小样本多标签分类实战

电影类型预测本质上是短文本语义建模问题,核心在于从高度碎片化、低语义密度的台词(平均仅12.7词)中挖掘隐含的类型学编码规则。其技术难点在于:需应对省略主语、倒装、拟声词等非规范表达;处理Drama与Comedy等类型强共现的多标签耦合;并克服领域迁移障碍——维基文本预训练模型在台词上性能骤降0.11。解决方案聚焦RoBERTa微调、类型感知注意力机制与标签平滑策略,兼顾小样本鲁棒性与业务可解释性,广泛适用于影视元数据标注、智能推荐系统及NLP教学实践。

weixin_33309048的博客 289

转录组PCA分析3大常见误区:数据标准化、离群样本与批次效应处理

本文深入探讨转录组PCA分析中的三大常见误区:数据标准化、离群样本识别与批次效应处理。通过实战案例和R代码演示,揭示如何优化PCA结果以提升生物学解释力,特别关注数据标准化策略的选择和批次校正方法的应用,帮助研究者避免常见陷阱并获得可靠的转录组分析结果。

weixin_28362173的博客 373

Delphi打开浏览器

Delphi打开浏览器

旭旭的博客 1242

ABAP - Function ALV 11 - 单元格下拉框

【代码】ABAP - Function ALV 11 - 单元格下拉框。

HeathlX的博客 1814

【2015NOIP模拟】【俄罗斯套娃】【Lucas的数列】【旅行】【Xor】11.5总结

100 + 0 + 35 + 30 = 165【比赛时】  [8:15]比赛开始   [8:46]读完题   [9:18]T1 100’ 之前做过类似的,打完拍完。   [9:52]T2 20’   [11:00]T3 30’ 程序有小Bug,调了1hr   [11:30]T3 60’   [11:32]T4 30’【犯下的错误或注意的事】  1、T1要mod的数为1010+710^{1

410

潜行游戏设计:核心机制与关卡设计解析

潜行游戏作为动作游戏的重要分支,通过视觉遮蔽、声音传播和AI行为树等复杂系统,为玩家提供独特的策略体验。视觉隐蔽系统采用视野锥和光照值的双重判定,声学传播模型模拟距离衰减和材质穿透,而敌人AI行为树则包含巡逻、警戒和团队协作等状态节点。这些技术不仅提升了游戏的真实感和挑战性,还在《合金装备》《刺客信条》等经典作品中得到广泛应用。潜行游戏的关卡设计强调多路径拓扑结构和环境叙事元素,通过沙漏模型和动态难度调节,平衡自由度和开发成本。未来,基于ML的适应性AI和物理模拟的隐蔽系统将成为创新方向。

weixin_42497762的博客 180

基于锁相环的高精度频率分频器simulink建模与仿真

在现代电子系统中,高精度频率分频器扮演着至关重要的角色。它能够提供精确的频率参考,广泛应用于通信、仪器仪表、航空航天等领域。基于锁相环的高精度频率分频器具有结构简单、性能稳定等优点,成为了研究的热点。

平时工作较为繁忙,私信消息一般晚上回复,谢谢大家~~ 776

学习WMX3,运动控制

WMX3运动控制学习

qqshuaishuai的博客 994

基于 C# 实现 RTSP 摄像头监控分屏系统:从流媒体获取到多画面显示

通过本文的讲解,我们介绍了如何在 C# 中实现 RTSP 摄像头监控分屏系统。我们使用了FFmpeg和VLC两种不同的方法来获取和解码 RTSP 流,并通过PictureBox控件和控件实现了分屏布局。两种解码方案都非常强大,可以根据实际需求选择最适合的方案。通过这种方式,您可以轻松地在 C# 中集成 RTSP 流,并将多个摄像头的视频流实时显示在同一屏幕上,进行监控和分析。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 2309

VS2013 build错误:error C2440: '=' : cannot convert from 'const char [9]' to 'LPCWSTR'

在调试程序中出现的一个错误,记录下来以备后用。产生原因:这属于字符串类型不一致产生的,解决方法:1),强制类型转换:在字符串之前增加(LPCWSTR);2),在项目的属性配置中将 Character Set--->Not Set;3),在字符串之前增加 _T( )。转自:https://blog.youkuaiyun.com/qqqren/article/details/52573220...

phenixyf的专栏 1250

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

2021.09.05七连测day2总结

18:00~18:20 写T1 18:20~18:30 阅读思考后三道题 18:30~18:50 思考并写T2代码,认为T2是类似于括号匹配多加了一步操作。 18:50~19:30 思考T3的前两个数据范围,想到了trie树的操作,写了40分代码。 19:35~19:50 思考T3的第三个数据范围(梯形),未果。 19:50~22:00 检查前三道题并上交,阅读并思考T4。 分数 预计分数为100+100+40=240 结果为100+50+50=200 其中T2因为string类型与char类型的相互转换,

zero_orez6的博客 189

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

qt编译报错和This application failed to start because no Qt platform plugin could be initialized问题

qt编译问题

wwc1996的博客 1048

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

KBEngine 内嵌 Python 3.7 的 C API 数字协议(Number Protocol)全面解析

本文以 KBEngine 仓库内置的 Python 3.7 官方 C API 文档《Number Protocol》为骨架,逐条讲解 `PyNumber_*` 系列函数的作用、签名、等价 Python 表达式与错误处理约定,并结合仓库中 [abstract.h](https://link.gitcode.com/i/d044366e9199cb90a0559d5f35de2ef6) 的声明以及 [

gitblog_00628的博客 997

maven error提示: 不兼容的类型: java.lang.Object无法转换为T

使用Maven install打包程序,但是提示error: 不兼容的类型: java.lang.Object无法转换为T。 看了下是这段代码: public T getMapper(Class cls) throws Exception { return sqlSessionTemplate.getMapper(cls); } 出错直接原因: Object类型无法转换为泛型T

play__bear的专栏 2万+

【C++】 类型转换深度探索:揭开类型转换的奥秘

详细讲解了c++四种类型转换的原理和实践

You build it, you run it 2411

C++ | 四种类型转换

简单记录一下C++中常用的四种类型转换。提示以下是本篇文章正文内容,下面案例可供参考RTTI(RunTimeTypeldentification)即通过运行时类型识别,程序能够使用基类的指针或引用来检查着这些指针或引|用所指的对象的实际派生类型。RAII也称为“资源获取就是初始化”,是c++等编程语言常用的管理资源、避免内存泄露的方法。它保证在任何情况下,使用对象时先构造对象,最后析构对象。httpshttpshttpshttpshttpshttpshttpshttpshttps。......

大柳_的博客。 5817

【C++】听说了吗,C++引入了四种强制类型转换

如果赋值运算符左右两侧类型不同,或者形参与实参类型不匹配,或者返回值类型与 接收返回值类型不一致时,就需要发生类型转化,转换的前提是类型之间有一定的关联。 2、C++中的类型转换 上面举的例子都是内置类型之间,而内置类型和自定义类型之间、自定义类型和自定义型之间都是可以通过一定的方式互相转换的。| 内置类型和自定义类型之间:在前面的学习中我们经常说:单参数构造函数支持隐式类型转换,多参数也可以通过加进行隐式类型转换。 C++支持内置类型隐式类型转换为类类型对象,需要有相关内置类型为参数的构造函数 构造

小羊的博客 3720

C++进阶之类型转换:operator T()用法实例(三百一十五)

本篇目的:C++进阶之类型转换:operator T()用法实例基本概念是C++中的类型转换运算符,用于实现自定义的类型转换。它允许对象在需要时自动或显式地转换为目标类型T。通过在类中定义,开发者可以控制对象如何被转换为不同的类型,提供更加灵活的类型转换机制。类型转换的定义是类的成员函数,用于将类的对象转换为目标类型T。该运算符函数必须返回一个目标类型的对象。它可以定义为成员函数或转换构造函数。通过这种方式,可以实现从类类型到其他类型的转换,例如从自定义类类型到内置数据类型的转换。隐式与显式类型转换。

Android系统攻城狮 998

C语言int32_t, uint32_t, int64_t, uint64_t转换

int32_t : 有符号32位整数最小值 :-2^31 (-2,147,483,648) 最大值 : 2^31 - 1 (2,147,483,647)uint32_t : 无符号32位整数最小值 : 0 最大值 :2^32 - 1 (4,294,967,295)int64_t : 有符号64位整数最小值 :-2^63 (-9,223,372,036,854,775,808)

Wp@xpc的博客 6759

C++中的类型转换

如果目标类型是signed的,则当原值能用目标类型表示时,它不发生改变; 反之,结果值 依赖于具体实现。 2) 浮点数类型转换 3) 指针和引用类型转换 任何指向对象类型的指针都能隐式地转换成void*。指向派生类的指针(或引用)能隐式地转换成指向其可访问的且明确无二义的基类的指针(或引用)。 指向函数的指针和指向成员的指针不能隐式地转换成 void* 。 求值结果为0的常量表达式能隐式地转换成任意指针类型的空指针。类似 地,求值结果为0的常量表达式也能隐式地转换成指向成员的指针类型。例如: 4

FintechBoy的博客 1632
上一篇: Delphi下汉字输入法的编程及使用
猪仔庆
博客等级 码龄26年 0粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值