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

Адаптация кастомной реализации `IDocHostUIHandler` для `TWebBrowser` в Delphi 10.0 Seattle

Delphi , Технологии , OLE

Адаптация кастомной реализации IDocHostUIHandler для TWebBrowser в Delphi 10.0 Seattle

С появлением Delphi 10.0 Seattle, компания Embarcadero обновила реализацию компонента TWebBrowser. В предыдущих версиях Delphi, TWebBrowser был классом, наследуемым от TOleControl, но начиная с Seattle, TWebBrowser также наследует интерфейсы IDocHostUIHandler, IDocHostShowUI, IOleCommandTarget. Это изменение затронуло разработчиков, которые использовали собственные реализации интерфейса IDocHostUIHandler для управления поведением TWebBrowser.

Проблема

Разработчики, использовавшие старую версию TWebBrowser, столкнулись с проблемой, поскольку новый TWebBrowser теперь включает в себя реализацию IDocHostUIHandler, что делает невозможным использование их кастомных реализаций, ранее регистрируемых как клиентские сайты/хосты. Это связано с тем, что новый TWebBrowser скрывает свои реализации этих интерфейсов и не предназначен для наследования.

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

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

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

Разработчикам, столкнувшимся с проблемой, предлагается следующий подход к решению:

Вы можете создать класс, наследующийся от TWebBrowser и предоставляющий свою реализацию интерфейса IDocHostUIHandler. Это можно сделать следующим образом:

Type
  TMyWebBrowser = class( TWebBrowser, IDocHostUIHandler )
  // Определение дополнительных методов класса
  end;

Важно: вы должны предоставить реализации всех функций интерфейса IDocHostUIHandler, которые уже должны быть у вас, поскольку вы ранее реализовывали этот интерфейс.

Пример кода

Type
  TMyWebBrowser = class( TWebBrowser )
  private
    { Члены }
    function QueryInterface(const IID: TGUID; out Obj): HResult; stdcall;
    function GetInterface(const IID: TGUID): Pointer;
    procedure Initialize; override;
  public
    { Члены, реализующие методы IDocHostUIHandler }
    function ShowContextMenu(in ActiveObject: Pointer; in pptpt: TPoint; in pcmdTarget: Pointer; var ShowUI: Boolean): HResult; stdcall;
    // Здесь следует определить остальные методы интерфейса
  end;

procedure TMyWebBrowser.Initialize;
begin
  inherited;
  // Регистрация вашего класса как реализации IDocHostUIHandler
  // Можно использовать CoCreateInstance для создания и регистрации объекта
end;

Этот подход позволяет вам продолжить использование вашей кастомной реализации IDocHostUIHandler, не вступая в конфликт с реализацией, предоставляемой новым TWebBrowser.

Заключение

С обновлением TWebBrowser в Delphi 10.0 Seattle, разработчикам необходимо пересмотреть свой код и адаптировать его для работы с новым поведением компонента. Приведенный выше пример кода демонстрирует, как можно сохранить кастомную реализацию IDocHostUIHandler, наследуя TWebBrowser и предоставляя свою реализацию необходимых методов. Это позволит продолжить использование функционала, ранее разработанного для старых версий Delphi, в новых версиях среды разработки.

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

С изменением реализации компонента `TWebBrowser` в Delphi 10.0 Seattle, разработчикам необходимо адаптировать свои кастомные реализации интерфейса `IDocHostUIHandler` для их дальнейшей совместимости с новым поведением компонента.


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

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




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


:: Главная :: OLE ::


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-01-13 21:58:49/0.012289047241211/0