首页  编辑  

ActiveX控件的动态加载

Tags: /超级猛料/COM、ActiveX,DDE/   Date Created:

如何在Delphi中动态加载ActiveX控件

如何在Delphi中动态加载ActiveX控件?其实很简单!嗯,大家做好了,下面以ShockWaveFlash控件为例讲解如何动态加载ActiveX控件!

首先,我们知道,ActiveX控件都有TypeLib或者导出单元的,因此我们首先应该生成一个Object Pascal格式的单元来封装这个ActiveX控件,这个封装过程Delphi可以全自动完成,我们不必要写任何代码!首先,在Delphi菜单Component-->Import ActiveX Control,在弹出的对话框中(如下图):

选择ShockWave Flash,然后点击Install...,然后选择你需要安装的包,默认采取dclusr.dpk即可!然后弹出Package DPK窗口(如下图):

此时我们点击[Install]工具按钮即可,默认情况下, 新的控件将被安装到ActiveX控件页面,此时我们可以和普通控件一样使用这个Flash控件了,但是我们要动态创建的话,也很简单,首先,我们在uses部分添加ShockwaveFlashObjects_TLB单元,然后在FormCreate事件中,添加代码:

procedure TForm1 . FormCreate ( Sender : TObject );

begin

 OpenDialog1 . Filter := 'SWF Files (*.SWF)|*.SWF' ;

  with OpenDialog1 do

    if Execute then

      with TShockwaveFlash . Create ( Self ) do

      begin

       Height := 100 ;

       Width := 100 ;

       Top := 30 ;

       Align := alClient ;

       Parent := Self ;

       Visible := True ;

       OnFSCommand := MyCommand ;

       Movie := FileName ;

       Play ;

      end ;

end ;

procedure TForm1 . MyCommand ( Sender : TObject ; const command ,

 args : WideString );

begin

 Caption := Format ( 'Command:%s,Args:%s' ,[ Command , args ]);

end ;

这样我们就可以动态生成和使用ActiveX控件了,实际上,是非常简单的,和普通的控件没有任何区别。上面的代码必须先导入类型库,限制了应用,如果我们要动态创建任意的ActiveX控件那么该怎么办呢?可以利用OLE Container控件来达到我们的目的!我们可以动态创建TOLEContainer控件,然后OleContainer有可以动态创建任意的对象,例如:

procedure TForm1 . Button1Click ( Sender : TObject );

begin

 OleContainer1 . CreateObject ( Edit1 . Text , False );

 OleContainer1 . DoVerb ( ovShow );

end ;

然后我们运行程序,在Edit里面输入'ShockwaveFlash.ShockwaveFlash.1'点击Button1,然后在Edit里面输入Word.Document,然后点击Button,你会发现我们已经能够动态创建任意的ActiveX控件了。 :-)。

注意,若目标机器上面没有安装OCX控件,我们可以在程序的最开始使用WinExec或者ShellExecute()运行regsvr32 来注册OCX控件即可,否则可能无法创建控件。

img_30932.bmp (673.0KB)
img_8.bmp (349.8KB)