永发信息网

各位高手,我想问一下,在Delphi中调用资源文件到底怎么做啊???

答案:2  悬赏:20  手机版
解决时间 2021-04-06 23:07
我看了网上的很多教程,可是自己做的时候怎么也编译不成功!在用brcc32 *.rc的时候老是出现"Error Could not open input file *.rc"这样的错误!你能告诉我详细的步骤吗?一步一步的!比如说我喜爱那个在想、资源文件中加入一个exe程序,具体要怎么操作和代码怎么写??
目前我的悬赏分只有这么多了,拜托了!!!!
最佳答案
需要文件:
brcc32.exe:打包工具
temp.rc:资源文件
批处理文件:Res.bat
khgl.bak:要打包的文件
把上面文件放到同一个目录下。

步骤:
1、编辑temp.rc文件,其内容为:
khgl bak khgl.bak
2、编辑批处理文件,内容为:
brcc32 temp.rc
3、执行批处理,生成打包的资源文件,名称为:temp.res

把 temp.res拷贝到执行程序路径下发布。
发布步骤:
1、增加编译选项:
{$R Temp.RES}

2、提取资源:
//通过对象名称和扩展名,从资源中提取文件保存到SaveFile
procedure Res_Object_Load(ObjectName, ObjectExe,SaveFile: String);
var
ResHandle : THandle;
MemHandle : THandle;
MemStream : TMemoryStream;
ResPtr : PByte;
ResSize : Longint;
begin
ResHandle := FindResource(hInstance, PChar(ObjectName), PChar(ObjectExe));
MemHandle := LoadResource(hInstance, ResHandle);
if MemHandle > 32 then
begin
ResPtr := LockResource(MemHandle);
MemStream := TMemoryStream.Create;
ResSize := SizeOfResource(hInstance, ResHandle);
MemStream.SetSize(ResSize);
MemStream.Write(ResPtr^, ResSize);
FreeResource(MemHandle);
MemStream.Seek(0, 0);
MemStream.SaveToFile(SaveFile);
MemStream.Free;
End;
end;
全部回答
我写过一个循环显示位图的例子,mysor.rc文件中是这样的: my1 bitmap 1.bmp my2 bitmap 2.bmp my3 bitmap 3.bmp my4 bitmap 4.bmp 编译产生了mysor.res文件,winxp+delphi7运行正常。你可以看一下: unit unit1; interface uses windows, messages, sysutils, variants, classes, graphics, controls, forms, dialogs, extctrls, stdctrls; type tform1 = class(tform) start: tbutton; image1: timage; timer1: ttimer; stop: tbutton; procedure timer1timer(sender: tobject); procedure startclick(sender: tobject); procedure stopclick(sender: tobject); private { private declarations } public { public declarations } end; var form1: tform1; num:integer; implementation {$r mysor.res} {$r *.dfm} procedure tform1.formcreate(sender: tobject); begin num:=1;//初始值为1,读资源文件中第一个bmp end; procedure tform1.timer1timer(sender: tobject); var mybmp:hbitmap; s:string; begin if num<>4 then begin s:='my'+inttostr(num); mybmp:=loadbitmap(hinstance,pchar(s)); image1.picture.bitmap.handle:=mybmp; num:=num+1; end else begin s:='my'+inttostr(num); mybmp:=loadbitmap(hinstance,pchar(s)); image1.picture.bitmap.handle:=mybmp; num:=1; end; end; procedure tform1.startclick(sender: tobject); begin timer1.enabled:=true;//开始 end; procedure tform1.stopclick(sender: tobject); begin timer1.enabled:=false;//停止 end; end. “尽信书,不如无书”,网上很多例子也不尽然完全正确,偶尔有些地方是不太准确的,需要你自己去修改滴。李维老师的书还得出《勘误》呢,更还况网上是免费的! 全局变量pic中没有必要把你的资源文件名都放进去了,因为image1.picture.bitmap.loadfromresourcename()本身就是从资源文件中load图片,干嘛还要放资源名?肯定会找不到的。 你把你的代码换成下面的: var pic:string; begin if idx<4then idx:=idx+1 else idx:=1; pic:='b'+inttostr(idx); //注意这里的变化 image1.picture.bitmap.loadfromresourcename (hinstance,'pic'); end)
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
抗洪精神的内容
网络游戏代言对网游的推广起到什么作用,为一
女孩们用语音说一段话,谁的声音最好听,就成
—Was it last summeryou luckily got an opp
税法中说的境内境外是什么意思?
丝竹的意思,丝竹是什么意思
对付贱人同学的方法
“亡”下一个“口”左下面一个“月”中间一个
魔兽世界新手猎人宏命令问题,弄个例子出来,
适合挂客厅的书法诗词,适合挂在客厅的书法写
超过还款期限后还款一部分是否按此期限算诉讼
饥荒联机版怎么没显示DLC
没有病症的时候聚维酮碘溶液可以作为日常护理
江西旅行路线,求达人分析!
三国志11城市修改器下载以后怎么用
推荐资讯
I am the boy who love you 这里的love需要加
辽宁地区的草绿了吗,现在2018年4月24
从德州坐火车到佳木斯得多长时间
求助,4.5米光威竹山鲫钓鲫鱼怎么样
足球比赛里,两个同城球队比赛,为什么称作“
国槐如何截干
加工一种零件,小王原来每三小时加工100个,
我的世界村民交易攻略_我的世界村民怎么交易
关于杜甫人物成语的故事
看图猜成语:一个灯炮,两颗葱一个人头
永远的反义词是?
按要求写出下列物质的化学式:(1)空气中存
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?