根据
http://www.rendelmann.info/blog/CommentView,guid,356fbe68-3ed6-4781-90a4-57070a0141da.aspx 和 http://msdn.microsoft.com/en-us/library/aa770056(v=vs.85).aspx
让托管的 Web 浏览器使用控制键和鼠标滚轮进行缩放应该只需要调用pvaIn
值为 100
的IWebBrowser2.ExecWB(OLECMDID_OPTICAL_ZOOM, ...)
,
但是调用它后,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;
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;
From http://msdn.microsoft.com/en-us/library/cc849094(v=vs.85).aspx#OptInHighDPI:
让 Web 变得更大:DPI 缩放和 Internet Explorer 8
选择 Web 浏览器控件 (WebOC) 的高 DPI 行为
为了保持与以前开发的 WebOC 的兼容性,默认情况下,Internet Explorer 8 不会使用 Internet Explorer 8 High DPI 行为呈现 WebOC 的 Web 内容,而是使用 Internet Explorer 7 行为,该行为会放大以绝对值指定的字体,例如点。若要在程序中利用 Internet Explorer 8 High DPI 行为,需要使用名为
DOCHOSTUIFLAG_DPI_AWARE
的 DOCHOSTUIFLAG 。通过使用方法 GetHostInfo,可以使用此方法使用此标志,该方法将 DOCHOSTUIINFO 结构作为其参数之一。反过来,DOCHOSTUIINFO 将一个名为dwFlags
的运算符 DWORD 作为其成员之一,它可以由一个或多个 DOCHOSTUIFLAG 值组成。您必须在 dwFlags 中包含DOCHOSTUIFLAG_DPI_AWARE
才能在 WebOC 中利用 Internet Explorer 8 High DPI 行为。模拟 WebOC 的 HTML 内容在选择加入高 -DPI 行为后的外观的快速简便方法是在 Internet Explorer 8 中打开等效的 HTML 内容(由 HTML 文件组成),然后只需在等效缩放设置(120 DPI 到 125% 缩放, 144 DPI 到 150% 变焦)。我们建议您在实际的高 DPI 方案中测试 WebOC,以完全确保 HTML 内容按预期呈现。