delphi中EmbeddedWB网页html相互调用(二)
我们可以通过控件 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相互调用(二)的更多相关文章
- delphi中WEBBrowser网页html相互调用(一)
1.基本操作1.1.激活 var doc,url:Olevariant ; begin url:='about:blank' ;//或者一个有实际意义的url WebBrowser1.Navigate ...
- java 中 this 和 super 说明及在构造器中super()和this()相互调用执行顺序
this this 表示当前对象 使用上细分的话,this有 this. 和this()的使用情况 ,下面我们开始细撸 this . 使用场景一: 在成员方法中,this.变量名 指带当前对象的变量, ...
- Delphi 中的DLL 封装和调用对象技术(刘艺,有截图)
Delphi 中的DLL 封装和调用对象技术本文刊登2003 年10 月份出版的Dr.Dobb's 软件研发第3 期刘 艺摘 要DLL 是一种应用最为广泛的动态链接技术但是由于在DLL 中封装和调用对 ...
- vue中的父子组件相互调用
vue中的父子组件相互调用: 1.vue子组件调用父组件方法:子组件:this.$emit('xx'); 父组件:定义yy方法,并在引用子组件时传参,如@xx="yy" 2.vue ...
- 关于WinRT中c++和c#相互调用的问题
先说结论(不见得是最终正确的结论,不过google了一晚上也没有查出个所以然来,即便有解决方法我也认为是微软傻x): 首先c#和c++理所应当的不应该在同一个工程中,而只能是同一个工程的两个项目.只能 ...
- C++和C中的函数如何相互调用
今天笔试遇到的一题,当时就写了在函数前声明为C,按C编译. 首先是在C中调用C++函数,包括普通函数,重载函数以及成员函数. 对于普通函数,在C++中声明为extern "C",在 ...
- vue中组件之间的相互调用,及通用后台管理系统左侧菜单树的迭代生成
由于本人近期开始学习使用vue搭建一个后端管理系统的前端项目,在左侧生成菜单树的时候遇到了一些问题.在这里记录下 分析:由于本人设定的菜单可以使多级结构,直接使用vue的v-for 遍历并不是很方便. ...
- Delphi中打开网页连接的几种方法
https://blog.csdn.net/zisongjia/article/details/69398143 正好要用,做个记录.Mark下. 使用了第一种 uses shellapi proce ...
- ASP.NET中 前后台方法的相互调用
后台调用前台js方法: this.Page.ClientScript.RegisterStartupScript(this.GetType(), "js", "ShowM ...
随机推荐
- jquery 可拖动进度条
实现这个效果怎么弄呢? <!DOCTYPE html> <html> <head lang="en"> <meta charset=&qu ...
- 将商品SKU数据按商品分组,组装成json数据
需要封装的数据 将这些数据,分组出来,OLGoodsID相同的为一组,然后每个组的OLSKUID,放在一个字段里,变成 [{"OLGoodID":"test06261 ...
- works-er
- 冒泡排序算法(C#实现)
简单的冒泡排序算法,代码如下: ] = temp; hasExchangeAction =true; //发生过互换 } } if (!hasExchangeAction) //如果没有发生过互换,则 ...
- win10 Administrator
和Win7/Win8.1一样,Win10的管理员账户Administrator是默认隐藏和关闭的,因为该账户权限极高,被不法分子利用后存在极大风险.但如果你想在某些特殊情况下使用该账户,就需要手动将其 ...
- 05_Excel操作_01_简单导入导出
[Excel组成] 主要由四部分组成: 1.工作簿 每一个Excel文件都可以看成是一个工作簿,当打开一个Excel文件时,相当于打开了一个Excel工作簿. 2.工作表 当打开了Excel工作簿后, ...
- RSA安全性问题
加密:C=Me(mod n) 解密:M=Cd(mod n) 安全性基础: 穷举法攻击: 1.攻击者设计一个M,C=Me(mod n) 2.d的个数至多有n-1个,尝试使用每个d破解,如果M’=Cd‘( ...
- 在阿里云服务器ubuntu14.04运行netcore
从netcore1.0正式发布就很激动,想要赶紧学习. 最近博客园的一篇文章给了完整的指导非常感谢,但是在实际实现到发布到阿里云服务器遇到一些问题,记录下来. 首先上基础文章http://www.cn ...
- linux中python环境搭建及升级后yum不可用解决方案
1.1 LinuxCentOS 为例.1.1.1 升级 Python(1) 下载 Python 版本$ wget https://www.python.org/ftp/python/2.7.11/Py ...
- 深度优化LNMP之Nginx (转)
深度优化LNMP之Nginx Nginx基本安全优化 1.调整参数隐藏Nginx版本号信息 一般来说,软件的漏洞都和版本有关,因此我们应尽量隐藏或清除Web服务队访问的用户显示各类敏感信息(例 ...