Office中国论坛/Access中国论坛
标题:
VB封装工作组文件及调用方法探讨(分享与交流)
[打印本页]
作者:
tanhong
时间:
2008-10-18 11:11
标题:
VB封装工作组文件及调用方法探讨(分享与交流)
前 言
此前我曾在论坛发过两篇文字,即关于《如何避开宏安全级限制启动MDB》与《VB建壳指定工作组并启动MDB》,由于成文较为仓促,文中有不少值得探究的地方,留待以后在文章中补充或更正。
本文与此前的两篇文字主题大同小异,仍围绕VB辅助ACCESS进行项目开发的主题,只是侧重点有所不同,但几篇文字又都相互关联,在实际项目开发中可以综合运用。
本文主题为:VB实现资源文件集成、封装及调用。论坛中有许多朋友提及并关注这一话题,下面我将结合实例与大家共同分享自己有关这方面的一些心得。权当抛砖引玉,还是那句话,如果此文对您有所帮助,那将是本人莫大之快事!
本文讲解要点:
1、
资源文件集成与封装
2、
资源文件释放及调用
3、
封装技巧应用
系统及平台要求:
1
、操作系统为:XP2
2
、ACCESS为2003 版
3
、VB为 6.0
附注及说明:
1、
本文围绕具体实例进行讲解。有关实例及VB源码可到office中国江羽空间下载
2、
实例含:窗体图片素材、图标素材、编译的mdw文件集成.exe、VB源码
3、
实例演示:将封装的“security.mdw”工作组文件释放到system32文件夹
4、
本文默认你已对于VB6编程有一定了解
第一章、资源文件集成
1.1
初识VB资源编辑器
我们要实现资源文件集成封装到应用程序中,首要的工作就是将预集成资源文件(本文实例:“security.mdw”工作组文件)寄存到VB资源编辑器中。
那什么VB资源编辑器?通俗说就是VB用于存放资源文件的容器。VB的资源编辑器可以存放包括:文本、图片、二进制数据等,几乎所有的Windows应用程序中的资源,当我们需要使用时,再从中释放或提取出来,供我们使用。
1.2
启动资源编辑器
步骤一
:VB资源编辑器是外接程序,我们必须调用并启动它。在VB编辑环境中点菜单[外接程序]—[外接程序管理器] (见图1),启动外接程序管理器窗口。
[attach]32694[/attach]
(图1)
步骤二
:选择[VB6资源编辑器]选项—钩选[加载/卸载]—点[确定],你在工具栏中就能看到资源编辑器图标(见图2)。
[attach]32695[/attach]
(图2)
步骤三
:单击 [资源编辑器图标] (见图3)打开VB6资源编辑器窗口。
[attach]32696[/attach]
1.3
向VB资源编辑器添加自定义资源文件
步骤四
:单击窗口 [自定义资源]
图标(见图
4
),在
[
打开一个自定义资源文件
]
对话框中选择自定义文件(实例为:
“security.mdw”工作组文件
),点
[
打开
]
按钮选定资源文件就添加到资源编辑器中(见图
5
),资源编辑器会出现
CUSTOM
文件夹及
[101]
自定义资源。
[attach]32697[/attach]
(图4)
[attach]32698[/attach]
(图5)
步骤五
:点[VB资源编辑器窗口] 的 [保存] 图标,弹出 [资源文件另存为] 对话框,点确定,才算真正完成我们的资源文件集成(见图6)。
[attach]32699[/attach]
(图6)
第二章、资源文件释放及调用
要使用集成文件我们必须先释放已集成文件到指定文件夹,然后再调用就可以,实例是将工作组文件释放到Windows系统文件,即:System32中。要实现上述目标,我们必须先解决几个问题:
2.1
获取系统文件夹System32路径
我们通过GetSystemDirectory API函数来编写一个获取系统文件夹自定义函数,我们在工程中建立一个模块,并将如下代码复制到模块中。自定函数模块可以自动获取系统文件夹路径。
实例代码如下:
Option Explicit
Private Declare Function GetSystemDirectory Lib "kernel32" Alias "GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long
Const MAX_PATH = 250 '定义字符串长度
'*************************************************************************
' 模 块 名:GetWinSysDir
'------------------------------------------------------------------------------------------------------------
' 功能描述:自定义读取Winddows\System32 目录函数
' 输 入:无
' 输 出:GetWinSysDir(String) 'System32路径
' 调用模块:GetSystemDirectory 获取系统目录
' 编 程:江羽
' 日 期:2008-10-16
'*************************************************************************
Public Function GetWinSysDir() As String
Dim strSysDir As String
Dim Length As Long
strSysDir = String(MAX_PATH, 0) '赋值
'strSysDir为取得系统文件目录
Length = GetSystemDirectory(strSysDir, MAX_PATH)
'去掉多余的空格
strSysDir = Left(strSysDir, InStr(strSysDir, Chr(0)) - 1)
'赋值输出系统路径
GetWinSysDir = strSysDir
End Function
复制代码
2.2
资源文件释放方法解析
我们可以通过编程,将资源编辑器中文件,以自定义文件名释放到指定文件夹,举例说明,假如:之前我们已将MyPro.exe文件集成至VB资源编辑的
CUSTOM
中,其资源编辑器中编号101,我们编程实现:将MyPro.exe文件名释放到C盘,代码如下:
Const ExeFile = 114688 '欲生成的文件大小,原文件112K
Dim ExeMy() As Byte 'Btye类型的数组,存放EXE文件
Dim Counter As Long '文件字节数
'将文件读入数组
ExeMy = LoadResData(101, "CUSTOM")
Open "C:\MyPro.exe" For Binary As #1
'从0 Byte开始因此以文件大小 - 1Byte 为终值
For Counter = 0 To ExeFile - 1
Put #1, , ExeMy (Counter) '释放文件
Next Counter
Close #1
复制代码
特别说明:
1
、Const ExeFile = 114688 中欲生成的文件大小,是根据你前面集成到VB资源编辑器中的文件实际大小换算而来,假如:
MyPro.exe
文件为 112 K ,必须换算成字节,1K=1024字节,112K换算后等于 114688 字节。不多也不能少,否则释放文件将报错。
2
、
LoadResData(101, "CUSTOM")
中
101
为文件集成在资源编辑品中的编号,
CUSTOM
为文件类型,这决定着你将释出哪个文件。
3
、
Open "C:\MyPro.exe" For Binary As #1
中
"C:\MyPro.exe"
,给出了将要释放文件名:
MyPro.exe
,路径:
C:\
,均为字符串。
n
文件名可以自定义,与集成到资源编辑器中的文件名并不要求一样
n
将要释放文件的路径可以根据自己需要而定
2.3
实例中释放工作组文件代码及说明:
'*************************************************************************
' 模 块 名:ReleaseMdw
'-------------------------------------------------------------------------
' 功能描述:自定义过程,释放工作组文件到指定路径,并定义指定名称
' 输 入:strMdw(String) 工作组文件名
' intTime As Integer 关闭窗体延迟时间
' 输 出:无
' 调用模块:GetWinSysDir 获取系统目录自定义函数
' 实 例:ReleaseMdw "security.mdw", 2000
' 编 程:江羽
' 日 期:2008-10-16
'*************************************************************************
Sub ReleaseMdw(ByVal strMdw As String, ByVal intTime As Integer)
Const Security = 114688 '欲生成的工作组文件大小
Dim mdw() As Byte 'Btye类型的数组,存放工作组文件
Dim Counter As Long '对工作组文件字节数进行循环
Dim strSysPath As String '系统文件路径
Label1.Caption = "系统正在配置ACCESS环境,请稍候......."
'获取Windows系统文件夹System32路径,并赋值变量
strSysPath = GetWinSysDir
mdw = LoadResData(101, "CUSTOM") '将文件读入数组
'判断当前路径工作组文件是否存在,& _
存在则退出 , 不存在则释放工作组文件
If Dir(strSysPath & "" & strMdw) = "" Then
'释放工作组文件到系统文件夹
Open strSysPath & "" & strMdw For Binary As #1
'注意因为从0 Byte开始因此以文件大小 - 1Byte 为终值
For Counter = 0 To Security - 1
Put #1, , mdw(Counter) '释放工作组文件
DoEvents '转让控制权
Next Counter
Close #1
End If
Label1.Caption = "系统配置成功,正在启系统......."
'启动计时器,在指定秒数后关闭窗体
Timer1.Interval = intTime
End Sub
复制代码
以上是实例中的代码,内有详细注释,就不做特别说明,你可以将以上代码复制到工程中的Form1窗体中。
代码功能:是将集成在VB资源编辑器工作组文件,释放到系统文件夹中,即:System32中,以便我们后面调用。我们自定义了一个过程,过程预留了两个接口,一是将释放后的文件名,二是计时器触发时间,以便在指定时间关闭窗体,并关闭应用程序。
第三章、封装应用程序
前面我们已经完成了关键的几个步骤,我们现在要做的就是编译文件,在编译之前,我们还得做些准备工作。
3.1
添加控件并完善代码
在Form1窗体中加入 [attach]32700[/attach]时钟控件,控件名:Timer1;加入 [attach]32701[/attach]标签控件,控件名Label1。
添加窗体加载事件,时钟控件计时器触发事件代码。
实例代码如下:
'*************************************************************************
' 模 块 名:Form_Load
'------------------------------------------------------------------------------------------------------------
' 功能描述:窗体加载事件
' 输 入:无
' 输 出:无
' 调用模块:ReleaseMdw 释放工作组文件到指定路径,本实例路径为系统文件夹
' 编 程:江羽
' 日 期:2008-10-16
'*************************************************************************
Private Sub Form_Load()
'显示窗体
Me.Show
'自定义过程,"security.mdw"指定释的文件名,2000延迟关闭窗体时间
ReleaseMdw "security.mdw", 2000
End Sub
'*************************************************************************
' 模 块 名:Timer1_Timer
'-------------------------------------------------------------------------------------------------------------
' 功能描述:计时器事件
' 输 入:无
' 输 出:无
' 调用模块:
' 编 程:江羽
' 日 期:2008-10-16
'*************************************************************************
Private Sub Timer1_Timer()
'关闭应程序
End
End Sub
复制代码
将以上代码复制到Form1 中,我们就可以开始编译了
3.2
编译工程,完成封装
为了让我们启动窗口美观,你还可以在Form1窗体中加入背景图,另外还可以定制自己图标,在此不做说明。然后点击菜单:[文件]—[工程1.exe],在工程所在文件夹内,你能看到我们编译好的应用程序,实例文件名[mdw文件集成.exe]。当我们点击运行程序,会自动释放
"security.mdw"
工作组文件到
System32
中。
至于如何指定工作组文件启动MDB项目,在此不做讲解,大家可以参看我在此前的发文。
至此,本文与大家分享东西到此告一个段落,剩下的就是运行我们编译的EXE文件看看自己辛苦的劳动成果!以后我将再与大家分享关于DLL组件使用及封装的有关技巧与方法。
注:
有关此文的实例、素材及VB源码,您可以到Office中国江羽空间下载。
作者:江羽
2008-10-16
晚
Word文稿下载
:
[
本帖最后由 tanhong 于 2008-10-19 11:50 编辑
]
作者:
5988143
时间:
2008-10-18 11:24
江兄精品不斷呀~[:28]
作者:
tanhong
时间:
2008-10-18 11:46
多谢汪兄的捧场, 还请多多指教.
作者:
tmtony
时间:
2008-10-18 13:02
太详细了, 顶一个,加个分
作者:
tanhong
时间:
2008-10-18 13:36
原帖由
tmtony
于 2008-10-18 13:02 发表
太详细了, 顶一个,加个分
多谢老大的加分!
作者:
liaug
时间:
2008-10-18 13:52
支持一下
作者:
wdmx
时间:
2008-10-19 01:08
好,精彩
作者:
lonsy
时间:
2008-11-14 19:57
谢谢,
作者:
duzili
时间:
2008-11-15 00:29
收藏,经典的东西,为什么不收藏?
作者:
popo559
时间:
2008-11-25 22:32
收藏,经典
作者:
自飞
时间:
2008-12-27 15:45
好好学习天天向上
作者:
lxing20
时间:
2009-4-9 16:22
太好了,收藏!谢了!
作者:
OKK
时间:
2009-4-27 09:55
收藏
作者:
szblueidea
时间:
2009-4-29 04:52
very good ,
作者:
li08hua
时间:
2009-9-2 23:05
学习
作者:
fytxcf
时间:
2009-9-21 02:19
AAAAAAAAA
作者:
chaojianan
时间:
2009-10-10 20:33
谢谢江版。
作者:
liaoqiang234
时间:
2010-2-5 20:54
谢谢
作者:
liaohk
时间:
2010-5-3 21:26
作者:
xie62
时间:
2010-6-20 08:19
收藏,经典的东西,
作者:
shines
时间:
2011-1-14 13:17
谢谢, 学习收藏!
作者:
zhao__feng
时间:
2011-3-26 21:08
收藏,经典
作者:
nature876
时间:
2011-3-27 15:53
收藏,经典
作者:
lijiexiang
时间:
2011-4-21 23:11
经典 学习下
作者:
shouan
时间:
2013-6-2 15:16
学习中
作者:
leonshi
时间:
2013-11-2 16:48
借鉴前辈的知识丰富自己的知识面
作者:
leonshi
时间:
2013-11-3 11:10
比较经典的总结
作者:
heqing3000
时间:
2013-12-16 11:23
谢谢,谢谢!
作者:
wang1999
时间:
2014-4-24 12:54
不管是内容,还是从排版,都非常用心。少见
作者:
xlb004
时间:
2014-9-7 19:23
eeeeeeeeeee
作者:
xlb004
时间:
2014-9-7 19:23
dddddddddddddddddd
作者:
dhlhmgc
时间:
2014-10-22 01:03
江大,实在是太强大了,学无止尽啊!
作者:
llm4947
时间:
2015-1-6 22:29
#在这里快速回复#
www.office-cn.net
作者:
yanghua1900363
时间:
2015-1-8 22:44
多谢版主分享!
作者:
access新新新手
时间:
2015-12-10 08:31
谢谢分享
欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/)
Powered by Discuz! X3.3