怎样用PlaySound播放资源文件里的声音?(50分)

  • 主题发起人 主题发起人 minkerui
  • 开始时间 开始时间
为什么PlaySound('abc',hInstance,SND_RESOURCE)可以播放而
Str:='abc';
PlaySound(PChar(Str),hinstance,SND_RESOURCE)就不行了呢?????????
 
您可以不要这样做嘛,可以设Str为 array [0..255] of Char
Str:='abc';
PlaySound(Str,hInstance,SND_RESOURCE);
OK?!
 
Let me try!
 
举一个例子,将1.wav导入到程序内部
1。生成一个foo.rc的文件,这是一个文本文件,内容为下面这句
WAVE1 WAVE PRELOAD FIXED PURE "1.WAV"
说明:资源名,资源类型,关键字(PRELOAD FIXED PURE 可不要),文件名
2。编译:
brcc32 foo.rc
形成foo.res
3.写代码
...
implementation

{$R *.DFM}
{$R foo.res}
procedure Tform1.button1click(sender:Tobject);
var rhmynoise:THandle;
pmynoise:Pointer;
hmynoise:Thandle;
begin

rhmynoise:=findresource(HInstance,'WAVE1','WAVE');//查找资源
hmynoise:=loadresource(HInstance,rhmynoise);//获取资源句柄
pmynoise:=lockresource(hmynoise););//获取资源数据句柄
sndplaysound(pmynoise,SND_SYNC or SND_MEMORY);//播放
freeresource(hmynoise);//释放资源
end;
 
Char 与 PChar 根本不兼容!!!
 
SND_RESOURCE不是指定了资源文件播放吗?为什么
PlaySound(Str,hInstance,SND_RESOURCE);
不行?????
 
上面那段代码还是不行啊。
 
var
Str: array [0..255] of Char;

不是Char与PChar, 而是array [0..255] of Char 与 PChar ,是兼容的。
比如 array [1..255] of Char 与 PChar 是不兼容的,
而甚至 array [0..10] of Char 与 PChar 都兼容。 再试如何
 
一个播放自定义过程
procedure MyPlaySound(WavFileName: String;
sndType: Byte);
var
WavFileNameStr: array [0..128] of Char;
PtrSound: PChar;
hRes: THandle;
hResInfo: THandle;
begin

StrPCopy(WavFileNameStr,WavFileName);
hResInfo:=FindResource(HInstance,WavFileNameStr,'WAVE');
hRes:=LoadResource(HInstance, hResInfo);
if hRes>32 then
PtrSound:=LockResource(hRes);
if sndType=0 then
sndPlaySound(PtrSound, snd_Async or snd_Memory);
if sndType=1 then
sndPlaySound(PtrSound, snd_Sync or snd_Memory);
if sndType=2 then
sndPlaySound(PtrSound, snd_Async or snd_Memory or snd_Loop);
if sndType=99 then
sndPlaySound(PtrSound, 0);
end;

 
多人接受答案了。
 

Similar threads

回复
0
查看
798
不得闲
回复
0
查看
1K
不得闲
D
回复
0
查看
911
DelphiTeacher的专栏
D
D
回复
0
查看
868
DelphiTeacher的专栏
D
后退
顶部