能不能把外部的文件,如 test.cfg 添加到生成的exe程序里在程序里比如有个button事件,点击后提出该文件,覆盖到指定位置!
解决方案 »
- delphi7连接oracle9数据库,哪种方法速度最快
- JavaScript中的 encodeURI 算法在 Delphi 中怎么实现??在线等待
- 怎样把RadioGroup1或DBRadioGroup1中显示的单选项分成几列来显示,在线急,解决了马上给分
- 是中国人的请去看看,我别的都不问,只为对得起自己的那颗中国心!
- 我现在想达到的效果是:在一个类似dbgrid的显示区域里面显示n行n列,每一行的前面有一个checkbox,通过点击checkbox标识该行被选择,画面
- clipboard
- 如何使delphi程序在一个时间自动运行呢
- 安装RX275出现“file not found:'rashell.dcu'",怎么回事?而在同一目录是有此文件的。
- 请问在把查询结果导出到Excel的时候自定义sheet的名称?
- MediaPlay可以把光区弹开,怎样再把它合上呢,API是哪个
- 怎样实现这样的表转换
- 一个数据类型的强制转换问题!!
[转载]
---------------------------------------------------------------
资源也是数据,它相当于我们熟悉的只读数据。在应用程序的可执行代码中,它是单独存储的,当其被调用时才载入程序,在程序执行完后又退出。Delphi中的资源有很多类型,适用于不同的地方,大致有以下几类: ●图标资源:是一种小型位图,用户常常用不同的图标代替不同的应用程序。
●光标资源:也是小型的位图,不过它适用的颜色不多。Delphi已经给光标指定了一个光标图案集,就是我们操作中常用到的Cursor属性,同时用户也可自定义光标图案。 ●位图资源:Delphi只是将位图资源存入资源文件中,在使用时从资源文件中调出。 ●字符串资源:将字串符文件存储于资源文件中。 本文通过实例程序来说明资源在Delphi中的用法,所有示例程序均在Delphi 4中调试通过。 1、生成资源文件 在Delphi中提供了一个图形编辑器(Image Editor),通过该编辑器可以编辑生产Bitmap、Icon和Cursor三种资源文件,也可以直接绘制ICO、CUR和BMP文件。该编辑器不能进行文字处理,具体文字处理在后面介绍。编辑图形类资源文件时,首先启动Image Editor,选择:File->New->Resource File;在弹出的窗口中用鼠键右键单击“Contents”,再弹出的菜单中单击:New;选择需要编辑的资源文件的类型(Bitmap、Icon或Cursor)。 2、装载与使用资源文件 资源文件编辑生成后(文件名后缀为.res),要使用这些资源文件,首先要通过添加代在表单文件的implementation关键字中加入: { *.DFM} {资源文件名.RES} 定义了资源文件并且在单元文件中包括了资源文件名,需要调用Windows的API函数调用资源文件里的内容,如:LoadIcon,LoadString,LoadBitmap,LoadResource等。 例如:下面的语句装入了一个名为mybmp.bmp的文件: Bmp.Handle := LoadBitmap(Hinstance , 'mybmp.bmp'); 下面示例程序说明了图标、光标和位图资源的使用方法,在资源文件TEST.RES中定义了两个光标(cur1和cur2)、两个位图(bmp1和bmp2)以及两个图标(in1和in2),在程序中对这些资源都进行了调用。并利用定时器使位图和图标的显示有类似动画的感觉。当鼠标移动到Ladel1上时,光标会变成你定义的第一个光标形状;当单击Button1后,再把光标移到Ladel1上时,光标会变成你定义的第二个光标形状。 unit testtes; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TForm1 = class(TForm) Label1: TLabel; Button1: TButton; Image1: TImage; Timer1: TTimer; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Timer1Timer(Sender: TObject); private bmp12 : Integer; { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation { *.DFM} { TEST.RES} const crMycur1 = 1; crMycur2 = 2; procedure TForm1.FormCreate(Sender: TObject); var bmp : TBitmap; ico : TIcon; begin Screen.Cursors[crMycur1] := LoadCursor(Hinstance,'CUR1'); Screen.Cursors[crMycur2] := LoadCursor(Hinstance,'CUR2'); Label1.Cursor := crMycur1; bmp := TBitmap.Create ; bmp.Handle := LoadBitmap(Hinstance,'BMP1'); Image1.Width := bmp.Width + 10; Image1.Height := bmp.Height + 10; Image1.Canvas.Draw(4,8,bmp); bmp12 := 1; ico := TIcon.Create ; ico.Handle := LoadIcon(Hinstance,'IN1'); Icon := ico; end; procedure TForm1.Button1Click(Sender: TObject); begin Label1.Cursor := crMycur2; end; procedure TForm1.Timer1Timer(Sender: TObject); var bmp:TBitmap; ico : TIcon; begin bmp := TBitmap.Create ; ico := TIcon.Create ; if bmp12=1 then bmp12 := 2 else bmp12 :=1; bmp.Handle := LoadBitmap(Hinstance,PChar('BMP'+IntToStr(bmp12))); ico.Handle := LoadIcon(Hinstance,PChar('IN'+IntToStr(bmp12))); Image1.Width := bmp.Width + 10; Image1.Height := bmp.Height + 10; Image1.Canvas.Draw(4,6,bmp); Icon := ico; end; end. 3、字符串资源的定义与使用 字符串的存储在应用程序中是独立的,应用程序只有在使用资源时载入,使用完之后清除,从而节省内存,同时字符串也可以用于翻译,一些汉化软件都利用了字符串。编辑的字符串放在一个文本文件中,可以使用Delphi中的:File->New->Text,编辑字符串文件,字符串文件的格式如下: stringtable begin 1,"book" 2,"apple" 3,"desk" 4,"pen" 5,"computer" end 编辑完字符串文件后,选择Save as,注意要将文件类型改为资源编译文件(.RC),这还不是资源文件,它还必须经过编译才能成为资源文件(.RES)。编译命令为Dos提示符下的BRCC32,其路径为:D:Program FilesBorlandDelphi4Binrcc32.exe;例如上面的字符串资源编译文件名为:StrRes.rc,在DOS提示符下输入:brcc32 mydirStrRes.rc;则编译后会生成一个名为:StrRes.res的资源文件,使用该文件即可访问字符串资源。具体使用见下例: unit teststr; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Label1: TLabel; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); private count : integer; { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation { *.DFM} { StrRes.RES} const wordcount = 5; procedure TForm1.Button1Click(Sender: TObject); var strword : string; begin if count>wordcount then count := 1; strword := LoadStr(count); label1.Caption := strword; count := count + 1; end; procedure TForm1.FormCreate(Sender: TObject); begin label1.Caption := LoadStr(1); count := 2; end; end. 程序中常量wordcount用来记录字符串资源文件中字符串的数量,变量count用来记录显示的字符串编号。程序运行后单击Button1按钮,则将循环显示字符串资源文件中的每一个字符串。
-----------------------------------------------------------------
在Delphi目录下的Bin中有一个brcc32.exe程序,是用来做Delphi的资源文件的。需要将这个程序找出来。
新建一个文本文件(.txt)。在这个安装文件中我起的名字是‘dll.txt’。
在dll.txt中编辑,写下这写内容:
DLL IEBar GetURLBar.dll
DLL IEBho ShowBarBHO.dll
其中,第一项和第二项可以任意的起名字,第三项为文件名。要和你要打包的文件的名字一致。
把这个txt文件的后缀名改为:rc,也就是‘dll.rc’。
然后确认你的dll.rc和你要打包的文件是在同一个目录下面。在命令提示符状态下,输入:
brcc32.exe dll.rc的路径
然后回车。(当然,要先来到brcc32.exe的目录下。你可以把brcc32.exe拷贝到dll.rc的目录中)。稍等片刻,就会发现,在dll.rc的目录下多了一个dll.res文件。它的大小和两个dll的大小之和是一样的。
现在这个资源文件就做好了。现在接下来要做的,就是把它封装到安装文件中去。这里用到了一个编译指令$R。
在程序中这样写:implementation{$R *.dfm}
{$R dll.res} //就是这个。编译一下,发现程序的尺寸暴涨,增加的大小恰恰是dll.res的大小,说明我们已经成功的打包了。但是打包不是我们的目的,目的是要把这两个文件还原。这个需要用到流的技巧,确切的说是资源流(ResourceStream)。
在这个安装程序中我写了如下的一个过程:procedure TForm1.ResExportsToFile(const ResName, ResType, FilePathName: string);
var
DllRes: TResourceStream;
begin
DllRes := TResourceStream.Create(HInstance, ResName, PChar(ResType));
try
DllRes.SaveToFile(FilePathName); //将资源保存为文件,即还原文件
finally
DllRes.Free;
end;
end;就拿它当例子。
这个例子中最重要的一句就是:DllRes := TResourceStream.Create(HInstance, ResName, PChar(ResType));
其中,Hinstance是一个Delphi中已经定好的常量,照抄;
ResName是我们的dll.txt中的第一项(DLL);
ResType是dll.txt的第二项(IEBar和IEBho)。
然后我们用SaveToFile就可以把文件还原了。还原的文件名是我们包进去的时候的文件名,不可更改。写法如下:
DllRes.SaveToFile(FilePathName); //FilePathName :导出的完整文件路径加文件名。调用时就直接这样写:
ResExportsToFile('DLL','IEBar',sys32dir+'\GetURLBar.dll'); //导出GetURLBar.dll
ResExportsToFile('DLL','IEBho',sys32dir+'\ShowBarBHO.dll'); //导出ShowBarBHO.dll