2016-08-26 3 views
0

クリックしたときにカスタムサウンドを再生できるカスタムVCLコンポーネントを作成しようとしています。サウンドはリソースDLLからアクセスされます。サウンド付きのVCLボタンコンポーネントを作成する

質問:サウンドはDirect Xを使用して再生され、作成するには有効なウィンドウハンドルが必要です。

私の素朴な最初のテストは、コンポーネントのコンストラクタで音を初期化することでした。この時点でMainFormHandleがNULLであるよう

__fastcall TArrayBotButton::TArrayBotButton(TComponent* Owner) 
    : TBitBtn(Owner), 
    FSoundID("BUTTON_CLICK_1") 
{ 
initABCoreLib(); 
HWND hWnd = Application->MainFormHandle; 
mSound.Create(FSoundID.c_str(), hWnd); 
} 

が、上記では、動作しません。また、コンポーネントであるため、Application変数を使用することはおそらくコンストラクタ(?)では安全ではありません。

サウンドを初期化するためのポインタはありますか?

答えて

2

ボタンの代わりにHWNDを使用するのはなぜですか? TBitBtnはウィンドウコントロールです。そのHWNDはコンストラクタでは使用できませんが、ボタンの仮想CreateWnd()メソッドをオーバーライドしてDirectXオブジェクトを作成し、仮想メソッドDestroyWnd()をオーバーライドして解放することができます。この方法では、ボタンの存続期間中のウィンドウの再作成も考慮に入れます。

+0

完璧に作業し、すべてをはるかに簡単にしました。 –

関連する問題