.resVB所支持的资源文件必须以.res为扩展名,否则VB将无法正确识别。只要在项目文件中加入.res文件,就可以在程序中调用.res文件中的资源了。在生成EXE文件时,.res文件所包含的资源也会自动包含于其中。需要注意的是16位版本和32版本使用的资源文件是不同的,不能混用。 ---- 制作.res文件,一种方法是使用VC++、Delphi等软件的资源编辑工具,它们可以直接编辑.res文件。不使用C++或其它工具的VB用户也可以采用另一种办法:先建立脚本文件.rc,然后用rc.exe编译成.res。VB 5.0以上的用户可以在Wizard子目录中找到rc.exe(如果使用VB4,可以在VB4的光盘上找到这个工具)。对于新手来说,手工建立.rc文件可能有些麻烦,可以考虑使用ResEdit。ResEdit这个资源编辑器并不包括在VB中,而应该从微软的站点上下载,地址是:http://premium.microsoft.com/vbasic/updates/ResEdit.asp。请注意,如果你以前没有访问过http://premium.microsoft.com/vbasic/,你需要先免费注册,注册过程中要输入VB的序列号(就是VB的About对话框中显示的那个序列号)。下载后,安装这个工具,你就可以在“外接程序管理器”找到它了。这个工具功能不是很强,但比手工编辑.rc文件简单多了。
VB为支持.res资源增加了三个函数:LoadResPicture()、LoadResString()和LoadResData()。 ---- LoadResPicture()函数用于调入位图、图标和光标资源,其作用非常类似LoadPicture()函数,不过LoadPicture是从磁盘文件中读取图形。LoadResPicture的格式为: LoadResPicture(资源ID号,资源类型)---- 资源类型可为vbResBitmap、vbResIcon、vbResCursor,分别对应着位图、图标和光标三种资源。得到的图形可以直接赋与Picture属性,或在使用PaintPicture方法时使用。 ---- LoadResString()函数用于调入字符串资源。字符串资源对于开发多语种软件比较有用。其使用格式为: LoadResString(资源ID号)
LoadResData()函数可以调入各种资源。使用格式为:
LoadResData(资源ID号,资源类型)----
这里资源类型取值的含义如下表所示:
1 光标 2 位图 3 图标
4 菜单 5 对话框 6 字符串
7 字体目录 8 字体 9 加速键
10 用户定义资源 12 设备无关光标 14 设备无关图标----
该函数以Byte数组形式返回指定资源。VB以设计窗体快捷为其特色,故一般很少使用菜单、对话框和加速键资源。在VB中一般不使用资源文件的办法来设置EXE文件的版本信息,而应该在项目选项对话框中设置版本信息。LoadResData()函数最主要是用于用户定义资源。用户定义资源可以是GIF文件、文本文件或其他有用的数据,其使用起来相当灵活,在后面 “如何显示资源中的GIF文件”部分我们将展示这一点。
----
下面,我们先给出一个完整的示例来展现如何进行资源文件的编程。
----
首先,建立如下资源描述文件(*.rc),然后编译成RES文件,并加入项目文件。该资源文件中包括八个图标。
201 ICON "MOON01.ICO"
202 ICON "MOON02.ICO"
203 ICON "MOON03.ICO"
204 ICON "MOON04.ICO"
205 ICON "MOON05.ICO"
206 ICON "MOON06.ICO"
207 ICON "MOON07.ICO"
208 ICON "MOON08.ICO"----
然后在窗体上加上一个Timer和Image,设置Timer的Enable属性为True,Interval属性为1000。在代码输入窗口加入如下的程序:
Option Explicit
Dim Which As Integer '动画显示的图标号Private Sub Form_Load()
Which = 201
End SubPrivate Sub Timer1_Timer()
Image1.Picture = LoadResPicture(Which, vbResIcon)
If Which = 208 Then
Which = 201 '循环显示
Else
Which = Which + 1
End If
End Sub End Sub----
该示例运行时连续显示图标资源以实现动画效果。
----
三、如何显示资源中的GIF文件
----
VB 5.0的Picture Box可以显示GIF和JPEG图象,但是由于GIF资源不是Windows的标准资源,所以不能使用LoadResPicture的办法来调入GIF图象。如果要解决这个问题,需要先将GIF资源写到一个临时文件,然后用LoadPicture显示文件,最后再删除掉磁盘上的临时文件。我们假定资源文件如下:
102 GIF about.gif----
你可以用这样的语句来实现:
SaveFileFromRes(102, "GIF", "C:\about.gif")
Picture1.picture = LoadPicture("C:\about.gif")
Kill "C:\about.gif"----
这里的C:\about.gif只是一个例子,在实际编程可以用Windows API的GetTempFileName来生成临时文件名(但GetTempFileName生成的临时文件扩展名为.tmp,需改为.gif)。这里的SaveFileFromRes函数来完成写临时文件的工作,具体代码如下:
Public Function SaveFileFromRes(vntResourceID As Variant,
sType As String, sFileName As String) As Boolean
'======================================================='
'函数:SaveFileFromRes 从http://AskPro.yeah.net下载'
'======================================================='
目的: 从资源文件调入自定义资源,然后写入磁盘上的文件'
'返回值: 如果没有错误为True,否则为False '
'注意: sType 必须同资源文件的定义相同(包括大小写)! '
' 假定sFilename是合法的,可写的'
'======================================================='
Dim bytImage() As Byte ' Always store binary data in byte arrays!
Dim iFileNum As Integer 'Free File Handle
On Error GoTo SaveFileFromRes_Err
SaveFileFromRes = True
'Load Binary Data from Resource file
bytImage = LoadResData(vntResourceID, sType)
'Get Free File Handle
iFileNum = FreeFile
'Open the file and save the data
Open sFileName For Binary As iFileNum
Put #iFileNum, , bytImage
Close iFileNum
Exit Function
SaveFileFromRes_Err:
SaveFileFromRes = False: Exit Function
End Function----
这个方法不但适用于GIF文件,也适用于其它类型的文件。
VB为支持.res资源增加了三个函数:LoadResPicture()、LoadResString()和LoadResData()。 ---- LoadResPicture()函数用于调入位图、图标和光标资源,其作用非常类似LoadPicture()函数,不过LoadPicture是从磁盘文件中读取图形。LoadResPicture的格式为: LoadResPicture(资源ID号,资源类型)---- 资源类型可为vbResBitmap、vbResIcon、vbResCursor,分别对应着位图、图标和光标三种资源。得到的图形可以直接赋与Picture属性,或在使用PaintPicture方法时使用。 ---- LoadResString()函数用于调入字符串资源。字符串资源对于开发多语种软件比较有用。其使用格式为: LoadResString(资源ID号)
LoadResData()函数可以调入各种资源。使用格式为:
LoadResData(资源ID号,资源类型)----
这里资源类型取值的含义如下表所示:
1 光标 2 位图 3 图标
4 菜单 5 对话框 6 字符串
7 字体目录 8 字体 9 加速键
10 用户定义资源 12 设备无关光标 14 设备无关图标----
该函数以Byte数组形式返回指定资源。VB以设计窗体快捷为其特色,故一般很少使用菜单、对话框和加速键资源。在VB中一般不使用资源文件的办法来设置EXE文件的版本信息,而应该在项目选项对话框中设置版本信息。LoadResData()函数最主要是用于用户定义资源。用户定义资源可以是GIF文件、文本文件或其他有用的数据,其使用起来相当灵活,在后面 “如何显示资源中的GIF文件”部分我们将展示这一点。
----
下面,我们先给出一个完整的示例来展现如何进行资源文件的编程。
----
首先,建立如下资源描述文件(*.rc),然后编译成RES文件,并加入项目文件。该资源文件中包括八个图标。
201 ICON "MOON01.ICO"
202 ICON "MOON02.ICO"
203 ICON "MOON03.ICO"
204 ICON "MOON04.ICO"
205 ICON "MOON05.ICO"
206 ICON "MOON06.ICO"
207 ICON "MOON07.ICO"
208 ICON "MOON08.ICO"----
然后在窗体上加上一个Timer和Image,设置Timer的Enable属性为True,Interval属性为1000。在代码输入窗口加入如下的程序:
Option Explicit
Dim Which As Integer '动画显示的图标号Private Sub Form_Load()
Which = 201
End SubPrivate Sub Timer1_Timer()
Image1.Picture = LoadResPicture(Which, vbResIcon)
If Which = 208 Then
Which = 201 '循环显示
Else
Which = Which + 1
End If
End Sub End Sub----
该示例运行时连续显示图标资源以实现动画效果。
----
三、如何显示资源中的GIF文件
----
VB 5.0的Picture Box可以显示GIF和JPEG图象,但是由于GIF资源不是Windows的标准资源,所以不能使用LoadResPicture的办法来调入GIF图象。如果要解决这个问题,需要先将GIF资源写到一个临时文件,然后用LoadPicture显示文件,最后再删除掉磁盘上的临时文件。我们假定资源文件如下:
102 GIF about.gif----
你可以用这样的语句来实现:
SaveFileFromRes(102, "GIF", "C:\about.gif")
Picture1.picture = LoadPicture("C:\about.gif")
Kill "C:\about.gif"----
这里的C:\about.gif只是一个例子,在实际编程可以用Windows API的GetTempFileName来生成临时文件名(但GetTempFileName生成的临时文件扩展名为.tmp,需改为.gif)。这里的SaveFileFromRes函数来完成写临时文件的工作,具体代码如下:
Public Function SaveFileFromRes(vntResourceID As Variant,
sType As String, sFileName As String) As Boolean
'======================================================='
'函数:SaveFileFromRes 从http://AskPro.yeah.net下载'
'======================================================='
目的: 从资源文件调入自定义资源,然后写入磁盘上的文件'
'返回值: 如果没有错误为True,否则为False '
'注意: sType 必须同资源文件的定义相同(包括大小写)! '
' 假定sFilename是合法的,可写的'
'======================================================='
Dim bytImage() As Byte ' Always store binary data in byte arrays!
Dim iFileNum As Integer 'Free File Handle
On Error GoTo SaveFileFromRes_Err
SaveFileFromRes = True
'Load Binary Data from Resource file
bytImage = LoadResData(vntResourceID, sType)
'Get Free File Handle
iFileNum = FreeFile
'Open the file and save the data
Open sFileName For Binary As iFileNum
Put #iFileNum, , bytImage
Close iFileNum
Exit Function
SaveFileFromRes_Err:
SaveFileFromRes = False: Exit Function
End Function----
这个方法不但适用于GIF文件,也适用于其它类型的文件。
解决方案 »
- 如何vb代码将datagrid1中数据传到datagrid2中
- VB鼠标事件
- VSprinter控件制表格,但表格线的粗细却不不一样!怎么办?!
- 我为什么用SMTP发邮件 就 发不成呢!!!谢谢高手们帮帮我吧————明白了马上给分。
- 谁能给我一个好的日期控件啊。。!!拜托!!!
- ACCESS数据库最大数据存储量是多少?能不能存受几百万条数据记录?
- MDI窗体中如何使得打开的窗体只有一个?
- 怎样对文本实现超连接?
- 请问在api函数CreateFileMap中flProtect保护方式可以是PAGE_READONLY或是PAGE_READWRITE,可vb的api浏览器常数项却无此项,他们到底是什么?
- 请问用vb对acess操作时在数据录入窗口中什么时候加入校验代码最好?怎样加?哪里能找到例子?
- 一个简单的问题,关于数据库关联的问题
- API函数Findwindow获取窗体句柄的方法,最好来个小例子,谢谢!
Dim strFileName As String
strFileName = "c:\temp.exe"
'将资源文件装入数组,以备写文件
bytData = LoadResData(101, "CUSTOM")
'保存资源文件
Open strFileName For Binary As #1
Put #1, , bytData
Close #1
MsgBox "Saved", vbInformation
Dim Ocx() As Byte 'OCX是个Btye类型的数组
Dim Counter As Long
Ocx = LoadResData(101, "CUSTOM") '将自定义资源中101号资源读入数组OCX
'注意,微软的帮助中对加载自定义资源的说明有错误,自定义资源标识为"CUSTOM"而不是帮助所说的数字10 If Right(App.Path, 1) = "\" Then '读取程序所在路径,判断是否为根目录并分别处理
'程序在根目录下
If Dir(App.Path & "CoolToolBar.ocx") = "" Then '程序路径下有无控件,无则生成控件
'以二进制方式写(生成)控件(CoolToolBar.ocx)到主程序所在的目录
Open App.Path & "CoolToolBar.ocx" For Binary As #1
For Counter = 0 To OCXSIZE - 1 '注意因为从0 Byte开始因此以文件大小 - 1Byte 为终值
Put #1, , Ocx(Counter)
Next Counter
Close #1
End if
Else
'程序不在根目录下
If Dir(App.Path & "\CoolToolBar.ocx") = "" Then '程序路径下有无控件,无则生成控件
'以二进制方式写(生成)控件(CoolToolBar.ocx)到主程序所在的目录
Open App.Path & "\CoolToolBar.ocx" For Binary As #1
For Counter = 0 To OCXSIZE - 1 '注意因为从0 Byte开始因此以文件大小 - 1Byte 为终值
Put #1, , Ocx(Counter)
Next Counter
Close #1
End if
End if
Form1.Visible = True '主程序所用控件已经生成,显示主窗体,进入主程序。
End Sub