在C++ Builder中使用ActiveX控件显示Flash动画
在微软的大力扶持下，越来越多的软件公司开始支持ActiveX了，这对于喜欢编程的朋友来说可是件值得高兴的事！因为我们可以在程序中很方便地调用外部的OCX文件来实现复杂的功能（比尔·盖茨这回总算做了件好事），比如在你的程序中调用IE来显示HTML文件等。今天我想向大家介绍一下如何在C＋＋ Builder中使用ActiveX控件显示Flash动画。 1.安装、导入ActiveX控件 本文的主角是：swflash.ocx，这个文件Windows98中附带有，在缺省模式下Windows会将它安装到“Windows\System\Macromed\Flash”目录下，如果你在安装时没有选“缺省安装”可以到Win98的安装光盘中的win98_68.cab文件中找到它。 C＋＋ Builder在对ActiveX的支持方面可说是做得非常出色，我们可以很方便地导入系统中的ActiveX控件：选择“Component－>Import ActiveX Control”，在上面的控件列表中选择“ShockWave Flash(Version 1.0)”（图1），再点下面的“Install”按钮就行了！如果控件列表中没有它，那么说明ShockWave Flash控件还没有在系统中注册，不要紧，我们可以点击“Add”按钮在你的计算机中找到这个OCX文件后再Install，C＋＋ Builder会自动为它注册。 2.编程显示Flash动画 导入成功后，C＋＋ Builder会在ActiveX页中增加一个“ShockWaveFlash”控件（图2），建立一个新工程，在合适的位置放置一个ShockWaveFlash控件，适当调整一下它的大小，然后在它的“Movie”属性中填上一个你的硬盘上已有的Flash动画文件名(如c:\flash\test.swf)，然后按F9运行，怎么样，不用写一行代码我们就做出了一个能显示Flash动画的程序！ 不过为了让它更好地工作，我们还有必要了解一下ShockWaveFlash控件的属性和方法: 【属性】AlignMode(int型)和SAlign(WideString型) 控制动画的显示位置(把这两个属性列在一起说明它们是相互关联的，改变一个另一个也会相应地改变，后面类似的情况就不作说明了)。取值范围及含义如下: 0 空 当前位置 1 L 当前位置靠左 2 R 当前位置靠右 3 LR 当前位置居中 4 T 当前位置靠上 5 LT 左上 6 TR 右上 7 LTR 上方居中 8 B 当前位置靠下 9 LB 左下 10 RB 右下 11 LRB 下方居中 12 TB 当前位置垂直居中 13 LTB 靠左垂直居中 14 TRB 靠右垂直居中 15 LTRB 中央位置 【属性】BackgroundColor(int型)和BGColor(WideString型) 设置背景颜色，BackgroundColor为整型值，BGColor为它的HEX字符串。 【属性】Loop(bool型) 是否循环显示 【属性】Menu(bool型) 是否显示右键菜单，建议设为true，因为它可以完成对Flash动画的大部分控制工作，而不用我们写代码。 【属性】Movie(WideString型) Flash动画的文件名，可以在运行状态动态设置，要关闭一个动画只要把它设为空即可。 【属性】Quality(int型)和Quality2(WideString型) 控制动画的显示质量,一般将Quality设为1以获得高质量的显示效果。 【属性】ScaleMode(int型)和scale(WideString型) 控制动画的显示比例，取值范围及含义如下: 0 ShowAll 显示全部 1 NoBorder 无边框模式 2 ExactFit 拉伸到整个画面 3 空 原始大小 【方法】PercentLoaded 返回动画已经加载的百分比，你可以建立一个进程条(ProgressBar)来显示动画加载的进程。 【方法】LoadMovie 用于加载网络上的动画，动画文件名为一个BSTR型的URL值，在 C＋＋ Builder 中可以用 AnsiToOLESTR 函数将Char型的字符串转换成BSTR型。 好了，利用上面介绍的属性和方法，相信你已经很好地使用它了！遗憾的是 ShockWaveFlash 控件的功能现在还不太完善，比如无法返回动画的实际大小和背景颜色等，但对于我们只要在程序中显示一个特定的Flash动画来说，这些并不重要。 3.注册ActiveX控件 如果你要把你的程序给别人使用，为了防止他没有安装或是注册swflash.ocx文件而导致程序无法运行，你必须把OCX文件也一起附带上，并在程序中为它在系统中注册，注册方法有两种： 方法一：调用外部程序 Regsvr32.exe 注册： ShellExecute(Handle,NULL,“regsvr32.exe”,“swflash.ocx”,NULL,SW_SHOWNORMAL); 反注册： ShellExecute(Handle,NULL,“regsvr32.exe”,“/u swflash.ocx”,NULL,SW_SHOWNORMAL); 方法二：调用控件本身所包含的注册和反注册函数 每一个OCX控件中都提供了两个输出函数“DllRegisterServer”和“DllUnRegisterServer”，可以注册和反注册控件本身，我们可以用LoadLibrary()和GetProcAddress()来调用它们，这和动态调用DLL库的方法是一样的，我在这里就不多说了。 4.经验之谈 最后，我还想介绍一下使用ActiveX控件的技巧。 一般的ActiveX控件都是没有帮助文件的，在C＋＋ Builder的IDE环境中我们只能看到它的设计期属性和事件，那么怎么才能知道它的运行期属性和方法呢？C＋＋ Builder在导入一个ActiveX控件后会在“Imports”目录中生成相应的头文件(＊.h)，只要把它打开看一下就一目了然了！ 另外我们还必须了解各种属性、方法及其参数的含义，那就要编程序来试了，为每个想了解的属性和方法建立一个菜单项，点击时用InputBox输入参数来试验效果，还可以建立一个状态栏来显示与其相关变量的值。 写了这么多，不知你是否理解了呢？还不赶快在你的程序里加上如今最流行的Flash动画，让你的朋友羡慕一下！(江苏 戈梦杰)