资源文件在DELPHI中的使用

2016-01-29 14:03 131 1 收藏

资源文件在DELPHI中的使用,资源文件在DELPHI中的使用

【 tulaoshi.com - Delphi 】

 
资源是存放在扩展名.RES的文件里的二进制数据结构,在DELPHI中资源文件可以使用图象编辑器来制作(IMAGEEDITOR),或者使用其他的工具。如:BORLAND公司提供的RADPACKFORDELPHI中的RESOURCEWORKSHOP来创建。资源文件中通常存放的是应用程序可以随时存取的一些对象,包括:ICON、CURSOR、BITMAP、FONT等近十种。大部分的资源在通常的情况下可以保留在磁盘当中,直到程序需要使用它们时才将其调入,可以大大的节省内存资源,同样,资源文件也是可以共享的,即:多个程序可以共享一个资源文件,进而减少了在应用程序之间代码重复的现象,使程序的代码得到很大的优化,因此在应用程序中使用资源文件有独立制作、方便、随时修改而不需要对应用程序代码做任何修改的好处。

一般来说,一个应用程序的所有资源都存放在一个RES文件里,然后在DELPHI进行编译的阶段将资源文件的内容与最终的EXE文件合并在一起,因此编译后的RES文件并没有什么作用,仅仅提供用来查阅使用,在分发应用时不必把RES文件分发给最终用户。当然,不同的资源可以分别放在不同的资源文件当中,而且资源文件越小调入内存的速度越快。在这里还要说明的一点是:在修改了原来的资源文件之后,在原来编译的EXE文件中加入的资源不会随之而更新,只有在重新进行编译以后,才能将新的资源加入到新的EXE文件当中去。

下面我们通过两个例子来说明在DELPHI中如何使用资源文件(在这里我们不讲述资源文件的制作方法)。

一、如何在DELPHI中使用定制的光标。
在使用DELPHI进行编程时,有一个很重要的对象──TSCREEN,它是用来管理和操纵运行时期屏幕的不可视构件。它的CURSOR属性是用来指定各个不同的构件光标形状,声名为:

PROPERTYCURSORS[INDEX:INTEGER]:HCURSOR;
这个只读的特性返回应用程序支持的光标组成的一个HCURSOR类型的数组,它存储了屏幕上所有的鼠标光标的身份代码(HCURSOR就是光标的HANDLE句柄),数组下标从0开始,在DELPHI预定义了一些代表不同光标的常量,它的值是从0到-17,您可以直接指定程序使用的光标。如:

FORM1.CURSOR:=-3表示FORM1采用的光标是CRCROSS(十字)。

大家可能都会发现构件的CURSOR的属性最多提供十八种常用的CURSOR值,这在很多的情况下是不够的,如:当光标进入一个PANEL面板时光标的形状为一只手,那么PANEL的CURSOR就不能满足这种要求,这时就需要我们自定义一个手的光标并将其赋给PANEL的CURSOR属性。如何实现则可以按以下步骤进行:

使用资源文件编辑器(IMAGEEDITOR或者RESOURCEWORKSHOP)编写资源文件。
定义一个光标常量,注意这个常量不能与DELPHI中提供的光标常量相冲突。
在FORMCREATE事件中使用WINDOWSAPI当中的LOADCURSOR函数来载入自定义的CURSOR。
在程序中将自定义的CURSOR分配给PANEL的CURSOR属性。
下面说明如何将自定义的一只手的鼠标光标赋给PANEL1的CURSOR属性。首先使用IMAGEEDITOR建立一个HAND.RES的文件。之后按如下书写程序代码:

implementation
{$R*.DFM}
const
Crhand=2;

procedure TForm1.FormCreate(Sender:TObject);
begin
screen.cursors[crhand]:=loadcursor(Hinstance,'hand');
panel1.cursor:=crhand;
end;

除了编写上面的代码以外,我们还需要做的一项工作是将资源文件加入到项目文件当中去,编译指令中的{$Rfilename}伪指令让我们来增加资源文件,让我们来看一看项目文件的代码。

program PCUR;
uses
Forms,
HANDin'HAND.pas'{Form1};

{$R*.RES}//这里的*意义为在程序编译以后会产生一个与项目文件同名的资源文件,在这里为PCUR.RES文件,这部分是自动产生的。

{$Rhand.res}//这部分是我们自己加入的自定义资源文件,这两个资源文件(HAND.RES和//PCUR.RES中的资源都会附加在可执行文件PCUR.EXE的后面。

begin
Application.Initialize;
Application.CreateForm(TForm1,Form1);
Application.Run;
end.

二、资源文件在编写动画程序中的应用
上面的例子使用的是在资源文件中存储的CURSOR资源,在下面的例子中我们将使用的是在资源文件中提供的ICON资源来编写一个小小的动画程序。在这里动画的产生是利用定时器在一定的时间间隔内产生TIMER事件将存储在资源文件中的ICON依次的绘制在FORM的同一处而产生的。这时要用到画布CANVAS的DRAW方法,其声明如下:

procedure Draw(X,Y:Integer;Graphic:TGraphic);

在这个方法当中的参数GRAPHIC可以为:BITMAPS、ICONS、METAFILES。具体的实现方法为:建立DEMO.RES文件,其中含有名为ICON1—ICON6的ICON。并将DEMO.RES加到项目原代码中去(如:上面例子的方法)。

动画程序的具体代码如下:

unit donghua;
interface
uses
Windows,Messages,SysUtils,Classes,Graphics,Controls,Forms,Dialogs,ExtCtrls;

type
TForm1=class(TForm)
Image1:TImage;
Timer1:TTimer;
procedure FormCreate(S

来源:http://www.tulaoshi.com/n/20160129/1492396.html

延伸阅读
在Delphi中,要调用Chm文件可以通过引用HHctrl.ocx文件的函数HtmlHelpA实现。 不过在这里,我们也可以使用API函数ShellExecute来打开Chm帮助文件。 在网上找到的资料,通常以 ShellExecute(self.Handle,'open','help.chm','', '',SW_SHOW);? 的方式来实现。 但有个不足,就是不能打开指定的帮助页面,所...
标签: Delphi
所谓文件切割,就是把一个文件切割成若干个小文件。做法就是将一个文件对象以"文件流"的方式读出,然后按照一定的块(Block)大小分别存成文件。文件组合,就是把若干个文件组合成一个文件。比如像打包工具(Wise)用到的就是这个原理。如果大家对"流"这个概念熟悉的话,那么实现起来就很容易了,以下就是实现步骤。 二、 实现 ...
在命令行中编译几个cs源文件,可能会这样写: csc.exe /out:.\bin\MyAssembly.dll /t:library /r:PATH1\FirstAssemblydll, PATH2\SecondAssemlbydll,etc src1.cs src2.cs etc 如果继续引用新的程序集或者创建新源文件,那么将不得不修改这行命令,当然也可以将这行命令放到一个.bat文件中,这样只需要修改.bat文件就可以继续编译了。不过还...
Sam在Android开发中,有两种处理资源文件的方式。其一,是将所有资源文件以及JNI程序放置于一个单独的资源包。使用到他们时,使用文件方式读取。或者直接使用C++层代码读取。 其二,则是将资源文件加入到APK内部。使用各种不同的办法去得到其内容。 方法一:适合于移植较大的C++程序时使用,因为C++代码数量众多,不太可能修改为JAVA代码。所以...
方法一 res/raw目录下存放,比如cwj.dat一个二进制文件,我们可以读取可以直接 代码如下: InputStream is=context.getResources().openRawResource(R.raw.cwj); 方法二 工程根目录下的assets文件夹中存放,比如assets/cwj.dat 这样我们使用下面的代码 代码如下: AssetManager am = context.getAssets(); InputStream is = ...

经验教程

246

收藏

71
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部