利用ActiveX组件控制其所在的IE窗口

原创 2007年10月06日 21:20:00
在实际的项目开发过程中,有时我们需要利用ActiveX组件控制其所在的IE窗口,如隐藏工具条和状态栏、全屏等,以使程序的工作区域最大。
 
1.  Delphi建立一个ActiveXForm工程,添加对SHDocVw单元的引用;
2.  Interface段声明一个自定义的消息常量,如下所示:
const

  WM_UPDATE = WM_USER + 1;

3.  在类的私有段定义如下变量和函数:
    private
       FWebBrowser: IWebBrowser2;
       procedure WMUpdate(var Msg: Integer); message WM_UPDATE;
       function FindIEWebBrowser: IWebBrowser2;
       function FindIEWindow(ParentHandle, ChildHandle: HWND): Boolean;
4.  Ctrl+Shift+C自动生成函数体的代码,完善代码内容如下:
procedure TActiveFormX.WMUpdate(var Msg: Integer);
begin
 FWebBrowser := FindIEWebBrowser;
 if FWebBrowser <> nil then
 begin
    FWebBrowser.ToolBar := 0;
    FWebBrowser.StatusBar := false;
 end;
end;
 
function TActiveFormX.FindIEWebBrowser: IWebBrowser2;
var
 tmpShell: IShellWindows;
 tmpIntf: IDispatch;
 tmpIE: IWebBrowser2;
 i: Integer;
begin
 try
    tmpSHell := CoShellWindows.Create;
    for i := 0 to tmpShell.Count - 1 do
    begin
      tmpIntf := tmpShell.Item(i);
      if tmpIntf = nil then continue;
      tmpIntf.QueryInterface(IID_IWebBrowser2, tmpIE);
      if tmpIE = nil then Continue;
      if (Integer(Handle) = tmpIE.HWND) or FindIEWindow(Integer(tmpIE.HWND), Handle) then
     begin
        Result := tmpIE;
        Exit;
      end;
    end;
 except
 end;
end;
 
function TActiveFormX.FindIEWindow(ParentHandle,
 ChildHandle: HWND): Boolean;
var
 tmpHandle : HWND;
begin
 tmpHandle := GetParent(ChildHandle);
 if tmpHandle = 0 then
 begin
    Result := False;
    Exit;
 end else
 begin
    if tmpHandle = ParentHandle then
    begin
     Result := True;
     Exit;
    end else
    begin
      Result := FindIEWindow(ParentHandle, tmpHandle);
    end;
 end;
end;
5.  双击主窗体,在ActiveFormCreate事件中添下如下代码:
procedure TActiveFormX.ActiveFormCreate(Sender: TObject);
begin
 PostMessage(Handle, WM_UPDATE, 0, 0);
end;
6.  在窗体上添加两个Button,分别命名为btnFullScreenbtnUnFullScreen,为其OnClick事件添加如下代码:
procedure TActiveFormX.btnFullScreenClick(Sender: TObject);
begin
 if FWebBrowser <> nil then
 begin
    FWebBrowser.FullScreen := true;
 end;
end;
 
procedure TActiveFormX.btnUnFullScreenClick(Sender: TObject);
begin
 if FWebBrowser <> nil then
 begin
    FWebBrowser.FullScreen := false;
 end;
end;
7.  Build工程将其发布,运行生成的Html页面,组件加载成功后IE窗口的工具栏和状态条被隐藏了,通过窗体上的两个按钮可以控制IE窗口的全屏状态。 

相关文章推荐

IE浏览器控制ActiveX组件

  • 2010年06月17日 14:35
  • 252KB
  • 下载

C#重写WebBrowser组件,禁止跳转到IE新窗口、脚本错误 (转载)

C#重写WebBrowser组件,禁止跳转到IE新窗口、脚本错误 (转载) ? 从网上找到奇客力大侠的《C# webBrowser禁止在新窗口打开,强制在本窗口...

IE下使用js与自带ActiveX控制web打印

一.打印需求1.控制页眉页脚和上下左右的页边距 2.可选横向打印 3.跳过配置对话直接打印 二.环境与背景 1.浏览器版本:IE8 2.不能使用ScriptX 3.不能开发新Act...

IE中,ActiveX控件中控制Internet Explorer 事件

如何对webbrowser和IE编程(十一) 转http://blog.csdn.net/shanhe/article/category/15859 仅仅用于Internet Explore...

使用Js脚本 修改控制IE的注册表相关设置(activex等)

脚本写法: var WshShell=new ActiveXObject("WScript.Shell"); //添加信任站点ip WshShell.RegWrite("HKCU\\So...

JS 控制IE窗口

取消选取、防止复制 网页将不能被另存为 IE地址栏前换成自己的图标 可以在收藏夹中显示出你的图标HTML和服务器端的控件都可以用...
  • xwnxwn
  • xwnxwn
  • 2011年01月13日 11:07
  • 1687

【JavaScript】利用滚动事件window.onscroll与position:fixed写兼容IE6的回到顶部组件

现在网上的回到顶部组件,懂不懂就一大段让人看不懂javascript代码,还各种不兼容。起始这个组件,完全可以自己利用javascript的滚动事件window.onscroll与position:f...

利用Maxwell组件实时监听Mysql的binlog日志,并且把解析的json格式数据发送到kafka窗口供实时消费

利用Maxwell组件实时监听Mysql的binlog日志,并且把解析的json格式数据发送到kafka窗口供实时消费...

利用python的GUI组件wxWidgets实现登录窗口

利用python的GUI组件wxWidgets实现登录窗口 我的python版本是2.7 源代码如下:
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:利用ActiveX组件控制其所在的IE窗口
举报原因:
原因补充:

(最多只允许输入30个字)