您的位置:首页 > 编程语言 > Delphi

Delphi 7资源文件的使用

2011-05-18 17:30 375 查看
在Delphi 7下没有VC下方便的RES资源编辑器,有一个Image Editor,但是功能有限,且支持的格式少。除了可以借用VC的资源编辑器和其他工具,我们还可以手动***资源文件。
每一个Delphi工程下,都有一个.res资源文件,这是保存应用程序图标等资源的文件。在工程项目文件里都有包含一个编译指令,可以在“Project”→“View Source”下查看。如下所示:

01
02
03
04
05
06
07
08
09
10
11
12
13
program Project1;

uses
Forms,
Unit1 in 'Unit1.pas' {Form1};

{$R *.res} {代表程序编译后,会产生一个与工程同名的资源文件}

begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
要***自己的资源文件,得先***.rc文件,因为.rc文件是资源的源文件。首先,在工程目录下新建一个专门放资源文件的文件夹,取名为“res”,再将图片、光标等资源放进此文件夹。然后,再新建一个文本文件,改名为“MyPicture.rc”,假设我们要***一张图片的资源文件(预先准备一张图片),那么在此文件中,输入以下内容:

1
myPic Bitmap "res//thePicture.bmp"
内容每列所代表的意思分别是:资源名称、资源类型、资源文件位置。接着,打开Delphi工程,点击“Project”→“Add to project...”,在弹出的选择文件对话框中,文件类型选择“Resource file (*.rc)”,然后选中刚才***的“MyPicture.rc”文件,如下图所示:



再看工程的项目文件,会发现自动增加了一行代码,如下所示:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
program Project1;

{$R 'MyPicture.res' 'MyPicture.rc'}

uses
Forms,
Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
所增加的那一行,表示在程序编译时,会自动将'MyPicture.rc'文件编译成'MyPicture.res'资源文件。接下去,我们试着在工程中调用资源文件。在窗体上放置一个Image控件,在窗体单元文件写入以下代码:

1
2
3
4
procedure TForm1.FormCreate(Sender: TObject);
begin
img1.Picture.Bitmap.Handle := LoadBitmap(HInstance,'myPic');
end;
编译后,在工程目录下多了‘MyPicture.res’文件。运行程序,效果如下图所示:



在Delphi 7下不需要使用brcc32.exe编译.rc文件成.res文件,直接将.rc加入工程即可。资源文件的类型除了位图,还可以是光标、声音、图标等等,并且支持自定义类型。对于普通资源文件的加载可以使用API函数:

1
2
3
4
5
6
7
LoadAccelerators;
LoadBitmap;
LoadCursor;
LoadIcon;
LoadImage;
LoadMenu;
LoadString;
对于其他类型的文件,比如jpg文件,可以使用流文件方式进行加载资源,如下所示:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
uses jpeg;

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
resStream: TResourceStream;
jpgPic: TJPEGImage;
begin
resStream := TResourceStream.Create(HInstance,'myPic2','jpeg');
jpgPic := TJPEGImage.Create;
try
jpgPic.LoadFromStream(resStream);
img1.Picture.Assign(jpgPic);
finally
jpgPic.Free;
resStream.Free;
end;
end;
参考资料:
1.http://hi.baidu.com/%D1%AA%BA%A3%B5%FB%D2%C2/blog/item/08f670c857925f137f3e6f32.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: