如何读取.res文件

Metawolf 2004-10-13 04:49:31
请教
如何用程序读取.res文件中的信息
就是读取一个独立的.res文件,不是编译到程序里的
里面是我自己用brcc32编译的图片资源
谢谢
...全文
690 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
ghiewa 2004-10-22
  • 打赏
  • 举报
回复
先编译好res文件

下面就
TResourceStream *rs1 = new TResourceStream((int)HInstance,AnsiString("XSL1"),"EXEFILE");
TResourceStream *rs2 = new TResourceStream((int)HInstance,AnsiString("XSL2"),"EXEFILE");

TResourceStream *rs3 = new TResourceStream((int)HInstance,AnsiString("IMG1"),"EXEFILE");
TResourceStream *rs4 = new TResourceStream((int)HInstance,AnsiString("IMG2"),"EXEFILE");
TResourceStream *rs5 = new TResourceStream((int)HInstance,AnsiString("IMG3"),"EXEFILE");
TResourceStream *rs6 = new TResourceStream((int)HInstance,AnsiString("IMG4"),"EXEFILE");
TResourceStream *rs7 = new TResourceStream((int)HInstance,AnsiString("IMG5"),"EXEFILE");
TResourceStream *rs8 = new TResourceStream((int)HInstance,AnsiString("IMG6"),"EXEFILE");
TResourceStream *rs9 = new TResourceStream((int)HInstance,AnsiString("IMG7"),"EXEFILE");
TResourceStream *rs10 = new TResourceStream((int)HInstance,AnsiString("IMG8"),"EXEFILE");
TResourceStream *rs11 = new TResourceStream((int)HInstance,AnsiString("IMG9"),"EXEFILE");
TResourceStream *rs12 = new TResourceStream((int)HInstance,AnsiString("IMG10"),"EXEFILE");
try
{
rs1->SaveToFile(xsl1);
rs2->SaveToFile(xsl2);

rs3->SaveToFile(img1);
rs4->SaveToFile(img2);
rs5->SaveToFile(img3);
rs6->SaveToFile(img4);
rs7->SaveToFile(img5);
rs8->SaveToFile(img6);
rs9->SaveToFile(img7);
rs10->SaveToFile(img8);
rs11->SaveToFile(img9);
rs12->SaveToFile(img10);
}
__finally
{
delete rs1;
delete rs2;
delete rs3;
delete rs4;
delete rs5;
delete rs6;
delete rs7;
delete rs8;
delete rs9;
delete rs10;
delete rs11;
delete rs12;
}
以前作的 也没有改你参考参考了
FallenAngel 2004-10-13
  • 打赏
  • 举报
回复
其实你用dll来保存,更方便
Metawolf 2004-10-13
  • 打赏
  • 举报
回复
首先谢谢3996906
不过我的意思是想直接读取res文件
因为如果选取二套不同的图标方案
要不编译二个exe文件.要不在exe文件中放入二套图标
所以想把资源文件放到exe文件的外部
3996906 2004-10-13
  • 打赏
  • 举报
回复
转贴一个

怎样使用资源文件
作者: ---------- ,如转载请保证本文档的完整性,并注明出处。
欢迎光临 C++ Builder 研究,http://www.ccrun.com/doc/go.asp?id=157
下面介绍如何将光标和声音作为资源编译到可执行文件中,及其使用方法。

第一步:建立一个rc文件.
例如:zpg.rc,内容如下:
DemHint WAVE D:\Zpg2000\Res\DemHint.wav
PrintType BITMAP D:\Zpg2000\Res\PrintType.bmp
ArrowDown BITMAP D:\Zpg2000\Res\ArrowDown.bmp
ArrowUp BITMAP D:\Zpg2000\Res\ArrowUp.bmp
ZoomIn CURSOR D:\Zpg2000\Res\ZoomIn.cur
ZoomOut CURSOR D:\Zpg2000\Res\ZoomOut.cur

其中第一行为资源名称,第二行为资源类型,第三行为一个存在的文件名.

第二步:编译这个文件.

>BRCC32 zpg.rc
BRCC32.exe 在.../borland/C++ Builder6/bin/目录下,
编译后生成一个资源文件zpg.res

第三步:在程序中声明对资源的使用

在程序中要用到这些资源的单元的#pragma resource "*.dfm"语句后前面添上
#pragma resource "zpg.res"
有时还需添上#pragma package(smart_init)
或在工程主CPP文件中添上
USERES("Zpg.res");
最后怎样调用这个资源呢?看:

调用位图:
Graphics::TBitmap *pBitmap=new Graphics::TBitmap;
pBitmap->LoadFromResourceName((unsigned int)HInstance,"PrintType");

播放声音:
PlaySound("DemHint",HInstance,SND_RESOURCE);

改变光标:
Screen->Cursors[crZoomIn]=LoadCursor(HInstance,"ZoomIn");
//crZoomIn为自定义的光标常量,习惯上为>0的数,而系统定义的一般<0
PaintBox->Cursor=(TCursor)crZoomIn;
Application->ProcessMessages(); //确保光标立即改变
注意:
资源文件只在设计期有用,程序编译后,这些资源就被编译到可执行文件中了,所以程序分发时不必带上资源文件。

13,874

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧