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

Обработка событий мыши для TWebBrowser в Delphi: решение проблемы в режиме дизайна

Delphi , Интернет и Сети , Браузер

При работе с компонентом TWebBrowser в Delphi может возникнуть ситуация, когда стандартные события, такие как OnMouseMove, не срабатывают при активации режима дизайна (DesignMode = 'on'). Это может быть связано с тем, что в режиме дизайна веб-браузер переходит в режим редактирования документа, и стандартные события мыши не обрабатываются.

Решение проблемы

Чтобы решить эту проблему, необходимо перехватить событие OnMouseOver для элементов веб-страницы, так как именно это событие срабатывает в режиме дизайна. Ниже приведен пример кода на Object Pascal, который демонстрирует, как это можно сделать:

procedure TForm1.DesignMode1Click(Sender: TObject);
begin
  // Проверка, что веб-браузер уже загружен
  if Assigned(WebBrowser1) then
  begin
    // Получение интерфейса IHTMLDocument2
    if Assigned(htmlDoc) then
    begin
      // Установка режима дизайна
      if DesignMode1.Checked then
        htmlDoc.DesignMode := 'On'
      else
        htmlDoc.DesignMode := 'Off';

      // Ожидание полной загрузки документа
      while WebBrowser1.ReadyState < READYSTATE_COMPLETE do
        Application.ProcessMessages;

      // Освобождение предыдущего "экземпляра документа"
      htmlDoc := nil;

      // Получение нового "экземпляра документа" и назначение обработчика события
      htmlDoc := WebBrowser1.Document as IHTMLDocument2;
      htmlDoc.OnMouseOver := TEventObject.Create(Document_OnMouseOver) as IDispatch;
    end;
  end;
end;

procedure TForm1.Document_OnMouseOver;
var
  element: IHTMLElement;
begin
  // Проверка, что документ загружен
  if htmlDoc = nil then
    Exit;

  // Получение элемента, над которым произведено наведение
  element := htmlDoc.parentWindow.event.srcElement;

  // Обработка элемента (например, получение URL для гиперссылок)
  // ...
end;

Класс TEventObject

Для обработки событий используется класс TEventObject, который позволяет привязать метод Delphi к событию JavaScript. Ниже приведен его код:

constructor TEventObject.Create(const OnEvent: TObjectProcedure);
begin
  inherited Create;
  FOnEvent := OnEvent;
end;

function TEventObject.GetIDsOfNames(const IID: TGUID; Names: Pointer; NameCount, LocaleID: Integer;
  DispIDs: Pointer): HResult;
begin
  Result := E_NOTIMPL;
end;

function TEventObject.GetTypeInfo(Index, LocaleID: Integer; out TypeInfo): HResult;
begin
  Result := E_NOTIMPL;
end;

function TEventObject.GetTypeInfoCount(out Count: Integer): HResult;
begin
  Result := E_NOTIMPL;
end;

function TEventObject.Invoke(DispID: Integer; const IID: TGUID; LocaleID: Integer; Flags: Word; var Params;
  VarResult, ExcepInfo, ArgErr: Pointer): HResult;
begin
  if (DispID = DISPID_VALUE) then
  begin
    if Assigned(FOnEvent) then
      FOnEvent;
    Result := S_OK;
  end
  else
    Result := E_NOTIMPL;
end;

Заключение

Приведенный код позволяет обрабатывать события мыши в режиме дизайна для компонента TWebBrowser в Delphi. Обратите внимание, что код должен быть адаптирован под конкретные нужды и условия работы вашего приложения.

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

При работе с компонентом `TWebBrowser` в Delphi в режиме дизайна необходимо перехватить событие `OnMouseOver` элементов веб-страницы для их обработки.


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

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




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


:: Главная :: Браузер ::


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-02-20 22:53:45/0.0035719871520996/0