======================================================
注:本文源代码点此下载
======================================================
几乎每个windows应用程序都使用图标、图片、光标等资源。资源是程序的一部分,但是它是不可执行代码。下面我们就详细介绍资
源文件在delphi5中建立和使用方法。
1.把资源放到exe文件的优点
由于定位资源比在磁盘中定位文件花费时间少,所以应用程序执行会更快。多种资源可以放在一个文件中,减少了图标、图片、光标
等文件数量。保存资源文件时不要和工程名相同,因为delphi创建工程时会自动创建一个和工程名相同的资源文件。并且最好将资源
文件保存到和工程文件同一个文件夹中。
2.创建资源文件
首先创建一个.rc的纯文本文件。格式如下:
资源标识符 + 关键字 + 资源文件名
① 资源标识符:程序中调用资源时的特殊标号;
② 关键字:标识资源文件类型;
wave: 资源文件是声音文件;
rcdata: jpeg文件;
avi: avi动画;
icon: 图标文件;
bitmap: 位图文件;
cursor: 光标文件;
资源文件名:资源文件名;
③ 资源文件名:编译的资源文件,比如动画、位图、光标等;
④ 如:mywav wave "filename.wav"
使用borland资源编译器(brcc32.exe)转化.rc文件成.res文件。在dos命令行下输入下列命令:
brcc32 filename.rc // brcc32.exe在delphi5\bin文件下。
3.在工程中引用资源文件
为了存取我们的资源文件,必须告诉delphi链接我们的资源文件到应用程序中。因此我们可以在源代码中加入一条编译指令完成上述
功能。这条指令必须紧跟在窗口指令后,如下形式:
{$r *.dfm} //delphi自带编译指令
{$r filename.res} //新加入的编译资源文件的指令。
不要删除{$r *.dfm}指令,因为这行代码告诉delphi链接下面的资源到窗口的资源中。
4.调用资源文件
(1)存取资源文件中的位图(bitmap)
程序中如果想存取资源,你必须调用一些windows api函数。保存在资源文件中的位图、光标和图标可以通过调用loadbitmap、
loadcursor和loadicon函数存取。
本例举例说明如何存取资源文件中位图并显示在timage控件中。
procedure tfrmain.btncanvaspic(sender: tobject);
image1.picture.bitmap.handle :=loadbitmap(hinstance, '资源标识符');
end;
注:如果位图没有装载成功,程序仍旧执行,但是image将不再显示图片。你可以根据loadbitmap函数的返回值判断是否装载成功,
如果装载成功返回值是非0,如果装载失败返回值是0。
另外一个存取显示位图的方法如下
procedure tfrmain.btnloadpicclick(sender: tobject);
begin
image1.picture.bitmap.loadfromresourcename(hinstance, '资源标识符');
end;
(2)存取资源文件中的光标
screen.cursors[]是一个光标数组,使用光标文件我们可以将定制的光标加入到这个属性中。因为默认的光标在数组中索引值是0,
所以除非想取代默认光标,最好将定制的光标索引值设为1。
procedure tfrmain.btnusecursorclick(sender: tobject);
begin
screen.cursors[1] :=loadcursor(hinstance,'资源标识符');
image1.cursor :=1;
end;
(3)存取资源文件中的图标
将图标放在资源文件中,可以实现动态改变应用程序图标。
procedure tfrmain.loadiconclick(sender: tobject);
begin
application.icon.handle := loadicon(hinstance, '资源标识符');
end;
(4)存取资源文件中的avi
procedure tfrmain.loadiconclick(sender: tobject);
begin
animate1.resname :='myavi' ; //资源标识
animate1.active :=true ;
end ;
(5)存取资源文件中的jpeg
把jpeg单元加入到interface的uses单元中。
procedure tform1.loadjpgclick(sender: tobject);
var
fjpg : tjpegimage ;
fstream :tresourcestream ;
begin
fjpg :=tjpegimage.create ;
fstream := tresourcestream.create (hinstance,'资源标识符',rt_rcdata) ;
fjpg.loadfromstream (fstream) ;
image1.picture.bitmap.assign (fjpg);
end;
(6)存取资源文件中的wave
把mmsystem加入到interface的uses单元中
procedure tform1.loadwaveclick(sender: tobject);
begin
playsound('mywav', hinstance, snd_async or snd_memory or snd_resource) ;
end;
5.结束语
位图、光标和图标、avi动画、jpeg和wave文件等可以放到资源文件中,上面我们介绍了如何将资源加入到资源文件中,并介绍
了在delphi中动态存取资源文件的方法。delphi编译工程会自动创建一个和工程名相同的资源文件(如果没有其他的资源,主窗口的
图标会放在这个资源文件中)。但是建议最好不要改变这个资源文件。
======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/