在微軟的大力扶持下,越來越多的軟件公司開始支持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動畫,讓你的朋友羨慕一下!