我们可以通过控件 EmbeddedWB_D5-D2010_Version_14.69.1 来响应html事件,还可以自定义html响应哪些html元素。

控件下载 点击下载

里面有demos文件夹大家可以看看delphi代码实例。

EmbeddedWB_D5-D2010_Version_14.69.1\Demos\EmbeddedWB Demos\15 - THTMLListener_Demo

关键方法:HtmlListener1HandlersOnClickHandle

这里贴出这个demo的代码

unit uMain;

interface

uses
Windows, Messages, SysUtils, Classes, Controls, Forms,
Dialogs, EwbBehaviorsComp, EwbEventsComp, EwbEvents, OleCtrls, SHDocVw_EWB, MSHTML_EWB, EwbCore,
EmbeddedWB, StdCtrls, ComObj, ActiveX, ExtCtrls; type
TForm1 = class(TForm)
EmbeddedWB1: TEmbeddedWB;
Panel1: TPanel;
btnEnableDisable: TButton;
lblClickedOnElement: TLabel;
lblElementUndertheMouse: TLabel;
HtmlListener1: THtmlListener;
procedure HtmlListener1HandlersOnClickHandle(Sender: TObject;
Event: IHTMLEventObj);
procedure FormCreate(Sender: TObject);
procedure HtmlListener1HandlersOnMouseMoveHandle(Sender: TObject;
Event: IHTMLEventObj);
procedure EmbeddedWB1DocumentComplete(ASender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
procedure btnEnableDisableClick(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure EmbeddedWB1BeforeNavigate2(ASender: TObject;
const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
Headers: OleVariant; var Cancel: WordBool);
private
{ Private declarations }
HubLinksList: TInterfaceList;
FEventsEnabled: Boolean;
HubLink: IHubLink;
procedure DisconnectHtmlListeners;
procedure ConnectHtmlListeners;
procedure ConnectHtmlListener(ASender: TObject; Doc: IHTMLDocument2);
public
{ Public declarations }
end; var
Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject);
begin
FEventsEnabled := True;
HubLinksList := TInterfaceList.Create;
EmbeddedWB1.Navigate('www.google.com');
end; procedure TForm1.HtmlListener1HandlersOnClickHandle(Sender: TObject;
Event: IHTMLEventObj);
begin
lblClickedOnElement.Caption := Format('Clicked on Element with Tag: [%s]', [Event.srcElement.tagName])
end; procedure TForm1.HtmlListener1HandlersOnMouseMoveHandle(Sender: TObject;
Event: IHTMLEventObj);
begin
lblElementUndertheMouse.Caption := Format('Element under the Mouse [%s]', [Event.srcElement.tagName])
end; procedure TForm1.DisconnectHtmlListeners;
var
i: Integer;
begin
for i := HubLinksList.Count - downto do
begin
(HubLinksList[i] as IHubLink).Disconnect;
HubLinksList.Remove(HubLinksList[i]);
end;
end; procedure TForm1.ConnectHtmlListener(ASender: TObject; Doc: IHTMLDocument2);
var
CPC: IConnectionPointContainer;
begin
if Assigned(Doc) then
begin
Doc.QueryInterface(IConnectionPointContainer, CPC);
if Assigned(CPC) then
begin
HubLink := HtmlListener1.Connect2(CPC);
HubLinksList.Add(HubLink);
end;
end;
end; procedure TForm1.ConnectHtmlListeners;
var
i: Integer;
WB: IWebbrowser2;
HTMLDoc: IHTMLDocument2;
begin
for i := to EmbeddedWB1.FrameCount - do
begin
WB := EmbeddedWB1.GetFrame(i);
if Assigned(WB) then
begin
if Succeeded(WB.Document.QueryInterface(IHTMLDocument2, HTMLDoc)) then
ConnectHtmlListener(nil, HTMLDoc);
end;
end;
end; procedure TForm1.EmbeddedWB1BeforeNavigate2(ASender: TObject;
const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
Headers: OleVariant; var Cancel: WordBool);
begin
with ASender as TEmbeddedWB do
if pDisp = DefaultInterface then
begin
DisconnectHtmlListeners;
end;
end; procedure TForm1.EmbeddedWB1DocumentComplete(ASender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
var
WB: IWebbrowser;
HTMLDoc: IHTMLDocument2;
begin
if FEventsEnabled then
begin
WB := (pDisp as IWebBrowser);
if Assigned(WB) then
if Succeeded(WB.Document.QueryInterface(IHTMLDocument2, HTMLDoc)) then
ConnectHtmlListener(ASender, HTMLDoc);
end;
end; procedure TForm1.btnEnableDisableClick(Sender: TObject);
begin
if FEventsEnabled then
begin
DisconnectHtmlListeners;
btnEnableDisable.Caption := 'Enable Events';
FEventsEnabled := False;
end else
begin
ConnectHtmlListeners;
btnEnableDisable.Caption := 'Disable Events';
FEventsEnabled := True;
end;
end; procedure TForm1.FormDestroy(Sender: TObject);
begin
DisconnectHtmlListeners;
HubLinksList.Free;
end; end.

完整代码下载:点击下载

delphi中EmbeddedWB网页html相互调用(二)的更多相关文章

  1. delphi中WEBBrowser网页html相互调用(一)

    1.基本操作1.1.激活 var doc,url:Olevariant ; begin url:='about:blank' ;//或者一个有实际意义的url WebBrowser1.Navigate ...

  2. java 中 this 和 super 说明及在构造器中super()和this()相互调用执行顺序

    this this 表示当前对象 使用上细分的话,this有 this. 和this()的使用情况 ,下面我们开始细撸 this . 使用场景一: 在成员方法中,this.变量名 指带当前对象的变量, ...

  3. Delphi 中的DLL 封装和调用对象技术(刘艺,有截图)

    Delphi 中的DLL 封装和调用对象技术本文刊登2003 年10 月份出版的Dr.Dobb's 软件研发第3 期刘 艺摘 要DLL 是一种应用最为广泛的动态链接技术但是由于在DLL 中封装和调用对 ...

  4. vue中的父子组件相互调用

    vue中的父子组件相互调用: 1.vue子组件调用父组件方法:子组件:this.$emit('xx'); 父组件:定义yy方法,并在引用子组件时传参,如@xx="yy" 2.vue ...

  5. 关于WinRT中c++和c#相互调用的问题

    先说结论(不见得是最终正确的结论,不过google了一晚上也没有查出个所以然来,即便有解决方法我也认为是微软傻x): 首先c#和c++理所应当的不应该在同一个工程中,而只能是同一个工程的两个项目.只能 ...

  6. C++和C中的函数如何相互调用

    今天笔试遇到的一题,当时就写了在函数前声明为C,按C编译. 首先是在C中调用C++函数,包括普通函数,重载函数以及成员函数. 对于普通函数,在C++中声明为extern "C",在 ...

  7. vue中组件之间的相互调用,及通用后台管理系统左侧菜单树的迭代生成

    由于本人近期开始学习使用vue搭建一个后端管理系统的前端项目,在左侧生成菜单树的时候遇到了一些问题.在这里记录下 分析:由于本人设定的菜单可以使多级结构,直接使用vue的v-for 遍历并不是很方便. ...

  8. Delphi中打开网页连接的几种方法

    https://blog.csdn.net/zisongjia/article/details/69398143 正好要用,做个记录.Mark下. 使用了第一种 uses shellapi proce ...

  9. ASP.NET中 前后台方法的相互调用

    后台调用前台js方法: this.Page.ClientScript.RegisterStartupScript(this.GetType(), "js", "ShowM ...

随机推荐

  1. java 用eclipse j2ee写的servlet 程序,WEB-INF下的配置文件web.xml在哪啊?谢谢!

    我用的版本是tomcat7.0,在webcontent\web-inf里只有一个空文件夹lib,写完servlet 类程序,就可以运行了,我想知道自动生成的配置文件在哪里?或者说从哪里能够看出来配置内 ...

  2. Tomcat中JSP引擎工作原理

    http://blog.csdn.net/linjiaxingqqqq/article/details/7164449 JSP运行环境: 执行JSP代码需要在服务器上安装JSP引擎,比较常见的引擎有W ...

  3. 几种JavaScript富应用MVC MVVM框架

    Ember.js.Backbone.js.Knockout.js.Spine.js.Batman.js , Angular.js 前端中的MVVM设计模式让UI与数据模型可以很轻松的相互更新,这意味着 ...

  4. JSON.parse 函数应用 (复制备忘)

    JSON.parse 函数 JSON.parse 函数 (JavaScript) 将 JavaScript 对象表示法 (JSON) 字符串转换为对象. 语法 JSON.parse(text [, r ...

  5. Java内存模型JMM与可见性

    Java内存模型JMM与可见性 标签(空格分隔): java 1 何为JMM JMM:通俗地讲,就是描述Java中各种变量(线程共享变量)的访问规则,以及在JVM中将变量存储到内存和从内存中读取变量这 ...

  6. spark - 从HDFS加载文件并分析

    scala> val file=sc.textFile("/workspace/bpUserinfo_logs/bpUserinfo_20160212.log") scala ...

  7. apache配置文件中的项目

    对于每个配置项目,有几个要素: 首先是项目名称 其次是配置的语法 再次是配置的默认值 配置所处的配置文件的位置(分区) 配置所在的模块分区(和核心是否紧密) 配置项目所在的模块 所以对于每个配置项目, ...

  8. ES6笔记-字符串方法

    字符串检索方法,indexOf(searchValue,fromIndex)//参数1必需,检索查询的字符串或者值,参数2选题,规定检索的起始位置,不设置默认从0开始 indexOf()方法返回检索字 ...

  9. Jquery div边框大全

    网址 http://jquery.malsup.com/corner/ jQuery Corner是一款jQuery的插件,最初由Dave Methvin开发,但后在Malsup同志的协助下,进行了一 ...

  10. 《JavaScript高级程序设计》笔记(2):位操作符

    1.按位非(NOT) 2.按位与(AND) 3.按位或(OR) 4.按位异或(XOR) 5.左移 6.有符号右移 7.无符号右移 ----------------------------------- ...