11

根据

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

使用控制键和鼠标滚轮让托管的 WebBrowser 进行缩放应该只需要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;
4

2 回答 2

8

杰森便士,

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;
于 2012-08-02T18:44:40.193 回答
4

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

让网络变得更大:DPI 缩放和 Internet Explorer 8

选择加入 Web 浏览器控件 (WebOC) 的高 DPI 行为

为了保持与以前开发的 WebOC 的兼容性,默认情况下,Internet Explorer 8 不使用 Internet Explorer 8 高 DPI 行为呈现 WebOC 的 Web 内容,而是使用 Internet Explorer 7 行为,该行为以绝对值来放大指定的字体,比如积分。要在您的程序中利用 Internet Explorer 8 高 DPI 行为,您需要使用名为DOCHOSTUIFLAG_DPI_AWARE. 您可以通过使用方法GetHostInfo来使用此标志,该方法具有DOCHOSTUIINFO结构作为其参数之一。反过来,DOCHOSTUIINFO有一个称为DWORD 的运算符dwFlags作为其成员之一,它可以由一个或多个DOCHOSTUIFLAG组成价值观。您必须包含DOCHOSTUIFLAG_DPI_AWAREdwFlags中才能在您的 WebOC 中利用 Internet Explorer 8 高 DPI 行为。

选择加入高 DPI 行为后,模拟 WebOC 的 HTML 内容将如何显示的快速简单的方法是在 Internet Explorer 8 中打开等效的 HTML 内容(组成在 HTML 文件中),然后只需检查以等效缩放设置(120 DPI 到 125% 缩放,144 DPI 到 150% 缩放)渲染。我们建议您在实际的高 DPI 场景中测试 WebOC,以完全确保 HTML 内容按您希望的方式呈现。

于 2012-05-08T20:28:39.223 回答