BC++Builder3.0中各种资源的利用
作者
李进
工作单位
烟台南大街建行科技部
在编写程序的过程中,经常要用到各种资源。比如说,想给自己的程序换个自己的图标,使用一些活泼的光标来增加趣味性,播放一些声音和动画文件,或者使用别人写好的程序来实现某个功能。我们往往希望将这些资源直接放到EXE文件中以形成一个单独的可执行文件,这就存在一个如何在运行时访问和使用这些资源的问题。
----在编译期间,这就要用到一种文件,以.rc结尾的资源定义文件。
----一:RC文件
---- rc文件是个文本文件,它的格式很简单,按如下格式定义:
----资源标识符资源类型资源的路径
----以下的rc文件定义了一个声音资源,两个光标资源,三个图标资源和一个exe文件资源。
src1.rc:
S1 WAV wav1.Wav
C1 CURSOR cursor1.cur
C2 CURSOR cursor2.cur
I1 ICON icone1.ico
I2 ICON icone2.ico
I3 ICON icone3.ico
unzip EXEFILE pkunzip.exe
----你可以将写好的rc文件加到你
的project(项目)中。你也可以手工将其编译为供程序直接使用的二进制资源文件(.res文件)。在BCB3.0中,可以使用命令行:brcc32 src1.rc src1.res。
----二:资源的使用
----下面,按照使用的简繁程度,依次说明各类资源的使用方法。需要说明的是,下面讲述的使用方法,在别的编译环境下(BC, VC等)也是一样的。
---- 1:建立一个新的项目
----启动BCB3.0,选FILE- >new- >Application 建立一个新的项目。
----在project- >Add to Project中,加入写好的src1.rc文件。当然,那些声音、光标、图标文件都应该存在。
----这时,我们有了一个空的窗体(Form)。
---- 2:能够利用windows API函数直接访问的资源有:
图标 LoadIcon()
光标 LoadCursor()
加速表 LoadAccelerators()
位图 LoadBitmap()
菜单 LoadMenu()
字符串 LoadString()
----前五个API函数使用方法都一样,带两个参数。
----第一个参数指明资源的存放地,第二个参数为rc文件中资源的标识。
----字符串LoadString除这两个参数外,还有两个参数,指明字符串缓冲区的地址和大小。
----下面的一小段程序示范了图标和光标的使用。
----在Form上放置一个按纽,在其OnClick事件中加入以下代码:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
//将光标形状改为自己定义的:
Screen- >Cursors[crDefault] = LoadCursor( HInstance, "C1");
//将图标改为自己定义的:
Icon = new TIcon() ;
Icon- >Handle = LoadIcon(HInstance,"I1");
Application- >Icon = Icon ;
}
----其中的HInstance指示资源所在地为执行文件。编译执行后,点击该按纽,光标和图标都会换成新的。
---- 3:能够通过windows API使用的资源
----对于声音、动画等文件,可以使用windows API函数播放。但是不象上面几种资源,需要遵循一定的步骤。如下所示,依次调用FindResource, LoadResource, LockResource函数,来播放一个Wav声音文件。
----(当然,独立的声音文件可以在运行时直接播放。我们这里讨论的是将wav文件编译进EXE文件的情况)
----在Form上放置第二个按纽,在其OnClick事件中加入以下代码:
void __fastcall TForm1::Button2Click(TObject *Sender)
{
//定义资源块
char *wav_handle ;
//装入Wav文件
HRSRC h = FindResource(HInstance,"S1","WAV");
HGLOBAL h1 = LoadResource(HInstance, h);
wav_handle = (char *)LockResource(h1);
//播放Wav文件。由于Wav文件装载在内存中,
sndPlaySound函数要用SND_MEMORY参数
sndPlaySound(wav_handle, SND_MEMORY | SND_SYNC);
}
----编译执行后,点击该按纽,会播放一次声音。
----对于动画等文件,使用方式类似Wav文件。(BCB提供了一个TAnimate控件,可以播放无声的Avi文件)
---- 4:不能直接通过windows API使用的资源
----此种资源不能够由windows API直接访问和执行。但是,我们可以用一种变通的方法来使用它。
----下面示范如何使用pkunzip.exe,思路如下:程序运行时,将pkunzip.exe从EXE文件中分离出来,放在临时目录下,用ShellExecute()执行它。
----在FORM上放置第三个按纽,在放置两个Edit ,用来输入pkunzip.exe的参数。
void __fastcall TForm1::Button3Click(TObject *Sender)
{
char exefile[100], tmppath[100] ;
unsigned long ret ;
//检查pkunzip.exe是否已经存在
GetTempPath( 100, tmppath ) ;
strcpy( exefile ,(AnsiString(tmppath)+
AnsiString("\\pkunzip.exe") ).c_str() ) ;
ret = GetFileAttributes( exefile ) ;
if( ret == 0xffffffff )
{ //不存在,则分离出pkunzip.exe
TResourceStream &rs = *new TResourceStream( (int)HInstance, AnsiString("unzip"),"EXEFILE" ) ;
rs.SaveToFile( AnsiString(exefile) ) ;
delete &rs ;
}
//执行pkunzip.exe
// Edit1- >Text和Edit2- >Text分别为运行时输入的zip文件名和目标文件目录。
ShellExecute(HInstance,"open", exefile, AnsiString("-d ") + Edit1- >Text + " " + Edit2- >Text).c_str(), tmppath, SW_HIDE ) ;
Application- >MessageBox("解压缩完成", "OK", IDOK ) ;
}
----此种方法实际上是用时间和空间来换取便利性,有一定的参考价值。例如,DynaDoc的免费分发版本,就是将真正的执行程序压缩后放在一个有解压缩功能的“壳”中。运行时,首先是“壳”运行起来,将真正的执行程序解压缩到临时目录,然后去运行它。如果你的程序含有大量的BMP,WAV文件,不妨一试,能让你的程序减肥不少。
分享到:
相关推荐
BCB(Borland C++ Builder)是 Borland 公司推出的一种集成开发环境,它基于C++语言,提供了可视化的组件编程模型,便于快速开发Windows应用程序。WinIO库在BCB中的使用,意味着开发者可以利用BCB的便捷性结合WinIO...
Borland的Turbo C/C++(TC1.0至TC++1.013.0)、Borland C++ Builder(BC3.0至6.0)等产品,曾是90年代非常流行的C++编译器。虽然现在市场份额有所下降,但其强大的编辑器和IDE功能仍然受到部分用户的喜爱。 #### ...
对于Borland C++ Builder用户,你需要将OpenGL的头文件和库文件添加到项目中。在BCB 3.0中,可以通过"Help|Customize"来定制OpenHelp设置,将OpenGL的帮助文件加入搜索范围。确保在编译时使用的DLL和lib文件版本一致...
后端基于PHP+mysql,简单实现了预订、入住、结账以及客户信息维护等功能。年代久远,注释较少,功能简陋,仅供学习交流。
springboot项目基于Hadoop的高校固定资产管理系统研究与实现_hot,含有完整的源码和报告文档
本文基于AlexNet深度学习模型,通过百度爬取的较少图片,训练了一个进行中草药的识别模型,可用于识别11种不同的中草药类型有:{'曼陀罗': 0, '白花蛇舌草': 1, '芍药': 2, '苍耳': 3, '蒲公英': 4, '薄荷': 5, '藿香': 6, '蛇莓': 7, '金银花': 8, '鸡蛋花': 9, '龙葵': 10}。并基于此模型开发了一款带UI界面的中草药智能识别系统,可用于识别场景中的中草药类别,更方便进行功能的展示。该系统是基于python与c++ QT5开发的,支持图片识别检测。本文提供了完整的Python代码和使用教程,给感兴趣的小伙伴参考学习。
springboot项目基于协同过滤算法的私人诊所管理系统_to,含有完整的源码和报告文档
图表分类ppt
图表分类ppt
Z源逆变器闭环仿真模型,并网,采用L滤波器。
西门子PLC1500大型程序 汽车产线fanuc机器人焊装 2台触摸屏TP1500程序 9个智能远程终端ET200SP Profinet连接 15个Festo智能模块Profinet通讯 10台Fanuc发那科机器人Profinet通讯 3台G120变频器Profinet通讯 2台智能电能管理仪表PAC3200 4个GRAPH顺控程序 图尔克RFID总线模组通讯 和MES系统通讯,西门子安全模块 程序经典,结构清晰,SCL算法,堆栈,梯形图 包含需要的GSD文件,博图V14以上版本均可打开,需要博图软件安装完整。 可以用来借鉴学习西门子大型程序的结构思路方法,通讯应用等
四轴抓取视觉旋转标定源代码,学习机器视觉和运动控制的最佳例子,基于VS2015 C++ 实现,仿雅马哈四轴机械手抓取程序,实现把两个任意摆放的物料通过视觉算法和运动控制指令定位摆放到指定的位置并拼接起来。 使用研华控制卡搭配工业相机实现,图像算法使用halcon实现,包含界面控制,图像采集,手动控制,图像建模,路径规划,运动仿真动画。 对需要做低成本替代进口机器人的四轴运动视觉方案的朋友具有极高的参考价值。
图表分类ppt
stm32 esp32 can大于8字节分包传输协议,支持ping节点功能
《PHP-Redis中文帮助手册》是由我突发灵感所编撰的参考资料。在编撰过程中,部分翻译内容参考了网络上的众多资料。遗憾的是,由于难以追溯,我无法确切知晓某些翻译内容的原始作者。在此,我向所有可能的贡献者表示感谢。 我自知英语水平和对Redis的使用经验都处于中等水平,因此手册中难免存在翻译误解和函数分类错误。我恳请读者们宽容使用此手册。同时,我热切期盼在文档翻译方面有经验的专家能够提供帮助。如果您有更优质的翻译,请不吝赐教,我将及时更新手册内容。我期待与大家进行更深入的交流。
===如资源质量问题,可半价退款,代下全网资源,价格公道==== 【JavaEE人事管理系统详解】 JavaEE是一个广泛应用的企业级开发平台,它由Java SE(标准版)扩展而来,专为构建分布式、多层架构的应用而设计。在这个“jsp+servlet+tomcat+mysql的javaee人事管理系统”中,我们主要探讨四个关键组件:JSP(JavaServer Pages)、Servlet、Tomcat服务器以及MySQL数据库。 1. **JSP**:JavaServer Pages是JavaEE平台的一部分,用于创建动态网页。开发者可以在HTML页面中嵌入Java代码,使得网页能够与服务器进行交互,处理用户请求。在人事管理系统中,JSP通常用于展示数据,如员工信息、部门列表等,并能根据用户的操作(如搜索、添加、编辑、删除员工)进行动态更新。 2. **Servlet**:Servlet是Java编写的服务器端程序,用于扩展Web服务器的功能。在本系统中,Servlet接收来自JSP的请求,执行业务逻辑,例如处理数据验证、计算、数据库操作等,然后将结。内容来源于网络分享,如有侵权请联系我删除。另外如果没有积分的同学需要下载,请私信我。
新能源plc程序 欧姆龙nj系列程序,注释完整,面向对象的编程方法 ,多轴控制,凸轮同步,设备已经正常使用软件资料出概不 此项目程序已经实际设备成熟稳定应用,程序注释详细、非常适合用来欧姆龙NJ PLC大型项目学习,包括plc程序程序运用ST语言和FB块,可用作欧姆龙NJ大型项目编程模板直接调用
BDE_Installer_for_RAD_Studio_10.2_Tokyo.7z
内容概要:本文档是关于希尔密码加密与解密的实验报告,旨在帮助学生理解和掌握这一经典的密码学技术。通过随机生成密钥矩阵并实施明文的加密与解密步骤,加深对希尔密码运作机制的理解,并通过文件I/O操作巩固数据处理技能。此外,在实验过程中,作者还深入探讨了对合密钥的特点,分析为何这种类型的密钥不适合应用于实际情况,并给出了可能存在的具体对合密钥总数的求解方法。 适用人群:适用于计算机科学专业、信息安全方向的学生或研究人员,特别是那些有兴趣深入了解经典密码系统及其实现细节的人群。 使用场景及目标:本报告不仅作为课程作业的一部分提交,而且也可以作为研究参考资料使用。读者可以通过这份详细的报告学习到希尔密码的具体实现步骤,包括但不限于密钥的选择、密文的创建和恢复。此外,针对实验中存在的局限性进行了讨论,为后续相关领域的进一步探索提供了思考方向。 其他说明:文档详细记录了一个完整的实验流程,涵盖从实验环境搭建、关键步骤演示到最后结果呈现全过程,并就实际遇到的问题给出改进意见。对于初次接触此类概念的学习者来说非常友好。附录中还包括了C语言源码用于检测2*2维度内的所有有效'对合密钥’实例,证明数学推导的结果。
【问题描述】 请根据给定的文法设计并实现语法分析程序,能基于上次作业的词法分析程序所识别出的单词,识别出各类语法成分。输入输出及处理要求如下: (1)需按文法规则,用递归子程序法对文法中定义的所有种语法成分进行分析; (2)为了方便进行自动评测,输入的被编译源文件统一命名为testfile.txt;输出的结果文件统一命名为output.txt ;结果文件中包含如下两种信息: 1)按词法分析识别单词的顺序,按行输出每个单词的信息(要求同词法分析作业,对于预读的情况不能输出)。 2)在下列高亮显示的语法分析成分分析结束前,另起一行输出当前语法成分的名字,形如“<常量说明>”(注:未要求输出的语法成分仍需要分析)