随笔 - 110  文章 - 28 评论 - 26 

留言簿(1)

随笔分类(103)

随笔档案(110)

文章分类(25)

文章档案(28)

新闻档案(3)

友情连接

  • 小蜜蜂
  • 马氏膏药网
  • 淋巴结肿大,淋巴结核,淋巴结炎 乳腺增生,小叶增生 颈椎病,腰椎病,腰间盘突出 马氏淋巴消炎贴,马氏增生散结贴,马氏关节肌肉贴
  • 黑客基地
  • 全球最大的黑客门户网站

最新随笔

积分与排名

  • 积分 - 146509
  • 排名 - 44

最新评论

阅读排行榜

评论排行榜

rc文件:  mywav WAVE "F:\歌曲\17.wav"
添加到project1.exe中

注意:在uses加mmsystem,下面两种方法都加

方法1:
procedure TForm1.Button2Click(Sender: TObject);
  var
  hResInfo:THandle;
  PtrSound:pChar;
  hRes:THandle;
begin
  hResInfo:=FindResource(hinstance,'mywav','WAVE');//查找所需资源
  hRes:=LoadResource(HInstance,hResInfo);//把资源放到全局存储器中
  ptrSound:=LockResource(hRes);//锁到全局存储器中这个资源
  sndplaysound(ptrSound,snd_async   or   snd_Memory);//开始播放调用
end;


方法2:
procedure TForm1.Button1Click(Sender: TObject);
var
  rs: TResourceStream;
begin
  rs := TResourceStream.Create(HInstance, 'mywav', 'WAVE');

  sndPlaySound(rs.Memory, SND_ASYNC or SND_MEMORY);
  //上面那句可用下句代替
  //PlaySound(rs.Memory, HInstance, SND_ASYNC or SND_MEMORY);

  rs.Free;
end;




上面两种方法中关于API简介
FindResource()
函数功能:该函数确定指定模块中指定类型和名称的资源所在位置
函数原型:HRSRC FindResource(HMODULE hModule,LPCTSTR lpName,LPCTSTR lpType);
hModule:处理包含资源的可执行文件的模块,用HInstance就是指在本程序中找资源
lpName:指定资源名称
lpType:指定资源类型
 应用程序可以使用FindResource函数去查找任何种类资源,但是这个函数只有在应用程序并发调用LoadLibray和LockResource函数来存取二进制资源时才被使用,所以下面用到了LockResource()
关于更多请自己查找资料

LockResource()
函数功能:该函数锁定内存中的指定资源,说白了就是返回资源在内存中的地址
LPVOID LockResource(HGLOBAL hResDate);
hResDate:被装载的资源的句柄。函数LoadResource可以返回这个句柄
所以又用到了函数:LoadResource()

LoadResource()
函数功能:该函数装载指定资源到全局存储器
hModule:处理包合资源的可执行文件的模块句柄,hinstance就是指程序自身刚初始化时
hReslnfo:将被装载资源的句柄,由FindResource()得到的句柄

PlaySound()   sndPlaySound()
bool PlaySound(LPCSTR pszSound, HMODULE hmod,DWORD fdwSound);
参数pszSound是指定了要播放声音的字符串,该参数可以是WAVE文件的名字,或是WAV资源的名字,或是内存中声音数据的指针,或是在系统注册表WIN.INI中定义的系统事件声音.fdwSound是标志的组合(更多请查查关资料),只说下snd_async or snd_Memory or SND_LOOP
snd_async用异步方式播放声音,PlaySound函数在开始播放后立即返回,如果没有程序会卡住
snd_Memory播放载入到内存中的声音,此时pszSound是指向声音数据的指针,如果没有声音就不能播放
snd_loop 重复播放声音,必须与snd_async一块使用,如果不一起那么就不会重复播放声音
中间参数hmod,是应用程序的实例句柄,当播放WAV资源时要用到该参数,否则它必须为NULL,所以可是hinstance,也可是数字0
函数sndPlaySound的功能与PlaySound类似,但少了一个参数。函数的声明为
BOOL sndPlaySound(LPCSTR lpszSound, UINT fuSound);


TResourceStream  资源流
TResourceStream.Create(Instance: THandle; const ResName: string; ResType: PChar); 可以把指定的资源读入Tresourcestream的实例对应的内存中
   第一个参数指定一个包含有资源数据的可执行文件或者dll文件的实例句柄   
   第二个参数用于说明所需调入的资源在.RC文件中的名字或者数字ID,由于参数类型是string,   
   所以如果用数字ID来说明的话,就在数字前面加#。而且用数字比用字符所需要的内存要少
  第三个参数指定资源类型
posted on 2009-01-15 22:31 小叶子 阅读(2006) 评论(0)  编辑 收藏 引用 所属分类: delphi资源文件调用
只有注册用户登录后才能发表评论。

笔记和文章,可能抄袭,只为学习,请原谅