Как сделать TWebBrowser Zoom при использовании ctrl + mousewheel, например Internet Explorer?

Согласно

http://www.rendelmann.info/blog/CommentView,guid,356fbe68-3ed6-4781-90a4-57070a0141da.aspx и http://msdn.microsoft.com/en-us/library/aa770056(v=vs.85).aspx

получение размещенного веб-браузера для увеличения с помощью управляющего ключа, и колесо мыши должно просто потребовать вызова IWebBrowser2.ExecWB(OLECMDID_OPTICAL_ZOOM, ...) с pvaIn значением 100,
но после его вызова ctrl + mousewheel по-прежнему не увеличивает содержание

Код, который я использую с Delphi 2007:

const
  OLECMDID_OPTICAL_ZOOM = 63;
var
  pvaIn, pvaOut: OleVariant;
begin
  pvaIn := 100;
  pvaOut := NULL;
  WebBrowser1.ControlInterface.ExecWB(OLECMDID_OPTICAL_ZOOM,
    OLECMDEXECOPT_DONTPROMPTUSER, pvaIn, pvaOut);
end;

Ответ 1

jasonpenny,

100 является значением по умолчанию, если вы хотите изменить масштаб, вы должны увеличить или уменьшить это значение от 10 до 1000.

Я написал тест и вот код:

type
  TFormWebBrowserZoom = class(TForm)
    WebBrowser1: TWebBrowser;
    procedure FormMouseWheelDown(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean);
    procedure FormMouseWheelUp(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean);
    procedure FormShow(Sender: TObject);
  private
    FZoom: Integer;
    FLastZoom: Integer; 

    procedure ApplyZoom(ZoomValue: Integer);
    procedure DecZoom;
    procedure IncZoom;
  end;

implementation

const
  OLECMDID_OPTICAL_ZOOM = $0000003F;
  MinZoom = 10;
  MaxZoom = 1000;
  ZoomFactor = 20;
  DefaultZoom = 100;

procedure TFormWebBrowserZoom.FormShow(Sender: TObject);
begin
  WebBrowser1.Navigate('http://www.cesarromero.com.br');
  FZoom := DefaultZoom;
  FLastZoom := DefaultZoom;
end;

procedure TFormWebBrowserZoom.ApplyZoom(ZoomValue: Integer);
var
  pvaIn, pvaOut: OleVariant;
begin
  if ZoomValue = FLastZoom then
    Exit;
  FLastZoom := ZoomValue;
  pvaIn := ZoomValue;
  pvaOut := Null;
  WebBrowser1.ControlInterface.ExecWB(OLECMDID_OPTICAL_ZOOM, OLECMDEXECOPT_DONTPROMPTUSER, pvaIn, pvaOut);
end;

procedure TFormWebBrowserZoom.DecZoom;
begin
  System.Dec(FZoom, ZoomFactor);
  if FZoom < MinZoom then
    FZoom := MinZoom;
  ApplyZoom(FZoom);
end;

procedure TFormWebBrowserZoom.IncZoom;
begin
  System.Inc(FZoom, ZoomFactor);
  if FZoom > MaxZoom then
    FZoom := MaxZoom;
  ApplyZoom(FZoom);
end;

procedure TFormWebBrowserZoom.FormMouseWheelDown(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean);
begin
  DecZoom;
end;

procedure TFormWebBrowserZoom.FormMouseWheelUp(Sender: TObject; Shift: TShiftState; MousePos: TPoint; var Handled: Boolean);
begin
  IncZoom;
end;

Ответ 2

От http://msdn.microsoft.com/en-us/library/cc849094 (v = vs .85).aspx # OptInHighDPI:

Создание веб-большего: масштабирование DPI и Internet Explorer 8

Отказ от входа в режим высокого уровня DPI для элементов управления веб-браузера (WebOCs)

Чтобы сохранить совместимость с ранее разработанными WebOC, по умолчанию Internet Explorer 8 не отображает веб-контент WebOC, используя поведение Internet Explorer 8 High DPI, а использует поведение Internet Explorer 7, которое масштабирует шрифты, указанные в абсолютные значения, такие как точки. Чтобы воспользоваться преимуществами поведения Internet Explorer 8 High DPI в ваших программах, вам необходимо использовать DOCHOSTUIFLAG под названием DOCHOSTUIFLAG_DPI_AWARE. Вы используете этот флаг, используя метод GetHostInfo, который имеет DOCHOSTUIINFO как один из его параметров. В свою очередь, DOCHOSTUIINFO имеет оператор DWORD, называемый dwFlags как один из его членов, который может состоять из одного или больше DOCHOSTUIFLAG. Вы должны включить DOCHOSTUIFLAG_DPI_AWARE в dwFlags, чтобы использовать поведение Internet Explorer 8 High DPI в вашем WebOC.

Быстрый и простой способ моделирования того, как будет отображаться HTML-контент ваших WebOCs, - в поведение High -DPI - открыть эквивалентный HTML-контент (составленный в HTML файле) в Internet Explorer 8 и просто проверьте рендеринг при эквивалентных настройках масштабирования (от 120 до 110% масштабирования, от 144 до 150%). Мы рекомендуем вам протестировать WebOC в реальных сценариях с высоким уровнем DPI, чтобы полностью убедиться, что HTML-контент отображается, как вы надеялись.