设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

VB封装工作组文件及调用方法探讨(分享与交流)

2008-10-18 11:19| 发布者: tanhong| 查看: 969| 评论: 10

[font=华文中宋][size=18pt]前 言 [/size][/font] [font=宋体] 此前我曾在论坛发过两篇文字,即关于《如何避开宏安全级限制启动MDB》与《VB建壳指定工作组并启动MDB》,由于成文较为仓促,文中有不少值得探究的地方,留待以后在文章中补充或更正。[/font] [font=宋体]本文与此前的两篇文字主题大同小异,仍围绕VB辅助ACCESS进行项目开发的主题,只是侧重点有所不同,但几篇文字又都相互关联,在实际项目开发中可以综合运用。[/font] [font=宋体]本文主题为:VB实现资源文件集成、封装及调用。论坛中有许多朋友提及并关注这一话题,下面我将结合实例与大家共同分享自己有关这方面的一些心得。权当抛砖引玉,还是那句话,如果此文对您有所帮助,那将是本人莫大之快事![/font] [list][*][b][font=华文中宋]本文讲解要点:[/font][/b] [font=宋体]1、[/font][font=宋体]资源文件集成与封装[/font] [font=宋体]2、[/font][font=宋体]资源文件释放及调用[/font] [font=宋体]3、[/font][font=宋体]封装技巧应用[/font][*][b][font=华文中宋]系统及平台要求:[/font][/b] [font=宋体]1[/font][font=宋体]、操作系统为:XP2[/font] [font=宋体]2[/font][font=宋体]、ACCESS为2003 版[/font] [font=宋体]3[/font][font=宋体]、VB为 6.0 [/font][*][b][font=华文中宋]附注及说明:[/font][/b] [font=宋体]1、[/font][font=宋体]本文围绕具体实例进行讲解。有关实例及VB源码可到office中国江羽空间下载[/font] [font=宋体]2、[/font][font=宋体]实例含:窗体图片素材、图标素材、编译的mdw文件集成.exe、VB源码[/font] [font=宋体]3、[/font][font=宋体]实例演示:将封装的“security.mdw”工作组文件释放到system32文件夹[/font] [font=宋体]4、[/font][font=宋体]本文默认你已对于VB6编程有一定了解[/font][/list] [font=华文中宋][size=18pt]第一章、资源文件集成 [/size][/font][font=宋体][size=18pt] [/size][/font] [b][font=华文中宋]1.1 [/font][/b][b][font=华文中宋]初识VB资源编辑器[/font][/b] [font=宋体] 我们要实现资源文件集成封装到应用程序中,首要的工作就是将预集成资源文件(本文实例:“security.mdw”工作组文件)寄存到VB资源编辑器中。[/font] [font=宋体]那什么VB资源编辑器?通俗说就是VB用于存放资源文件的容器。VB的资源编辑器可以存放包括:文本、图片、二进制数据等,几乎所有的Windows应用程序中的资源,当我们需要使用时,再从中释放或提取出来,供我们使用。[/font] [b][font=华文中宋][/font][/b] [b][font=华文中宋]1.2 [/font][/b][b][font=华文中宋]启动资源编辑器[/font][/b] [font=宋体][/font] [font=宋体] 步骤一[/font][font=宋体]:VB资源编辑器是外接程序,我们必须调用并启动它。在VB编辑环境中点菜单[外接程序]—[外接程序管理器] (见图1),启动外接程序管理器窗口。[/font] [font=宋体] [attach]32694[/attach][/font] [font=宋体] (图1) [font=宋体] [/font][/font] [font=宋体][font=宋体] 步骤二[/font][font=宋体]:选择[VB6资源编辑器]选项—钩选[加载/卸载]—点[确定],你在工具栏中就能看到资源编辑器图标(见图2)。[/font] [font=宋体] [attach]32695[/attach][/font] [font=宋体] (图2) [font=宋体][/font][/font][/font] [font=宋体][font=宋体][font=宋体] 步骤三[/font][font=宋体]:单击 [资源编辑器图标] (见图3)打开VB6资源编辑器窗口。[/font] [font=宋体] [attach]32696[/attach] [b][font=华文中宋][/font][/b][/font][/font][/font] [font=宋体][font=宋体][font=宋体][b][font=华文中宋]1.3 [/font][/b][b][font=华文中宋]向VB资源编辑器添加自定义资源文件[/font][/b] [font=宋体] [/font][/font][/font][/font] [font=宋体][font=宋体][font=宋体][font=宋体] 步骤四[/font][font=宋体]:单击窗口 [自定义资源] [/font][font=宋体]图标(见图[/font][font=Times New Roman]4[/font][font=宋体]),在[/font][font=Times New Roman] [[/font][font=宋体]打开一个自定义资源文件[/font][font=Times New Roman]] [/font][font=宋体]对话框中选择自定义文件(实例为:[/font][font=宋体]“security.mdw”工作组文件[/font][font=宋体]),点[/font][font=Times New Roman][[/font][font=宋体]打开[/font][font=Times New Roman]][/font][font=宋体]按钮选定资源文件就添加到资源编辑器中(见图[/font][font=Times New Roman]5[/font][font=宋体]),资源编辑器会出现[/font][font=Times New Roman]CUSTOM [/font][font=宋体]文件夹及[/font][font=Times New Roman][101] [/font][font=宋体]自定义资源。[/font][font=宋体][/font] [attach]32697[/attach] (图4)[/font][/font][/font] [font=宋体][font=宋体][font=宋体] [attach]32698[/attach] (图5) [font=宋体][/font] [font=宋体] 步骤五[/font][font=宋体]:点[VB资源编辑器窗口] 的 [保存] 图标,弹出 [资源文件另存为] 对话框,点确定,才算真正完成我们的资源文件集成(见图6)。 [/font] [font=宋体] [attach]32699[/attach] [/font] [font=宋体] (图6) [/font][/font][/font][/font][font=宋体][font=宋体][font=宋体][font=宋体][font=华文中宋][size=18pt]第二章、资源文件释放及调用 [/size][/font] [font=宋体] 要使用集成文件我们必须先释放已集成文件到指定文件夹,然后再调用就可以,实例是将工作组文件释放到Windows系统文件,即:System32中。要实现上述目标,我们必须先解决几个问题:[/font] [b][font=华文中宋][/font][/b][/font][/font][/font][/font] [font=宋体][font=宋体][font=宋体][font=宋体][b][font=华文中宋]2.1 [/font][/b][b][font=华文中宋]获取系统文件夹System32路径[/font][/b] [font=宋体] 我们通过GetSystemDirectory API函数来编写一个获取系统文件夹自定义函数,我们在工程中建立一个模块,并将如下代码复制到模块中。自定函数模块可以自动获取系统文件夹路径。[/font] [b][font=宋体][/font][/b][/font][/font][/font][/font] [font=宋体][font=宋体][font=宋体][font=宋体][b][font=宋体]实例代码如下:[/font][/b][/font][/font][/font][/font] [font=宋体][font=宋体][font=宋体][font=宋体][font=宋体][/font][code] 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[/code][/font][/font][/font][/font] [font=宋体][font=宋体][font=宋体][font=宋体][b][font=华文中宋][/font][/b][/font][/font][/font][/font] [font=宋体][font=宋体][font=宋体][font=宋体][b][font=华文中宋]2.2 [/font][/b][b][font=华文中宋]资源文件释放方法解析[/font][/b] [font=宋体]  我们可以通过编程,将资源编辑器中文件,以自定义文件名释放到指定文件夹,举例说明,假如:之前我们已将MyPro.exe文件集成至VB资源编辑的[/font][font=Times New Roman]CUSTOM[/font][font=宋体]中,其资源编辑器中编号101,我们编程实现:将MyPro.exe文件名释放到C盘,代码如下:[/font][code] 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[/code][/font][/font][/font][/font] [font=宋体][font=宋体][font=宋体][font=宋体][font=宋体]特别说明:[/font][font=宋体][/font] [font=宋体] 1[/font][font=宋体]、Const ExeFile = 114688 中欲生成的文件大小,是根据你前面集成到VB资源编辑器中的文件实际大小换算而来,假如:[size=10.5pt]MyPro.exe[/size] 文件为 112 K ,必须换算成字节,1K=1024字节,112K换算后等于 114688 字节。不多也不能少,否则释放文件将报错。[/font] [font=宋体] 2[/font][font=宋体]、[/font][font=Times New Roman]LoadResData(101, "CUSTOM") [/font][font=宋体]中[/font][font=Times New Roman] 101 [/font][font=宋体]为文件集成在资源编辑品中的编号,[/font][font=Times New Roman]CUSTOM[/font][font=宋体]为文件类型,这决定着你将释出哪个文件。[/font] [font=Times New Roman] 3[/font][font=宋体]、[/font][font=Times New Roman]Open "C:\MyPro.exe" For Binary As #1 [/font][font=宋体]中[/font][font=Times New Roman]"C:\MyPro.exe"[/font][font=宋体],给出了将要释放文件名:[/font][font=Times New Roman]MyPro.exe [/font][font=宋体],路径:[/font][font=Times New Roman]C:\ [/font][font=宋体],均为字符串。[/font] [font=Wingdings] n[/font][font=宋体]文件名可以自定义,与集成到资源编辑器中的文件名并不要求一样[/font][font=宋体][/font] [font=Wingdings] n[/font][font=宋体]将要释放文件的路径可以根据自己需要而定[/font][font=宋体][/font] [b][font=华文中宋][/font][/b][/font][/font][/font][/font] [font=宋体][font=宋体][font=宋体][font=宋体][b][font=华文中宋]2.3 [/font][/b][b][font=华文中宋]实例中释放工作组文件代码及说明:[/font][/b][/font][/font][/font][/font] [font=宋体][font=宋体][font=宋体][font=宋体][code] '************************************************************************* ' 模 块 名: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 [/code][font=宋体]以上是实例中的代码,内有详细注释,就不做特别说明,你可以将以上代码复制到工程中的Form1窗体中。[/font] [font=宋体]代码功能:是将集成在VB资源编辑器工作组文件,释放到系统文件夹中,即:System32中,以便我们后面调用。我们自定义了一个过程,过程预留了两个接口,一是将释放后的文件名,二是计时器触发时间,以便在指定时间关闭窗体,并关闭应用程序。[/font] [font=华文中宋][size=18pt][/size][/font][/font][/font][/font][/font] [font=宋体][font=宋体][font=宋体][font=宋体][font=华文中宋][size=18pt]第三章、封装应用程序      [/size][/font] [font=宋体][size=10.5pt] 前面我们已经完成了关键的几个步骤,我们现在要做的就是编译文件,在编译之前,我们还得做些准备工作。[/size][/font] [b][font=华文中宋][/font][/b][/font][/font][/font][/font] [font=宋体][font=宋体][font=宋体][font=宋体][b][font=华文中宋]3.1 [/font][/b][b][font=华文中宋]添加控件并完善代码[/font][/b] [font=宋体] 在Form1窗体中加入 [attach]32700[/attach]时钟控件,控件名:Timer1;加入 [attach]32701[/attach]标签控件,控件名Label1。[/font][font=宋体][size=10.5pt]添加窗体加载事件,时钟控件计时器触发事件代码。[/size][/font] [b][font=宋体][size=10.5pt]实例代码如下:[/size][/font][/b][/font][/font][/font][/font] [font=宋体][font=宋体][font=宋体][font=宋体][code] '************************************************************************* ' 模 块 名: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[/code][font=宋体][size=10.5pt]将以上代码复制到Form1 中,我们就可以开始编译了[/size][/font] [b][font=华文中宋][/font][/b][/font][/font][/font][/font] [font=宋体][font=宋体][font=宋体][font=宋体][b][font=华文中宋]3.2 [/font][/b][b][font=华文中宋]编译工程,完成封装[/font][/b] [font=宋体][size=10.5pt] 为了让我们启动窗口美观,你还可以在Form1窗体中加入背景图,另外还可以定制自己图标,在此不做说明。然后点击菜单:[文件]—[工程1.exe],在工程所在文件夹内,你能看到我们编译好的应用程序,实例文件名[mdw文件集成.exe]。当我们点击运行程序,会自动释放[/size][/font][font=Times New Roman]"security.mdw"[/font][font=宋体]工作组文件到[/font][font=Times New Roman]System32[/font][font=宋体]中。[/font][font=宋体][size=10.5pt] 至于如何指定工作组文件启动MDB项目,在此不做讲解,大家可以参看我在此前的发文。[/size][/font] [font=宋体][size=10.5pt][/size][/font] [font=宋体][size=10.5pt] 至此,本文与大家分享东西到此告一个段落,剩下的就是运行我们编译的EXE文件看看自己辛苦的劳动成果!以后我将再与大家分享关于DLL组件使用及封装的有关技巧与方法。[/size][/font] [b][font=宋体][size=10.5pt][/size][/font][/b][/font][/font][/font][/font] [font=宋体][font=宋体][font=宋体][font=宋体][b][font=宋体][size=10.5pt] 注:[color=#333399][url=http://www.office-cn.net/vvb/thread-65359-1-1.html][color=#333399]有关此文的实例、素材及VB源码,您可以到Office中国江羽空间下载。[/color][/url][/color][/size][/font][/b] [font=宋体][size=10.5pt][/size][/font] [font=宋体][size=10.5pt] [/size][/font][font=宋体][size=10.5pt] 作者:江羽[/size][/font] [font=宋体][size=10.5pt] 2008-10-16 [/size][/font][font=宋体][size=10.5pt]晚[/size][/font] [b]Word文稿下载[/b]:[hide][attach]32702[/attach][/hide][/font] [/font][/font][/font] [[i] 本帖最后由 tanhong 于 2008-10-19 11:50 编辑 [/i]]详细内容:http://www.office-cn.net/forum.php?mod=viewthread&tid=65358
发表评论

最新评论

查看全部评论(10)

相关分类

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-4-29 14:04 , Processed in 0.173469 second(s), 16 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

返回顶部