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

学习Delphi资源文件

2011-08-29 00:39 330 查看
资源文件(*.res)通过编译指令$R关联,*.rc文件是资源文件(*.res)的源文件,在程序编译过程中会编译成同名的res文件。在Delphi中资源文件源文件的一般格式如下:资源标识(数字或者字符串格式) 资源类型(图标 位图 光标 菜单 WAVE等等) 文件真实路径。资源文件编写步骤如下:

1.编写RC源文件

用记事本或者其他文本编辑器或Delphi新建一个一个txt文件(File-New-other-text),保存时扩展名为RC。

icon1 Icon "E:\delphi\Res\leaf.ico"

bmp1 Bitmap E:\temp\duck.bmp

cur2 cursor E:\temp\static.cur

2.将RC文件编译成Res文件

将脚本文件和实际文件拷到Brcc32.EXE所在目录,执行DOS命令。格式为:Brcc32 脚本文件(回车),例如有一名为myfirst.rc的脚本文件,则执行 Brcc32 myfirst.rc(回车)即可。如果用Delphi新建的Txt当将RC文件加入Delphi工程后会自动编译成Res文件

3.在Delphi中加入资源文件

选择View-Project Manager,在Project Manager对话框中选择工程,点右键Add添加资源文件源文件(*.RC)

4.在Delph中调用资源

在资源文件调用中必须用到HInstance,它代表程序实例的句柄。

下面是一个资源文件综合使用的例子。

1.打开Delphi7新建工程,选择File-New-Other-Text。在Txt文件中输入如下代码

myIcon Icon "E:\delphi\Res\mail.ico"

mybmp Bitmap E:\temp\duck.bmp

mycursor cursor E:\temp\static.cur

MyMenu Menu

begin

Popup "File"

begin

MenuItem "&Open"

MenuItem "&Save"

MenuItem Separator

MenuItem "E&xit"

end

end

StringTable

begin

0 "AAAA"

1 "BBBB"

2 "CCCC"

3 "DDDD"

end

mysound wave E:\temp\eat.wav

MyFile1 RCDATA "c:\windows\system32\notepad.exe"

MyFile2 MyRes "c:\Windows\System32\calc.exe"

2.添加资源到工程文件。

3.调用资源文件源代码如下:

unit AllRes;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, Menus, cxLookAndFeelPainters, StdCtrls, cxButtons, ExtCtrls,

dxSkinsCore, dxSkinSummer2008, cxControls, cxContainer, cxEdit,

cxTextEdit, cxMemo, cxLookAndFeels, dxSkinsForm;

type

TResFrm = class(TForm)

btnIcon: TcxButton;

btnBmp: TcxButton;

btnCur: TcxButton;

img1: TImage;

btnMnu: TcxButton;

btnLoadStr: TcxButton;

btnLoadString: TcxButton;

memStr: TcxMemo;

btnWave: TcxButton;

btnWin: TcxButton;

btnUdefine: TcxButton;

procedure btnIconClick(Sender: TObject);

procedure btnBmpClick(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure btnCurClick(Sender: TObject);

procedure btnMnuClick(Sender: TObject);

procedure btnLoadStrClick(Sender: TObject);

procedure btnLoadStringClick(Sender: TObject);

procedure btnWaveClick(Sender: TObject);

procedure btnWinClick(Sender: TObject);

procedure btnUdefineClick(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

ResFrm: TResFrm;

implementation

{$R *.dfm}

uses MMSystem;

procedure TResFrm.btnIconClick(Sender: TObject);

begin

Application.Icon.Handle:=LoadIcon(HInstance,'myIcon');

//LoadIcon 是个 API 函数, 专门用于调用资源中的 ico 文件, 它返回的是指定 ico 文件的句柄.

end;

procedure TResFrm.btnBmpClick(Sender: TObject);

begin

img1.Picture.Bitmap.LoadFromResourceName(HInstance,'mybmp');

end;

procedure TResFrm.FormCreate(Sender: TObject);

begin

Screen.Cursors[1]:=LoadCursor(HInstance,'mycursor');

end;

procedure TResFrm.btnCurClick(Sender: TObject);

begin

btnCur.Cursor:=TCursor(1);

end;

procedure TResFrm.btnMnuClick(Sender: TObject);

var

hm:HMENU;

begin

hm:=LoadMenu(HInstance,'MyMenu');

SetMenu(Self.Handle,hm);

end;

procedure TResFrm.btnLoadStrClick(Sender: TObject);

begin

memstr.Lines.Clear;

with memStr.Lines do

begin

Add(LoadStr(0));

Add(LoadStr(1));

Add(LoadStr(2));

Add(LoadStr(3));

end;

end;

procedure TResFrm.btnLoadStringClick(Sender: TObject);

var

str:array[0..255] of Char;

begin

memStr.Clear;

LoadString(HInstance,0,str,SizeOf(str));

memStr.Lines.Add(str);

LoadString(HInstance,1,str,SizeOf(str));

memStr.Lines.Add(str);

LoadString(HInstance,2,str,SizeOf(str));

memStr.Lines.Add(str);

LoadString(HInstance,3,str,SizeOf(str));

memStr.Lines.Add(str);

end;

procedure TResFrm.btnWaveClick(Sender: TObject);

var

rs:TResourceStream;

begin

rs:=TResourceStream.Create(HInstance,'mysound','WAVE');

sndPlaySound(rs.Memory,SND_MEMORY or SND_ASYNC);

//PlaySound(rs.Memory,HInstance,SND_MEMORY or SND_ASYNC);

rs.Free;

end;

procedure TResFrm.btnWinClick(Sender: TObject);

var

rs:TResourceStream;

begin

rs:=TResourceStream.Create(HInstance,'MyFile1',RT_RCDATA);

rs.SaveToFile('E:\temp\notepad.exe');

WinExec('E:\temp\notepad.exe',1);

rs.Free;

end;

procedure TResFrm.btnUdefineClick(Sender: TObject);

var

rs:TResourceStream;

begin

rs:=TResourceStream.Create(HInstance,'MyFile2','MyRes');

rs.SaveToFile('E:\temp\sum.exe');

WinExec('E:\temp\sum.exe',1);

rs.Free;

end;

end.

程序运行截图如下:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: