创建一个有声音的 VCL 按钮组件
Posted
技术标签:
【中文标题】创建一个有声音的 VCL 按钮组件【英文标题】:Create a VCL Button Component with sound 【发布时间】:2016-08-26 16:31:20 【问题描述】:我正在尝试创建一个自定义 VCL 组件,该组件可以在单击时播放自定义声音。声音是从资源 DLL 访问的。
问题是,声音是使用 Direct X 播放的,并且要创建它需要一个有效的窗口句柄。
我天真的初始测试是在组件构造函数中初始化声音:
__fastcall TArrayBotButton::TArrayBotButton(TComponent* Owner)
: TBitBtn(Owner),
FSoundID("BUTTON_CLICK_1")
initABCoreLib();
HWND hWnd = Application->MainFormHandle;
mSound.Create(FSoundID.c_str(), hWnd);
但上述方法不起作用,因为此时 MainFormHandle 为 NULL。另外,作为一个组件,在构造函数中使用 Application 变量可能是不安全的(?)。
关于在哪里初始化声音的任何指针?
【问题讨论】:
【参考方案1】:为什么不直接使用按钮自己的HWND
呢? TBitBtn
是一个窗口控件。它的HWND
在构造函数中不可用,但您可以(并且应该)覆盖按钮的虚拟CreateWnd()
方法来创建DirectX 对象,并覆盖虚拟DestroyWnd()
方法来释放它。这样,您还可以在按钮的生命周期内重新考虑窗口。
【讨论】:
工作完美,让一切变得更简单。以上是关于创建一个有声音的 VCL 按钮组件的主要内容,如果未能解决你的问题,请参考以下文章
在 Delphi VCL 中通过组合两个控件(TEdit 和 TTrackBar)创建一个新组件
Delphi 是不是有任何“思维导图”组件? (最好是原生 VCL)[关闭]