首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Delphi中将事件附加到IHTMLDocument2链接元素?

如何在Delphi中将事件附加到IHTMLDocument2链接元素?
EN

Stack Overflow用户
提问于 2009-12-02 10:26:25
回答 2查看 5.4K关注 0票数 1

我使用以下代码从IHTMLDocument2获取所有链接:

代码语言:javascript
复制
procedure DoDocumentComplete(const pDisp: IDispatch; var URL: OleVariant);
var
  Document:IHTMLDocument2;
  Body:IHTMLElement;
  Links:IHTMLElementCollection;
  i:integer;
  tmp:IHTMLElement;
begin
  try
  Document := (pDisp as  IWebbrowser2).Document AS IHTMLDocument2;
  Body := Document.body;
  Links := Document.links;
  for i := 0 to (Links.length-1) do
    begin
      tmp := (Links.item(i, 0) as IHTMLElement);
      //tmp.onclick := HOW SHOULD I ADD THE CALLBACK HERE?
      //ShowMessage(tmp.innerText);
    end;
  except
    on E : Exception do
      ShowMessage(E.ClassName+' error raised, with message : '+E.Message);
  end;
end;

如何将函数/过程附加到.onclick以执行简单的任务,如在单击链接时显示带有锚点文本的警报?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-12-02 12:04:14

一种方法是使用实现IDispatch的对象(如http://groups.google.com/group/borland.public.delphi.oleautomation/msg/a57d99e0e52c78ce)接收来自TWebBrowser的事件

您将设置

代码语言:javascript
复制
tmp.onclick := TEventObject.Create(callbackProcedure) as IDispatch;
票数 4
EN

Stack Overflow用户

发布于 2010-03-30 03:08:35

我不建议直接使用onXXX- handler (如onClick),因为这将替换以前附加的任何处理程序。这实际上会改变/破坏页面的行为。如果您使用的网页不受您的控制,则最好使用attachEvent

代码语言:javascript
复制
(tmp as IHTMLElement2).attachEvent('onclick', callbackProcedureDisp);

请不要忘记与detachEvent分离

代码语言:javascript
复制
(tmp as IHTMLElement2).detachEvent('onclick', callbackProcedureDisp);

注意:可以多次附加相同的处理程序。在这种情况下,您的处理程序也会被多次调用。

如果您只对onclick感兴趣,那么您可以只向根元素添加一个处理程序,而不必遍历所有元素。MSDN声明事件气泡,因此您只需将一个事件处理程序附加到文档元素,并在每次触发事件时检查IHTMLEventObj的srcElement成员。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1830289

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档