这个问题是在看了http://blog.csdn.net/dtianx/archive/2004/11/17/184949.aspx这篇文章后产生的,
当时的想法很简单,就是网上还找不到类似的VB代码,于是就想写成一个VB实现之类的东东,改写的过程很顺
利。但改完之后就想到能不能插入flash影片呢,于是就有了这篇东西。
从理论上说COM对象只要实现了IOLEOBJECT接口,就应该可以插入到richtextbox中。所以我们首先就要查
询flash对象的IOLEOBJECT接口,在vb中QI是通过将子类赋于父类实现的,为了实现QI大家要找一个实现了
IOLEOBJECT接口的tlb文件,我是从http://www.mvps.org/emorcillo/download/vb6/tl_ole.zip得到这个tlb文
件的,我一直在用它,用它的原因很简单,就是因为喜欢它封装的一些api的声明(当然用别的tlb文件也可以
,甚至不用tlb文件也可以,不过问题就扯远了,这个话题以后有机会再说吧),先在窗体上画一个flash控件
和一个按钮,然后写代码:
Private Sub Command1_Click()
Dim mIoleObject As IOleObject
Set mIoleObject = ShockwaveFlash1
End Sub
看到这里,你可能会有疑问,为什么不这样呢:
先添加对flash.ocx的引用(注意是引用),然后:
Dim mFlash As New ShockwaveFlashObjects.ShockwaveFlash
Set mIoleObject = mFlash
这样不是可以成功QI吗?没错,的确可以成功QI,但这种方法添加的flash属于OLE静态嵌入,只能有一个
flash控件处于活动状态,所以我没有采用,事实上按照这种思路做下去实现的效果,使用richtextbox控件自
身的方法就可以实现,James0001给出了代码:
Private Sub Command1_Click()
Dim objOle As IOleObject, objFlash As Object
Set objOle = RichTextBox1.OLEObjects.Add(, , , "ShockwaveFlash.ShockwaveFlash")
Set objFlash = objOle
objFlash.Movie = "http://cardimg.163.com/mcards/1/big/3081.swf"
End Sub
好了,回到上文中的:
Private Sub Command1_Click()
Dim mIoleObject As IOleObject
Set mIoleObject = ShockwaveFlash1
End Sub
运行程序,单击按钮,你看到了什么,13号错误,没错,就是这个。这个说明了什么,是flash不支持
IOLEOBJECT接口,还是我们利用set