Вы должны прикрепить обработчик событий к каждому интересующему элементу. Если вас интересуют все элементы, то вам нужно пройти через все элементы:
var
All: IHTMLElementCollection;
Element2: IHTMLElement2;
i: Integer;
begin
Handler:= TEventObject.Create(Self.EventHandler);
All:=(WebBrowser1.ControlInterface.Document as IHTMLDocument2).All;
for i:=0 to All.Length-1 do
begin
Element2:=All.item(i,EmptyParam) as IHTMLElement2;
Element2.AttachEvent('onmouseenter', Handler);
end;
end;
Таким образом, в идеальном мире вы бы прикрепили обработчик после получения DocumentComplete
для интересующего вас документа и снова отсоединились в BeforeNavigate
.
Может быть несколько проблем, хотя вы должны знать:
- документ может никогда не закончить загрузку (это часто вызывается фреймами, содержащими рекламу, когда какой-либо рекламный сервер не обслуживает, поэтому фрейм предотвращает запуск основного документа
DocumentComplete
), таким образом, ваши обработчики событий никогда не будут присоединены
- Сценарии могут изменить страницу и добавить элементы, к которым затем не будет подключен обработчик событий
- вам нужно вручную зайти в
FRAMEs
/ IFRAMEs
и прикрепить туда обработчики
Я также хотел бы, чтобы это было так же просто, как ваш подход. Это избавило бы нас от многих хлопот.