首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何像to浏览器一样在使用ctrl+mousewheel时进行TWebBrowser缩放?

如何像to浏览器一样在使用ctrl+mousewheel时进行TWebBrowser缩放?
EN

Stack Overflow用户
提问于 2012-04-21 00:28:13
回答 2查看 6.1K关注 0票数 11

根据

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使用control键和鼠标滚轮进行缩放,应该只需要使用pvaIn100调用IWebBrowser2.ExecWB(OLECMDID_OPTICAL_ZOOM, ...)

但是在调用它之后,ctrl+mousewheel仍然不会缩放内容

我在Delphi 2007中使用的代码:

代码语言:javascript
复制
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;
EN

回答 2

Stack Overflow用户

发布于 2012-08-03 02:44:40

杰森·彭妮

100是默认值,如果要更改缩放,则必须增大或减小此值,从10到1000。

我写了一个测试,代码如下:

代码语言:javascript
复制
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;
票数 8
EN

Stack Overflow用户

发布于 2012-05-09 04:28:39

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

Making the Web Bigger: DPI Scaling and Internet Explorer 8

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

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

快速和简单的方法来模拟的网页内容将如何出现一旦选择-in到高-DPI的行为是打开等效的HTML内容(在一个HTML文件中组成)在Internet Explorer8中,并简单地检查渲染在等效的缩放设置(120DPI到125%缩放,144DPI到150%缩放)。我们建议您在实际的High DPI场景中测试WebOC,以完全确保HTML内容按照您所希望的那样呈现。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10249959

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档