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

Использование компонента `TWebBrowser` в RAD Studio Rio с поддержкой High DPI: автоматический масштаб и решение проблемы с масштабированием

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

Использование компонента TWebBrowser в RAD Studio Rio с поддержкой High DPI: автоматический масштаб и решение проблемы с масштабированием

Разработка приложений с поддержкой высокого разрешения (High DPI) становится все более актуальной, поскольку современные устройства часто имеют высокое разрешение экрана. В RAD Studio Rio поддержка High DPI включена по умолчанию для большинства компонентов VCL, но компонент TWebBrowser требует дополнительной настройки для корректной работы с высоким разрешением.

Проблема

Пользователи RAD Studio Rio сталкиваются с проблемой, когда интерфейс и компоненты приложения корректно масштабируются при перемещении между дисплеями с разным разрешением, но содержимое TWebBrowser остается неизменным. Это связано с тем, что TWebBrowser обертка над Internet Explorer, и его масштабирование управляется отдельно от VCL компонентов.

Решение

Для решения проблемы с масштабированием содержимого TWebBrowser в приложениях, созданных с использованием RAD Studio Rio, можно использовать два подхода:

Способ 1: Настройка через реестр Windows

Можно включить поддержку FEATURE_96DPI_PIXEL для вашего приложения через реестр. Для этого необходимо создать функцию, которая будет изменять значение в реестре:

procedure EnableDpiAwareness;
var
  Reg: TRegistry;
  App: string;
begin
  Reg := TRegistry.Create;
  try
    App := ExtractFileName(Application.ExeName);
    Reg.RootKey := HKEY_CURRENT_USER;

    if Reg.OpenKey('Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_96DPI_PIXEL', True) then
    begin
      Reg.WriteInteger(App, 1);
      Reg.CloseKey;
    end;
  finally;
    Reg.Free;
  end;
end;

Способ 2: Реализация класса IDocHostUIHandler

Создать класс-потомок TWebBrowser, который реализует интерфейс IDocHostUIHandler. В этом классе необходимо переопределить функцию GetHostInfo, добавив флаг DOCHOSTUIFLAG_DPI_AWARE:

unit DpiAwareWebBrowser;

interface

uses
  Winapi.Mshtmhst,
  SHDocVw;

type
  TDpiAwareWebBrowser = class(TWebBrowser, IDocHostUIHandler)
    strict private
      // IDocHostUIHandler "override"
      function GetHostInfo(var pInfo: TDocHostUIInfo): HRESULT; stdcall;
  end;

implementation

const
  DOCHOSTUIFLAG_DPI_AWARE = $40000000;

function TDpiAwareWebBrowser.GetHostInfo(var pInfo: TDocHostUIInfo): HRESULT;
begin
  // оригинальный код из TWebBrowser.GetHostInfo
  pInfo.cbSize := SizeOf(pInfo);
  pInfo.dwFlags := 0;
  pInfo.dwFlags := pInfo.dwFlags or DOCHOSTUIFLAG_NO3DBORDER;
  pInfo.dwFlags := pInfo.dwFlags or DOCHOSTUIFLAG_THEME;
  pInfo.dwFlags := pInfo.dwFlags or DOCHOSTUIFLAG_DPI_AWARE; // новый добавленный флаг
  Result := S_OK;
  // ResizeScrollBars; // будет вызвано последующими рутинами в любом случае.
end;

end.

Оба способа позволяют TWebBrowser автоматически масштабироваться в соответствии с разрешением экрана.

Заключение

Для обеспечения корректной работы TWebBrowser в приложениях с поддержкой High DPI, необходимо использовать один из предложенных методов. Это позволит содержимому TWebBrowser масштабироваться автоматически при перемещении приложения между дисплеями с различным разрешением.

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

Разработчики RAD Studio Rio сталкиваются с необходимостью настройки компонента `TWebBrowser` для автоматического масштабирования и корректной работы с высоким разрешением экрана.


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

Получайте свежие новости и обновления по 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:55:37/0.0036158561706543/0