添付する方法をイベントIHTMLDocument2リンクの要素のイン?
-
11-09-2019 - |
質問
を使用しているこのコードを全て取得しますリンクから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な単純なタスクのように示すアラートのアンカーテキストのリンクをクリック?
解決
一方では流イベントからのTWebBrowserオブジェクトを実装するIDispatch( http://groups.google.com/group/borland.public.delphi.oleautomation/msg/a57d99e0e52c78ce)
ように設定
tmp.onclick := TEventObject.Create(callbackProcedure) as IDispatch;
他のヒント
私は、これはどのpreviouly添付ハンドラを置き換えます直接として(onClickのような)XXXの-ハンドラを使用してお勧めしません。これは実際に破壊する/ページの動作を変更することができます。あなたがあなたのコントロール下にないWebページで作業している場合は、より良い使いの attachEvent の
(tmp as IHTMLElement2).attachEvent('onclick', callbackProcedureDisp);
とをdetachEvent のと切り離すことを忘れないでください。
(tmp as IHTMLElement2).detachEvent('onclick', callbackProcedureDisp);
ご注意:それは同じハンドラを複数回取り付けることが可能です。この場合、あなたのハンドラは、複数回呼び出されます。
あなたにのみ関心がある場合は、のonclickあなただけのルート要素に1つのハンドラを追加することができ、すべての要素を通って移動する必要はありません。 、あなたので、ちょうどたびにイベントが発生する文書要素に一つのイベントハンドラをアタッチし、IHTMLEventObjのsrcElementメンバーをチェックすることができます。
所属していません StackOverflow