分享
 
 
 

让图片无迹可寻

王朝vb·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

提要:在我们的软件开发中,常常需要在界面上放置很多图片,这往往会造成可执行文件大小的大幅度增长。本文通过VB组件,将所需要的图片封装起来,从而减小可执行文件大小的目的。

关键字:资源、资源文件、VB组件、封装

程序员在开发软件的时候,常常需要很多图片来美化程序界面,工具栏,菜单等控件都会用到大量的图片,按照常规的方法,我们一般通过VB开发环境直接导入需要的图片,如BMP或图标文件;这样做的好处是方便简单,但也带来了大幅度增长主执行文件大小的麻烦。另一种方法是通过loadpicture函数动态加载指定目录下的图片文件,但把图片文件和主程序一起发布后很容易被误删。那么,有没有什么方法来防止这些情况的发生呢?

当然有。

资源是指可供我们使用的存储在计算机内的数据。包括字符串资源、图标资源、游标资源、位图资源以及自定义资源(可以是任意类型的文件,如.exe、.doc等类型的文件)。资源文件则是指用来存放各种资源的文件,资源文件源文件的扩展名为.rc,他是一个文本文件,使用任何文本编辑器都可以编辑。通过资源编译器编译后的文件扩展名是.res,简单的说,这个.res文件能把所有指定的资源全部包括进来,更形象一点,就像一个压缩文件包括很多个文件夹或文件一样。

VB6.0为我们提供了一个非常好用的工具——资源编辑器。该编辑器不需要我们写.rc文件而通过一种更直接更友好的可视化操作完成资源的编辑,保存后会自动生成.res文件。

资源文件生成后,我们创建一个ActiveX dll组件,并把该资源文件添加进来。然后,通过相关的函数把资源导出供主程序调用。

下面是整个操作过程。

1、 新建一个ActiveX DLL工程,工程名为:prjPictureRes

2、 依次打开:外接程序->外接程序管理器->VB6.0资源编辑器,双击,确定。此时,在工具栏上出现一个资源管理器的按钮。

3、 点击“VB资源编辑器”按钮,出现如下的资源编辑器窗口。

图1

4、 按图1所示,添加四个图标和一个位图,点击“保存”,将生成一个扩展名为.res的资源文件,我们将该文件命名为Myres.res。同时,工程资源管理器会出现一个“相关文档”的节点,如图2:

5、 在类模块class1中,我们写如下代码将相应的资源导出。

Public Function LoadRes(resID As Integer, ImgType As Integer) As IPictureDisp

Set LoadRes = LoadResPicture(resID, ImgType)

End Function

其中:参数resID为资源号,ImgType为图片类型(位图、图标或光标),这两个参数传入LoadResPicture()函数,下面,对LoadResPicture()简单讲解。

语法:

LoadResPicture(index as integer, format as integer) as IpictureDisp

参数:

index: 必需的。一个整数或字符串,它用来指定资源文件中数据的标识符 (ID) 。ID标识符为 1 的资源保留给应用程序的图标。

Format: 必需的。一个数值或常数,如下列“设置值”中所描述的,指定返回数据的格式:

常数 值 描述

VbResBitmap 0 位图资源

vbResIcon 1 图标资源

vbResCursor 2 光标资源

6、 编译成prjPictureRes.dll文件。至此,ActiveX DLL文件已经完成。

7、 接下来做一个测试工程,新建一个EXE工程,在窗体上放一个工具栏,用来显示.DLL文件中的图标;一个ImageList控件;一个图像控件(Image),用来显示.dll文件中的位图。界面如图3。

图3

8、 将刚才完成的prjPictureRes.dll组件通过“工程->引用”的方法加入到工程中。

9、 在窗体的Load事件中写如下代码:

Private Sub Form_Load()

Dim objRes As prjPictureRes.Class1

Set objRes = New prjPictureRes.Class1

Dim aImage As ListImage

'设置图标的高度和宽度

ImageList1.ImageHeight = 24

ImageList1.ImageWidth = 24

'往图像列表控件中添加图标(101、102、103、104为资源编号,下同)

Set aImage = ImageList1.ListImages.Add(, , objRes.LoadRes(101, vbResIcon))

Set aImage = ImageList1.ListImages.Add(, , objRes.LoadRes(102, vbResIcon))

Set aImage = ImageList1.ListImages.Add(, , objRes.LoadRes(103, vbResIcon))

Set aImage = ImageList1.ListImages.Add(, , objRes.LoadRes(104, vbResIcon))

'与工具栏关联

Set Toolbar1.ImageList = ImageList1

'添加工具栏按并设置图标

Dim aButton As Button

Set aButton = Toolbar1.Buttons.Add(, , "新建", , 1)

aButton.ToolTipText = "新建"

Set aButton = Toolbar1.Buttons.Add(, , "打开", , 2)

aButton.ToolTipText = "打开"

Set aButton = Toolbar1.Buttons.Add(, , "", tbrSeparator)

Set aButton = Toolbar1.Buttons.Add(, , "保存", , 3)

aButton.ToolTipText = "保存"

Set aButton = Toolbar1.Buttons.Add(, , "另存为", , 4)

aButton.ToolTipText = "另存为..."

'设置工具栏其他属性

Toolbar1.Style = tbrFlat '以Flat形式显示

'设置Image1控件属性

Image1.Stretch = True '图片自适应

'将位图资源加载到Image1控件中(105为资源编号)

Set Image1.Picture = objRes.LoadRes(105, vbResBitmap)

'释放资源

Set aImage = Nothing

Set aButton = Nothing

Set objRes = Nothing

End Sub

至此,大功告成,一起来欣赏一下我们的最终作品(图4)。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有