如何使用像Internet Explorer一样的ctrl + mousewheel进行TWebBrowser缩放?

jas*_*nny 10 delphi delphi-2007 iwebbrowser2 twebbrowser

根据

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

获得托管web浏览器缩放使用控制键和鼠标滚轮应该只需要调用IWebBrowser2.ExecWB(OLECMDID_OPTICAL_ZOOM, ...)具有pvaIn的价值100,
但调用它后,按ctrl +鼠标滚轮仍然不缩放内容

代码我正在使用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;
Run Code Online (Sandbox Code Playgroud)

Ces*_*ero 7

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;
Run Code Online (Sandbox Code Playgroud)


Ian*_*oyd 4

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

Making the Web Bigger: DPI Scaling and Internet Explorer 8

Opt-In to High DPI Behavior for Web Browser Controls (WebOCs)

In order to preserve compatibility with previously developed WebOCs, by default Internet Explorer 8 does not render the web content of WebOCs using the Internet Explorer 8 High DPI behavior, but rather uses the Internet Explorer 7 behavior, which scales up fonts specified in absolute values, such as points. To take advantage of the Internet Explorer 8 High DPI behavior in your programs, you need to use a DOCHOSTUIFLAG called DOCHOSTUIFLAG_DPI_AWARE. You use this flag by using the method GetHostInfo, which has a DOCHOSTUIINFO structure as one of its parameters. In turn, DOCHOSTUIINFO has a operator DWORD called dwFlags as one of its members, that can consist of one or more DOCHOSTUIFLAG values. You must include DOCHOSTUIFLAG_DPI_AWARE in dwFlags in order to take advantage of the Internet Explorer 8 High DPI behavior in your WebOC.

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

  • 你有一个有效的样本吗?将 `pInfo.dwFlags := pInfo.dwFlags or {DOCHOSTUIFLAG_DPI_AWARE} $40000000;` 添加到 TEmbeddedWB.GetHostInfo 不会启用 ctrl+鼠标滚轮缩放 (2认同)