Delphi 如何在使用ctrl+;像Internet Explorer那样的鼠标滚轮?

Delphi 如何在使用ctrl+;像Internet Explorer那样的鼠标滚轮?,delphi,delphi-2007,twebbrowser,iwebbrowser2,Delphi,Delphi 2007,Twebbrowser,Iwebbrowser2,据 及 要使用控制键和鼠标滚轮使托管的WebBrowser进行缩放,只需调用IWebBrowser2.ExecWB(OLECMDID\u OPTICAL\u zoom,…),并使用pvaIn值100, 但是在调用它之后,ctrl+mousewheel仍然不会缩放内容 我在Delphi 2007中使用的代码: const OLECMDID_OPTICAL_ZOOM = 63; var pvaIn, pvaOut: OleVariant; begin pvaIn := 100; pv

要使用控制键和鼠标滚轮使托管的WebBrowser进行缩放,只需调用
IWebBrowser2.ExecWB(OLECMDID\u OPTICAL\u 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;
发件人:

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

为了保持与以前开发的WebOCs的兼容性,默认情况下,Internet Explorer 8不会使用Internet Explorer 8高DPI行为呈现WebOCs的web内容,而是使用Internet Explorer 7行为,该行为会放大以绝对值(如点)指定的字体。要在程序中利用Internet Explorer 8的高DPI行为,您需要使用名为
DOCHOSTUIFLAG\u DPI\u AWARE的
。您可以通过使用方法来使用此标志,方法的参数之一是结构。反过来,DOCHOSTUIINFO有一个名为
dwFlags
的成员,它可以由一个或多个DOCHOSTUIFLAG值组成。您必须在dwFlags中包含
DOCHOSTUIFLAG\u DPI\u AWARE
,以便在您的WebOC中利用Internet Explorer 8高DPI行为

一旦选择了高DPI行为,模拟WebOCs的HTML内容将如何显示的快速简便方法是在InternetExplorer8中打开等效的HTML内容(由HTML文件组成),只需在等效的缩放设置(120 DPI到125%缩放,144 DPI到150%缩放)下查看渲染。我们建议您在实际的高DPI场景中测试WebOC,以完全确保HTML内容按照您希望的方式呈现

贾森彭妮

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;
类型
TFormWebBrowserZoom=类(TForm)
WebBrowser1:TwebbBrowser;
MouseWheelDown过程(发送方:ToObject;Shift:TShiftState;鼠标点:TPoint;处理变量:布尔值);
MouseWheelUp过程(发送方:ToObject;Shift:TShiftState;鼠标点:TPoint;处理变量:Boolean);
程序表单显示(发送方:TObject);
私有的
FZoom:整数;
FLastZoom:整数;
过程ApplyZoom(ZoomValue:Integer);
程序缩放;
程序放大;
结束;
实施
常数
光学变焦=0000003F;
MinZoom=10;
MaxZoom=1000;
动物因子=20;
默认缩放=100;
过程TFormWebBrowserZoom.FormShow(发送方:ToObject);
开始
WebBrowser1.导航('http://www.cesarromero.com.br');
FZoom:=默认缩放;
FLastZoom:=默认缩放;
结束;
过程TFormWebBrowserZoom.ApplyZoom(ZoomValue:Integer);
变量
pvaIn,pvaOut:油变异体;
开始
如果ZoomValue=FLastZoom,则
出口
FLastZoom:=缩放值;
pvaIn:=动物值;
pvaOut:=Null;
WebBrowser1.ControlInterface.ExecWB(OLECMDID_OPTICAL_ZOOM,OLECMDEXECOPT_DontComputser,pvaIn,pvaOut);
结束;
程序TFormWebBrowserZoom.DecZoom;
开始
System.Dec(FZoom,ZoomFactor);
如果FZoom<最小缩放,则
FZoom:=最小缩放;
ApplyZoom(FZoom);
结束;
程序TFormWebBrowserZoom.IncZoom;
开始
System.Inc(FZoom、ZoomFactor);
如果FZoom>MaxZoom,则
FZoom:=最大缩放;
ApplyZoom(FZoom);
结束;
过程TFormWebBrowserZoom.FormMouseWheelDown(发送方:ToObject;Shift:TShiftState;鼠标点:TPoint;变量处理:布尔值);
开始
DecZoom;
结束;
过程TFormWebBrowserZoom.FormMouseWheelUp(发送方:ToObject;Shift:TShiftState;鼠标点:TPoint;变量处理:Boolean);
开始
放大;
结束;

您有有效的样本吗?添加
pInfo.dwFlags:=pInfo.dwFlags或{DOCHOSTUIFLAG_DPI_AWARE}$40000000
to TEmbeddedWB.GetHostInfo不会启用ctrl+mousewheel缩放半个主题注释。你试过TEmbeddedWB看看是否有用吗?@jasonpenny:100是默认大小(100%),你试过更大的值,比如120或200吗?我试过TEmbeddedWB,它不起作用,即使使用了DOCHOSTUIFLAG_DPI_AWARE,问题是MSDN表示控件将在设置为
100
后,使用
CTRL+鼠标滚轮向前/向后
自动处理缩放;显式地将缩放设置为100以外的值确实会显示缩放的页面内容。@jasonpenny我不确定Delphi 2007中的情况如何,但在Delphi 7中,鼠标滚轮事件并不总是发送到控件。我猜问题中的代码不在鼠标滚轮事件中。我所理解的是,问题是为什么在呼叫后,webbrowser自动不调整缩放。@Sertac Akyuz:没错,我刚刚发布了工作代码,请检查我是否更改了pvaIn:=200的值;Cesar上面的代码没有编译,看他如何拥有相同的过程TFormWebBrowserZoom.DecZoom;宣布两次@user1527613:这是一个简单的打字错误,阅读代码清楚地表明第二个
DecZoom
应该是
IncZoom
。我进行了编辑以解决该问题,并将
const
声明从表单类型声明中移出,并将它们标记为属于
implementation
部分,而不是针对较旧的Delphi版本。