Delphi 如何在使用ctrl+;像Internet Explorer那样的鼠标滚轮?
据 及 要使用控制键和鼠标滚轮使托管的WebBrowser进行缩放,只需调用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
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版本。