怎样在运行时动态加载ActiveX控件?急!!!!!(70分)

  • 主题发起人 笑面虎
  • 开始时间

笑面虎

Unregistered / Unconfirmed
GUEST, unregistred user!
请问怎样在运行时动态加载ActiveX控件?急!!!!!如swflash.ocx这一个?[?]
 
对此非常GZ,我也正在找这个问题的答案,如果找到了我就告诉你。
 
问题具体点
 
1 执行菜单 Component ,Import ActiveX Control
2 选择 Shockwave Flash后点击"Create Unit",这时会产生单元文ShockwaveFlashObjects_TLB
3 在Form 的 uses 中添加 ShockwaveFlashObjects_TLB
4 在Form 的声明中添加:
public
{ Public declarations }
flash:tshockwaveflash;
5 动态创建和其它普通控件的创建是一样的.
procedure TForm1.Button3Click(Sender: TObject);
begin
flash:=tshockwaveflash.Create (self);
flash.parent:=self;
flash.top:=10;
flash.Left:=10;
flash.Width:=200;
flash.Height:=200;
flash.Width:=200;
flash.Visible:=true;
end;

1 2 步主要是引入类型库并进行封装.

以下方法能创建,不知如何放在表单上:
procedure TForm1.Button4Click(Sender: TObject);
var
f:eek:levariant;
begin
f:=createOleObject('ShockwaveFlash.ShockwaveFlash');
end;
以下接口不支持:
oleContainer.CreateObject ('ShockwaveFlash.ShockwaveFlash',true);
 
楼上说的方法成吗?
我看你前面的方法,不是还得在设计阶段加进它的类型库吗?那不算。

后面的方法看上去好象还可以吧,我试试去。
 
我用BCB试过了
问题跟楼上说的一样。
 
找到了答案:

如果我们要动态创建任意的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控件即可,否则可能无法创建控件。
 
多人接受答案了。
 
顶部