这有个资料你看看呗
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控件即可,否则可能无法创建控件。