2009-12-02 199 views
1

我使用这个代码从一个的IHTMLDocument2所有环节:如何在Delphi中将事件附加到IHTMLDocument2链接元素?

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做一个简单的任务像显示与锚文本的警报时,链接被点击?

回答

3

我不会建议使用onXXX处理者(如onClick),因为这将取代任何先前附加的处理程序。这实际上可以改变/销毁页面的行为。如果你是一个网页,这是不是你的控制下工作,你最好使用的attachEvent

(tmp as IHTMLElement2).attachEvent('onclick', callbackProcedureDisp); 

而且不要忘了detachEvent拆下:

(tmp as IHTMLElement2).detachEvent('onclick', callbackProcedureDisp); 

注意:它可以多次连接相同的处理程序。在这种情况下,你的处理程序也会被多次调用。

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

+0

很好的答案!可能还没有收到任何赞扬,因为它迟到了.. – 2010-10-23 09:53:30

相关问题