利用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窗口的全屏状态。 

ActiveX之绘制过程

一、ActiveX控件的绘制过程     当ActiveX控件被显示或被重绘时,绘制过程类似于其它用MFC开发的应用程序,不过有一点不同:ActiveX控件具有active、inactive二种状态...
  • a36254094
  • a36254094
  • 2012年10月02日 11:14
  • 1001

如何在Web上判断是否已经安装了某个ActiveX控件

1. 用JavaScript检测系统中是否已经安装了某个ActiveX控件 try { var ax = new ActiveXObject("控件名称"); alert("已安装"...
  • huang_xw
  • huang_xw
  • 2012年03月09日 21:09
  • 9883

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

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

用IE调试ActiveX控件的相关设置(无法启动调试信息,找不到Microsoft Internet Explorer的解决方法)

用IE调试ActiveX控件的相关设置(无法启动调试信息,找不到Microsoft Internet Explorer的解决方法) 转自http://blog.csdn.net/uqapuq...
  • z526882183
  • z526882183
  • 2016年04月14日 19:54
  • 1561

ActiveX控件安全初始化之二:自己动手修改注册表

这里所谓的修改注册表的方法就是使用组件分组管理器(Component Categories Manager)创建一个正确的入口到系统注册表。IE3通过检测注册表绝对一个控件是否是可以安全性初始化和脚本...
  • MLiang
  • MLiang
  • 2006年03月31日 14:32
  • 3635

非IE内核浏览器如何支持activex插件

之前在一个B/S项目中遇到一个需求,就是客户需要在页面上对报表的布局以及显示内容,进行自定义。最后决定使用activex技术来实现。众所周知,activex是微软搞得,因此只有ie内核的浏览器才能支持...
  • johnson2008t
  • johnson2008t
  • 2015年05月28日 18:17
  • 709

获取控件所在窗体GetParentForm

Caption = GetParentForm(this->Button1)->ClassName();
  • ksrsoft
  • ksrsoft
  • 2012年09月06日 17:58
  • 1182

使用C#开发ActiveX控件,封装到浏览器使用,出现找不到XXXX.dll的异常解决

背景: 项目中使用C#开发一款组件,用于Tomcat+Jsp项目中,在浏览器中通过Active组件的方式调用,部分功能会出现找不到 XXX.dll的问题。   异常原因:   通过浏览器调用...
  • songqingwei1988
  • songqingwei1988
  • 2014年03月19日 19:38
  • 1655

IE调用Activex控件时EVENT的三种调用方式

Test 1 uses the "for" tag to setup the callback to the activeX event. This is successful on all vers...
  • jia_xiaoxin
  • jia_xiaoxin
  • 2017年06月28日 17:30
  • 815

VS2013编写嵌入网页的ATL控件1-新建和配置

前言,废话最近做一个项目需要网页打开的ATL控件作为依托,显示三维内容。网页对控件可以调用函数,并且传送信息。控件也可以给网页发送消息。 我不懂ATL控件,完全初学,弄了很久。写个blog记录一下。...
  • jean7155
  • jean7155
  • 2015年12月15日 17:19
  • 2730
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:利用ActiveX组件控制其所在的IE窗口
举报原因:
原因补充:

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