Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Устранение проблемы с событием `onmouseenter` в `TWebBrowser` в Internet Explorer 9

Delphi , Интернет и Сети , Компоненты и Интернет

Устранение проблемы с событием onmouseenter в TWebBrowser для Internet Explorer 9

Иногда разработчики сталкиваются с трудностями при работе с компонентом TWebBrowser в среде Delphi, особенно когда дело касается событий, связанных с пользовательскими действиями, такими как перемещение курсора мыши. В данной статье мы рассмотрим, как можно решить проблему с невызовом события onmouseenter в TWebBrowser для браузера Internet Explorer 9.

Описание проблемы

Пользователь столкнулся с ситуацией, когда событие onmouseenter не вызывается в компоненте TWebBrowser при использовании Internet Explorer 9. Несмотря на то что событие onmousemove успешно обрабатывается, onmouseenter остается неактивным. В коде, предоставленном пользователем, создается объект TEventObject для обработки события, но оно так и не происходит.

var
  D3: IHTMLDocument3;
begin
  if Supports(WebBrowser1.Document, IHTMLDocument3, D3) then
  begin
    eo1 := TEventObject.Create(self.EventHadler);
    D3.attachEvent('onmouseenter', eo1);
  end;
end;

Альтернативный ответ

В комментариях к вопросу предложено использовать компонент TEmbeddedWB от www.bsalsa.com, который может быть более функциональным и удобным для работы с событиями.

Также было замечено, что событие ommouseenter не образует "пузырька", то есть оно не будет вызвано, если курсор мыши перемещается над дочерними элементами объекта, к которому привязано событие. Это означает, что необходимо привязывать обработчик событий к каждому интересующему элементу.

Подтвержденный ответ

Для решения проблемы необходимо привязать обработчик событий ко всем интересующим элементам. Если требуется обработать события для всех элементов, следует пройти по списку всех элементов и привязать к каждому из них обработчик событий:

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.

Важные моменты, о которых следует помнить:

  • Документ может не завершить загрузку, что приведет к тому, что обработчики событий не будут привязаны (например, из-за фреймов с рекламой).
  • Скрипты могут модифицировать страницу, добавляя новые элементы, к которым не будет привязан обработчик событий.
  • Необходимо вручную обработать FRAMEs и IFRAMEs.

Альтернативное решение

Согласно информации с MSDN, onmouseenter не образует "пузырька", но можно использовать событие onmouseover, которое также будет вызываться, когда курсор мыши перемещается над объектом, и не будет повторяться, пока курсор находится вне объекта.

Пример кода на Object Pascal для обработки события onmouseover:

procedure MyEvent;
var
  Doc: OleVariant;
begin
  Doc := Form1.WebBrowser1.Document;
  Form1.Label1.Caption := Doc.parentWindow.event.srcElement.outerHTML;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  D3: IHTMLDocument3;
begin
  if Supports(WebBrowser1.Document, IHTMLDocument3, D3) then
    D3.attachEvent('onmouseover', TEventObject.Create(MyEvent) as IDispatch);
end;

Используя данный подход, можно успешно обработать события, связанные с перемещением курсора мыши над элементами в TWebBrowser, даже при использовании Internet Explorer 9.

Создано по материалам из источника по ссылке.

Разработчик столкнулся с проблемой невызова события `onmouseenter` в компоненте `TWebBrowser` для Internet Explorer 9 и нашел решение в привязке обработчика ко всем интересующим элементам после получения события `DocumentComplete`.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Компоненты и Интернет ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-02-05 06:51:08/0.011417865753174/0