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

时间:2012-04-20 16:28:13

标签: delphi delphi-2007 twebbrowser iwebbrowser2

根据

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的{​​{1}}, 但在调用它之后,ctrl + mousewheel仍然不会缩放内容

Code I我正在使用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;

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:4)

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

  

Making the Web Bigger: DPI Scaling and Internet Explorer 8

     

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

     

为了保持与以前开发的WebOC的兼容性,默认情况下,Internet Explorer 8不会使用Internet Explorer 8高DPI行为呈现WebOC的Web内容,而是使用Internet Explorer 7行为,该行为会扩展指定的字体。绝对值,如点。要在程序中利用Internet Explorer 8 High DPI行为,您需要使用名为DOCHOSTUIFLAG_DPI_AWARE的{​​{3}}。您可以使用方法DOCHOSTUIFLAG来使用此标志,该方法具有GetHostInfo结构作为其参数之一。反过来, DOCHOSTUIINFO 有一个名为dwFlags的{​​{3}}作为其成员之一,可以包含一个或多个 DOCHOSTUIFLAG 值。您必须在 dwFlags 中加入DOCHOSTUIFLAG_DPI_AWARE,才能利用WebOC中的Internet Explorer 8高DPI行为。

     

在Internet Explorer 8中打开等效的HTML内容(由HTML文件组成),简单快速简便地模拟WebOC的HTML内容在出现在High-DPI行为后将如何显示以相同的缩放设置(120 DPI至125%变焦,144 DPI至150%变焦)检查渲染。我们建议您在实际的高DPI场景中测试WebOC,以完全确定HTML内容是否按照您的意愿呈现。