delphi - 如何让TWebBrowser像Internet Explorer一样使用ctrl+鼠标滚轮缩放?

标签 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
但调用后,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;

最佳答案

杰森彭尼,

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;

关于delphi - 如何让TWebBrowser像Internet Explorer一样使用ctrl+鼠标滚轮缩放?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10249959/

相关文章:

delphi - 如何使用 Indy TIdTCPClient 实例从 Web 服务器检索完整的 HTTP 响应,包括响应主体?

delphi - 为什么编译器提示行前面有 [DCC 警告]?

Delphi MSBuild 从命令行构建配置

delphi - 模拟键盘输入

delphi - TChromium 中的默认界面缺失

delphi - XE2 和 Delphi 2009 之间的 unicode 文本文件输出不同吗?

windows - 在 Delphi 中下载文件

html - 加载到 TWebBrowser 中的 html 文档的总高度

delphi - 检查查询是否返回比您创建查询并定义其持久字段时更多的字段

delphi - 为什么抑制WM_PASTE后数据集的状态变为dsEdit?