在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