ActiveX 在 BCB 中的地位
BCB 通過 **Import ActiveX** 向導將 .ocx/.dll 封裝為原生 VCL 組件 (生成 *_TLB.h/.cpp),讓開發者像使用 TButton 一樣拖放、設置屬性、雙擊編寫事件,**無需手寫 COM 介面/查詢/引用計數**。
三步安裝導入
- **Component → Import ActiveX Control...** 打開對話框。
- 列表中選擇已註冊控件 (如 RealPlayer ActiveX Control Library、Shockwave Flash Object) → **Install**。
若列表無目標控件 → **Add...** 選擇 .ocx 文件 → BCB 自動註冊並生成封裝。
- 安裝後,**ActiveX** 頁面出現對應組件圖標 (如
TRealPlayer、TShockwaveFlash),拖入表單即可使用。
探索控件成員:兩大秘籍
- 生成的頭文件:
$(BCB)\Imports\*_TLB.h — 完整定義了介面、屬性、方法、事件、枚舉,配合 IDE 代碼提示 (Ctrl+Space) 即可編碼。
- Code Explorer (Ctrl+Shift+E):雙擊組件名 → 右側顯示其類定義、繼承鏈、公開成員,極速查閱。
實戰一:RealPlayer 播放器
關鍵屬性設置
Controls = "ImageWindow,ControlPanel,StatusBar" — 顯示視頻窗口/控制條/狀態欄 (默認僅音頻)。
Align = alClient — 隨表單縮放自適應。
核心代碼
void __fastcall TForm1::BtnOpenClick(TObject *Sender) {
if (OpenDialog1->Execute()) {
RealPlayer1->Source = OpenDialog1->FileName; // OleVariant 隱式轉換
RealPlayer1->DoPlay(); // 播放
}
}
void __fastcall TForm1::BtnExitClick(TObject *Sender) { Close(); }
文件過濾器
OpenDialog1->Filter = "Media Files (*.rm;*.ram;*.ra;*.swf;*.mp3)|*.rm;*.ram;*.ra;*.swf;*.mp3|All Files|*.*";
實戰二:Flash (Shockwave Flash) 播放器
常用屬性/方法
| 成員 | 說明 |
| Movie | 設定 .swf 路徑或 URL (OleVariant) |
| Play() / Stop() / Rewind() | 播放控制 |
| FrameNum / TotalFrames | 當前/總幂號 |
| SetVariable / GetVariable | 與 ActionScript 變量交互 |
| TSetProperty / TGetProperty | 操作影片剪輯屬性 (_x, _y, _alpha, _visible...) |
| CallFunction / CallFrame | 調用 AS 函數 (需 Flash 8+ ExternalInterface) |
範例:C++ 與 ActionScript 雙向通訊
// C++ → AS
Flash1->SetVariable("_root.cppMsg", "Hello from BCB!");
Flash1->TCallFrame("/_root", "onCppCall"); // 告知 AS 有新數據
// AS → C++ (需在 Flash 中 fscommand("event", "data"))
void __fastcall TForm1::Flash1FSCommand(TVariant &command, TVariant &args) {
if (command == "event") ShowMessage("Flash says: " + args);
}
避坑指南與現代替代
| 問題 | 解決/替代 |
| 64 位 BCB 無法載入 32 位 OCX | 目標平台選 Win32;或改用原生庫 (libvlc、Chromium Embedded Framework CEF) |
| Flash 2020 年底停止支援 | 全面遷移至 HTML5/JS (CEF/WebView2) 或 Ruffle (WASM 模擬器) |
| RealPlayer 格式舊、專有 | 改用 FFmpeg + SDL2/QtMultimedia 實現通用播放器 |
| ActiveX 事件不觸發 | 確認 EventSink 正確連接;嘗試 QueryInterface 手動建議連接點 |
| 部署需註冊 OCX | 安裝腳本執行 regsvr32 xxx.ocx;或使用 Registration-Free COM (Manifest) |
總結
BCB 的 ActiveX 封裝極其強大,**Import → Install → Drop → Code** 四步即可調用豐富生態。但隨著 64 位、跨平台、安全性要求提升,**新專案首選原生 C++ 庫 (libvlc, FFmpeg, CEF, WebView2, QtMultimedia)**,ActiveX 僅作舊系統維護/快速原型之用。
- 上一篇文章: Windows 即時獲取進程 CPU 佔用率:基於系統時間差分算法的 C++ 實現
- 下一篇文章: C++ 指針深度解析:從數字、地址到多級指針、函數指針與成員指針完整語義
Copyright ©
程式碼之家 All Rights Reserved