我们可以通过控件 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的代码

  1. unit uMain;
  2.  
  3. interface
  4.  
  5. uses
  6. Windows, Messages, SysUtils, Classes, Controls, Forms,
  7. Dialogs, EwbBehaviorsComp, EwbEventsComp, EwbEvents, OleCtrls, SHDocVw_EWB, MSHTML_EWB, EwbCore,
  8. EmbeddedWB, StdCtrls, ComObj, ActiveX, ExtCtrls;
  9.  
  10. type
  11. TForm1 = class(TForm)
  12. EmbeddedWB1: TEmbeddedWB;
  13. Panel1: TPanel;
  14. btnEnableDisable: TButton;
  15. lblClickedOnElement: TLabel;
  16. lblElementUndertheMouse: TLabel;
  17. HtmlListener1: THtmlListener;
  18. procedure HtmlListener1HandlersOnClickHandle(Sender: TObject;
  19. Event: IHTMLEventObj);
  20. procedure FormCreate(Sender: TObject);
  21. procedure HtmlListener1HandlersOnMouseMoveHandle(Sender: TObject;
  22. Event: IHTMLEventObj);
  23. procedure EmbeddedWB1DocumentComplete(ASender: TObject;
  24. const pDisp: IDispatch; var URL: OleVariant);
  25. procedure btnEnableDisableClick(Sender: TObject);
  26. procedure FormDestroy(Sender: TObject);
  27. procedure EmbeddedWB1BeforeNavigate2(ASender: TObject;
  28. const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
  29. Headers: OleVariant; var Cancel: WordBool);
  30. private
  31. { Private declarations }
  32. HubLinksList: TInterfaceList;
  33. FEventsEnabled: Boolean;
  34. HubLink: IHubLink;
  35. procedure DisconnectHtmlListeners;
  36. procedure ConnectHtmlListeners;
  37. procedure ConnectHtmlListener(ASender: TObject; Doc: IHTMLDocument2);
  38. public
  39. { Public declarations }
  40. end;
  41.  
  42. var
  43. Form1: TForm1;
  44.  
  45. implementation
  46.  
  47. {$R *.dfm}
  48.  
  49. procedure TForm1.FormCreate(Sender: TObject);
  50. begin
  51. FEventsEnabled := True;
  52. HubLinksList := TInterfaceList.Create;
  53. EmbeddedWB1.Navigate('www.google.com');
  54. end;
  55.  
  56. procedure TForm1.HtmlListener1HandlersOnClickHandle(Sender: TObject;
  57. Event: IHTMLEventObj);
  58. begin
  59. lblClickedOnElement.Caption := Format('Clicked on Element with Tag: [%s]', [Event.srcElement.tagName])
  60. end;
  61.  
  62. procedure TForm1.HtmlListener1HandlersOnMouseMoveHandle(Sender: TObject;
  63. Event: IHTMLEventObj);
  64. begin
  65. lblElementUndertheMouse.Caption := Format('Element under the Mouse [%s]', [Event.srcElement.tagName])
  66. end;
  67.  
  68. procedure TForm1.DisconnectHtmlListeners;
  69. var
  70. i: Integer;
  71. begin
  72. for i := HubLinksList.Count - downto do
  73. begin
  74. (HubLinksList[i] as IHubLink).Disconnect;
  75. HubLinksList.Remove(HubLinksList[i]);
  76. end;
  77. end;
  78.  
  79. procedure TForm1.ConnectHtmlListener(ASender: TObject; Doc: IHTMLDocument2);
  80. var
  81. CPC: IConnectionPointContainer;
  82. begin
  83. if Assigned(Doc) then
  84. begin
  85. Doc.QueryInterface(IConnectionPointContainer, CPC);
  86. if Assigned(CPC) then
  87. begin
  88. HubLink := HtmlListener1.Connect2(CPC);
  89. HubLinksList.Add(HubLink);
  90. end;
  91. end;
  92. end;
  93.  
  94. procedure TForm1.ConnectHtmlListeners;
  95. var
  96. i: Integer;
  97. WB: IWebbrowser2;
  98. HTMLDoc: IHTMLDocument2;
  99. begin
  100. for i := to EmbeddedWB1.FrameCount - do
  101. begin
  102. WB := EmbeddedWB1.GetFrame(i);
  103. if Assigned(WB) then
  104. begin
  105. if Succeeded(WB.Document.QueryInterface(IHTMLDocument2, HTMLDoc)) then
  106. ConnectHtmlListener(nil, HTMLDoc);
  107. end;
  108. end;
  109. end;
  110.  
  111. procedure TForm1.EmbeddedWB1BeforeNavigate2(ASender: TObject;
  112. const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
  113. Headers: OleVariant; var Cancel: WordBool);
  114. begin
  115. with ASender as TEmbeddedWB do
  116. if pDisp = DefaultInterface then
  117. begin
  118. DisconnectHtmlListeners;
  119. end;
  120. end;
  121.  
  122. procedure TForm1.EmbeddedWB1DocumentComplete(ASender: TObject;
  123. const pDisp: IDispatch; var URL: OleVariant);
  124. var
  125. WB: IWebbrowser;
  126. HTMLDoc: IHTMLDocument2;
  127. begin
  128. if FEventsEnabled then
  129. begin
  130. WB := (pDisp as IWebBrowser);
  131. if Assigned(WB) then
  132. if Succeeded(WB.Document.QueryInterface(IHTMLDocument2, HTMLDoc)) then
  133. ConnectHtmlListener(ASender, HTMLDoc);
  134. end;
  135. end;
  136.  
  137. procedure TForm1.btnEnableDisableClick(Sender: TObject);
  138. begin
  139. if FEventsEnabled then
  140. begin
  141. DisconnectHtmlListeners;
  142. btnEnableDisable.Caption := 'Enable Events';
  143. FEventsEnabled := False;
  144. end else
  145. begin
  146. ConnectHtmlListeners;
  147. btnEnableDisable.Caption := 'Disable Events';
  148. FEventsEnabled := True;
  149. end;
  150. end;
  151.  
  152. procedure TForm1.FormDestroy(Sender: TObject);
  153. begin
  154. DisconnectHtmlListeners;
  155. HubLinksList.Free;
  156. end;
  157.  
  158. 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. jquery 可拖动进度条

    实现这个效果怎么弄呢? <!DOCTYPE html> <html> <head lang="en"> <meta charset=&qu ...

  2. 将商品SKU数据按商品分组,组装成json数据

    需要封装的数据   将这些数据,分组出来,OLGoodsID相同的为一组,然后每个组的OLSKUID,放在一个字段里,变成 [{"OLGoodID":"test06261 ...

  3. works-er

  4. 冒泡排序算法(C#实现)

    简单的冒泡排序算法,代码如下: ] = temp; hasExchangeAction =true; //发生过互换 } } if (!hasExchangeAction) //如果没有发生过互换,则 ...

  5. win10 Administrator

    和Win7/Win8.1一样,Win10的管理员账户Administrator是默认隐藏和关闭的,因为该账户权限极高,被不法分子利用后存在极大风险.但如果你想在某些特殊情况下使用该账户,就需要手动将其 ...

  6. 05_Excel操作_01_简单导入导出

    [Excel组成] 主要由四部分组成: 1.工作簿 每一个Excel文件都可以看成是一个工作簿,当打开一个Excel文件时,相当于打开了一个Excel工作簿. 2.工作表 当打开了Excel工作簿后, ...

  7. RSA安全性问题

    加密:C=Me(mod n) 解密:M=Cd(mod n) 安全性基础: 穷举法攻击: 1.攻击者设计一个M,C=Me(mod n) 2.d的个数至多有n-1个,尝试使用每个d破解,如果M’=Cd‘( ...

  8. 在阿里云服务器ubuntu14.04运行netcore

    从netcore1.0正式发布就很激动,想要赶紧学习. 最近博客园的一篇文章给了完整的指导非常感谢,但是在实际实现到发布到阿里云服务器遇到一些问题,记录下来. 首先上基础文章http://www.cn ...

  9. linux中python环境搭建及升级后yum不可用解决方案

    1.1 LinuxCentOS 为例.1.1.1 升级 Python(1) 下载 Python 版本$ wget https://www.python.org/ftp/python/2.7.11/Py ...

  10. 深度优化LNMP之Nginx (转)

    深度优化LNMP之Nginx Nginx基本安全优化 1.调整参数隐藏Nginx版本号信息     一般来说,软件的漏洞都和版本有关,因此我们应尽量隐藏或清除Web服务队访问的用户显示各类敏感信息(例 ...