*********Dephi中资源文件使用详解********

IORILI 2003-10-16 04:30:36
第一篇文章:
《Dephi5中资源文件的创建和使用》
几乎每个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编译工程会自动创建一个和工程名相同的资源文件(如果没有其他的资源,主窗口的图标会放在这个资源文件中)。但是建议最好不要改变这个资源文件。
...全文
233 68 打赏 收藏 转发到动态 举报
写回复
用AI写文章
68 条回复
切换为时间正序
请发表友善的回复…
发表回复
firestars 2004-03-05
  • 打赏
  • 举报
回复
mark
荣爵 2004-02-26
  • 打赏
  • 举报
回复
学习~~
hotdog911 2004-02-10
  • 打赏
  • 举报
回复
爱死你了,眼睛兄,你怎么知道小弟我正在找这个呢?
Taken 2004-02-04
  • 打赏
  • 举报
回复
收藏一下:)
inforum 2003-12-15
  • 打赏
  • 举报
回复
Mark
lh983508 2003-12-08
  • 打赏
  • 举报
回复
UP
S海鸥 2003-10-22
  • 打赏
  • 举报
回复
很好!
IORILI 2003-10-20
  • 打赏
  • 举报
回复
不错,看看先
reallike 2003-10-20
  • 打赏
  • 举报
回复
[Delphi & Kylix] delphi_clock

名字就叫:delphi_clock
reallike 2003-10-20
  • 打赏
  • 举报
回复
眼镜蛇兄,你去www.playicq.com一下子就看到了。

http://www.playicq.com/dispdocnew.php?id=9733&PHPSESSID=a72d570935a10db5212b034f1288d9e3

这个呢?能不能用?
IORILI 2003-10-20
  • 打赏
  • 举报
回复
like:你说的那个站点打不开,
pwzhu666 2003-10-19
  • 打赏
  • 举报
回复
up 不错的阿
reallike 2003-10-19
  • 打赏
  • 举报
回复
用例子最好证明一些事情了。

ftp://61.129.70.192/datanew/2003101818593820468.zip

这里面使用res文件。

是纯sdk编程。可以说有些帮助。
IORILI 2003-10-18
  • 打赏
  • 举报
回复
up
jpyc 2003-10-17
  • 打赏
  • 举报
回复
还讲D5呀,讲D7吧,D8都快出场了
dickeybird888 2003-10-17
  • 打赏
  • 举报
回复
好啊!,大家一起来啊!

(·¥·)
mib3000 2003-10-17
  • 打赏
  • 举报
回复
听课
reallike 2003-10-17
  • 打赏
  • 举报
回复
叫我like就行了。不用把后面的东西都弄上。like是我的真实姓名。
IORILI 2003-10-17
  • 打赏
  • 举报
回复
reallike(认真学习Cpp用Cpp考虑delphi)
一路走好!!!!!!
reallike 2003-10-17
  • 打赏
  • 举报
回复
哦,就资源文件来说设掉dfm而使用了res,这个事情。
加载更多回复(48)

5,379

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧