学习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.
程序运行截图如下:
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.
程序运行截图如下:
相关文章推荐
- Delphi学习使用资源文件 - DLL 中的资源文件[组图]
- Maven学习-处理资源文件
- Struts的资源文件时如何初始化的--struts源码学习
- asp.net core合并压缩资源文件引发的学习之旅
- Delphi传奇之 Delphi/Pascal程序设计教程及学习资源下载汇总
- Delphi之使用资源文件(Using Resource Files)
- delphi 将Dll等生成资源文件
- Servlet学习总结(8)----读取ClassPath下的资源文件
- 如何在C#中使用内嵌资源文件(转载学习)
- Delphi修改资源文件的代码
- Delphi的资源文件
- VS下QT学习笔记-使用.qrc资源文件
- 把EXE可执行文件等作为资源包含在Delphi编译文件中
- 在 Delphi 下使用 DirectSound (7): 播放资源文件中的 Wave 数据
- Delphi 中把文本文件装入资源文件中
- 资源文件相关学习总结
- Android 学习 之 资源文件 动态修改strings.xml中的字符资源
- Delphi使用资源文件全攻略
- YII Framework学习教程-YII的V-view的themes、资源文件(图片、JS、CSS)-2011-11-17
- 学习使用资源文件- 鼠标指针资源(转自万一老师博客)