您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > Dephi中资源文件的应用
Dephi中资源文件的应用一、引子:现在的Windows应用程序几乎都使用图标、图片、光标、声音等,我们称它们为资源(Resource)。最简单的使用资源的办法是把这些资源的源文件打入软件包,以方便程序需要的时候调用。资源是程序的一部分,程序要正常运行就离不了资源文件。但是它是不可执行代码。为了更好地管理资源,Delphi中提供了一种.RES类型的资源文件。它可以把我们程序中所需要的资源整合到一个资源文件(.RES)下来。在编译应用程序时直接编译进了可执行程序里,成为应用程序的整合体。这样做的好处是:1。由于定位资源比在磁盘中定位文件花费时间少,所以应用程序执行会更快。2。多种资源可以放在一个文件中,减少了图标、图片、光标、声音等文件数量。不用怕用户在使用过程中的不小心而损坏了资源文件致使程序无法正常运行。缺点是:因为资源文件的加入从而加大了编译出的可执行程序的字节数,当资源文件较大时会使应用程序变得看起来雍肿。使用资源文件的优点很显著,其缺点也很突出。所以在实际应用中就要根据情况权衡利弊、灵活使用,这已不在本文的讨论之列。下面仅就Delphi系统编程中对于资源文件的使用方法做一个大致的总结。二、创建资源文件:注意事项:创建的资源文件名不要和工程名相同,因为Delphi创建工程时会自动创建一个和工程名相同的资源文件。并且最好将资源文件保存到和工程文件同一个文件夹中。1.首先创建一个.Rc的纯文本文件。格式如下:资源标识符关键字资源文件名格式说明:①资源标识符:程序中调用资源时的特定标号;②关键字:标识资源文件类型;例如:Wave:资源文件是声音文件;RCDATA:JPEG文件;AVI:AVI动画;ICON:图标文件;BITMAP:位图文件;CURSOR:光标文件;RMI:RMI音乐文件;MIDI:MIDI音乐文件③资源文件名:加入的资源文件名(要带扩展名,可以带路径名构成全文件名);④举例:MyWavWAVEFileName.WavMyMIDMIDIC:\MyDocuments\mymusic\canyon.MIDMyAVIAVISpeedIs.AVI例中资源文件名可以不加引号。假设我们把上述三行保存成Sample.RC文件。2。使用Borland资源编译器(BRCC32.EXE)转化.Rc文件成.Res文件。在DOS命令行下输入下列命令:C://转在C:驱CD\//退回根目录CD\ProgramFiles\Borland\Delphi7\Bin//进入BRCC32.EXE的所在目录Brcc32Sample.Rc//把Sample.RC转换成资源文件Sample.RES注意转换前需要把Sample.RC文件中指定的未带全路径名的文件Copy进当前目录C:\ProgramFiles\Borland\Delphi7\Bin中来,才可保证转成.RES文件不出错。如果转换过程没有报错,则成功。三、引用资源文件把上一步骤生成的资源文件Sample.RES放到要建立的工程的同一个目录中来。为了存取我们的资源文件,必须告诉Delphi链接我们的资源文件到应用程序中。因此要在源代码中加入一条编译指令完成上述功能。这条指令必须紧跟在窗口指令后,如下形式:{$R*.DFM}//Delphi自带编译指令{$RSample.RES}//新加入的编译资源文件的指令不要删除{$R*.DFM}指令,因为这行代码告诉Delphi链接下面的资源到窗口的资源中。四、调用资源文件1。存取资源文件中的位图(Bitmap)程序中如果想存取资源,必须调用一些WindowsAPI函数。保存在资源文件中的位图、光标和图标可以通过调用LoadBitmap、LoadCursor和LoadIcon函数存取。现举例说明如何存取资源文件中位图并显示在Timage控件中。procedureTfrMain.btnCanvasPic(Sender:TObject);beginImage1.Picture.Bitmap.Handle:=LoadBitmap(hInstance,'资源标识符');end;注:如果位图没有装载成功,程序仍旧执行,但是Image将不再显示图片。可以根据LoadBitmap函数的返回值判断是否装载成功,如果装载成功返回值是非0,如果装载失败返回值是0。另外一个存取显示位图的方法如下:procedureTfrMain.btnLoadPicClick(Sender:TObject);beginImage1.Picture.Bitmap.LoadFromResourceName(hInstance,'资源标识符');end;2。存取资源文件中的光标Screen.Cursors[]是一个光标数组,使用光标文件我们可以将定制的光标加入到这个属性中。因为默认的光标在数组中索引值是0,所以除非想取代默认光标,最好将定制的光标索引值设为1。procedureTfrMain.btnUseCursorClick(Sender:TObject);beginScreen.Cursors[1]:=LoadCursor(hInstance,'资源标识符');Image1.Cursor:=1;end;3。存取资源文件中的图标将图标放在资源文件中,可以实现动态改变应用程序图标。procedureTfrMain.LoadIconClick(Sender:TObject);beginApplication.Icon.Handle:=LoadIcon(hInstance,'资源标识符');End;4。存取资源文件中的AVI在工程中添加一TAnimate控件(在Win32控件面板上),在需要的地方加入:procedureTfrMain.LoadIconClick(Sender:TObject);beginAnimate1.ResName:='MyAvi';//资源标识Animate1.Active:=True;End;实践中的一点结果:并不是所有的AVI资源都可以用TAnimate组件来播放,编定程序时要测试。遇到不能用TAnimate组件来播放的AVI资源,则可以把它从资源文件里分离出来,再使用相应的播放组件比如TMediaPlayer来播放。使用完再把分离出来的临时文件删除掉。可以参考后面“7。”的说明。5。存取资源文件中的JPEG把jpeg单元加入到Interface的uses中。procedureTForm1.LoadJPGClick(Sender:TObject);varFjpg:TJpegImage;FStream:TResourceStream;beginFjpg:=TJpegImage.Create;FStream:=TResourceStream.Create(hInstance,'资源标识符',RT_RCDATA);FJpg.LoadFromStream(FStream);Image1.Picture.Bitmap.Assign(FJpg);end;6。存取资源文件中的Wave把MMSystem加入到Interface的uses中procedureTForm1.LoadWaveClick(Sender:TObject);beginPlaySound('MyWav',hInstance,Snd_ASyncorSnd_Memoryorsnd_Resource);end;实践中的一点结论:PlaySound()的参数Snd_ASync表示异步播放方式,Snd_Sync表示同步播放方式。(1)当采用异步方式的时候,WAV资源可以作为背景音乐来应用;但是当有连续多次异步调用的时候,则可能会丢弃最后一次调用之前的所有播放,用户得到的效果只是最后一次调用的声音。(2)当采用同步方式的时候,WAV资源会独占资源,导致WAV文件未播放完之前用户无法对应用程序进行任何操作,直至它的调用结束。所以如果有大的同步WAV资源时,会造成应用程序界面的停滞。但是这种方式却可以连续地一个不漏地执行多次调用。7。其他资源的调用:可以把资源文件中的源文件分离出来,建立一个临时的物理文件存在于应用程序路径下,然后可以用相应类型的组件来或方法来使用该文件。当程序退出时再不忘把该临时文件删除掉。例如:vartmpDirectory:string;myres:TResourceStream;begintmpDirectory:=ExtractFilePath(paramstr(0));ifnotFileExists(tmpDirectory+'Music1.RMI')thenbeginmyres:=TResourceStream.Create(hinstance,'music1','RMI');myres.SaveToFile(tmpDirectory+'Music1.RMI');//从资源文件中分离出来myres.Free;。。。。。。。。。。end;程序退出的时候删除:ifFileExists(tempDirectory+'music1.RMI')thenDeleteFile(tempDirectory+'music1.RMI');五、结束语位图、光标和图标、AVI动画、JPEG和Wave文件等可以放到资源文件中。上面我们介绍了如何将资源加入到资源文件中,并介绍了在Delphi中动态存取资源文件的方法。Delphi编译工程会自动创建一个和工程名相同的资源文件(如果没有其他的资源,主窗口的图标会放在这个资源文件中)。但是建议最好不要改变这个资源文件。第二篇文章:《谈Delphi编程中资源文件的应用》[来源:陈经韬](一)初级应用篇:资源文件一般为扩展名为res的文件.在VC中资源文件用得非常普遍,但Delphi在其联机帮助中对资源文件没作什么介绍,其实利用其自带的资源编译工具BRCC32.EXE(一般位于\Delphi\BIN目录下),我们完全可以做出跟VC一样效果的文件来。资源文件最大的好处是能将一些在必要时才调用的文件跟可执行文件一起编译,生成一个文件.这样做最大的好处就是使外部文件免遭破坏.例如在一条程序中你要临时调用一幅图片,一般作法是把图片放在某一路径下(通常是主程序所在路径),但如果用户路径误删你的图片文件,则可能使程序找不到相应文件而出错崩溃.另外,如果你想自己的程序界面美观,想用一些自定义光标,也要用到资源文件。资源文件的使用步骤为:1.编写rc脚本文本用记事本或其它文本编辑器编写一个扩展名为rc的文件。例如:mycurcursormove.cur//加入光标mypicBitmapWater.BMP//加入位图mywavWAVEhappy.wav//加入声音myAVIAVIEPOEN.AVI//加入视频myIcoICONCJT.ICO//加入图标格式分别为在资源文件中的名称-类型-实际文件名称,例如上面第一行定义一个名为mycur的光标,实际名称为加入光标move.cur.2.将rc文件编译成res资源文件将脚本文件和实际文件拷到Brcc32.EXE所在目录,执行DOS命令。格式为:Brcc32脚本文件(回车),例如有一名为myfirst.rc的脚本文件,则执行Brcc32myfirst.rc(回车)即可。如果你是懒人,也可新建一批处理文件,内容只有一行:Brcc32mufist.rc.(因为Delphi安装后一般会在自动批处理文件中指明搜索路径的。)如果编译成功,则会生成一个结尾为res的文件,这个文件就是我们需要的资源文件。3.在Delphi单元中加入资源文件将生成的res资源文件拷贝到你所编程序的路径下,在单元文件{$R*DFM}后加上一句{$Rmufirst.res},则将res文件加入去,编译后资源文件即已包含在可执行文件中了。若你有多个资源文件,也按上法依次加入。4.在Delphi程序中调用资源文件资源文件在Delphi中的关键字为hinstance.下面给出具体用法.1光标的调用首先在程序中定义一个值大于0的常量,因为Delphi本身用0-负16来索引默认的光标,所以我们
本文标题:Dephi中资源文件的应用
链接地址:https://www.777doc.com/doc-2909229 .html