设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

1234下一页
返回列表 发新帖
查看: 10943|回复: 34
打印 上一主题 下一主题

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

[复制链接]
跳转到指定楼层
1#
发表于 2008-10-18 11:11:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
前 言

    此前我曾在论坛发过两篇文字,即关于《如何避开宏安全级限制启动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),启动外接程序管理器窗口。
   
    (图1)
   

    步骤二:选择[VB6资源编辑器]选项—钩选[加载/卸载]—点[确定],你在工具栏中就能看到资源编辑器图标(见图2)。
   
                               (图2)

    步骤三:单击 [资源编辑器图标] (见图3)打开VB6资源编辑器窗口。
   

1.3 向VB资源编辑器添加自定义资源文件
   

    步骤四:单击窗口 [自定义资源] 图标(见图4),在 [打开一个自定义资源文件] 对话框中选择自定义文件(实例为:“security.mdw”工作组文件),点[打开]按钮选定资源文件就添加到资源编辑器中(见图5),资源编辑器会出现CUSTOM 文件夹及[101] 自定义资源。
   
                               (图4)


     
                               (图5)

    步骤五:点[VB资源编辑器窗口] 的 [保存] 图标,弹出 [资源文件另存为] 对话框,点确定,才算真正完成我们的资源文件集成(见图6)。   
     
                 (图6)

第二章、资源文件释放及调用

    要使用集成文件我们必须先释放已集成文件到指定文件夹,然后再调用就可以,实例是将工作组文件释放到Windows系统文件,即:System32中。要实现上述目标,我们必须先解决几个问题:

2.1 获取系统文件夹System32路径
    我们通过GetSystemDirectory API函数来编写一个获取系统文件夹自定义函数,我们在工程中建立一个模块,并将如下代码复制到模块中。自定函数模块可以自动获取系统文件夹路径。

实例代码如下:

  1. Option Explicit
  2. Private Declare Function GetSystemDirectory Lib "kernel32" Alias "GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long

  3. Const MAX_PATH = 250 '定义字符串长度
  4. '*************************************************************************
  5. ' 模 块 名:GetWinSysDir
  6. '------------------------------------------------------------------------------------------------------------
  7. ' 功能描述:自定义读取Winddows\System32 目录函数
  8. ' 输    入:无
  9. ' 输    出:GetWinSysDir(String) 'System32路径
  10. ' 调用模块:GetSystemDirectory 获取系统目录
  11. ' 编  程:江羽
  12. ' 日    期:2008-10-16
  13. '*************************************************************************
  14. Public Function GetWinSysDir() As String
  15.   Dim strSysDir As String
  16.   Dim Length As Long

  17. strSysDir = String(MAX_PATH, 0) '赋值
  18.   'strSysDir为取得系统文件目录
  19.   Length = GetSystemDirectory(strSysDir, MAX_PATH)
  20.   '去掉多余的空格
  21.   strSysDir = Left(strSysDir, InStr(strSysDir, Chr(0)) - 1)
  22.   '赋值输出系统路径
  23.   GetWinSysDir = strSysDir
  24. End Function
复制代码


2.2 资源文件释放方法解析
  我们可以通过编程,将资源编辑器中文件,以自定义文件名释放到指定文件夹,举例说明,假如:之前我们已将MyPro.exe文件集成至VB资源编辑的CUSTOM中,其资源编辑器中编号101,我们编程实现:将MyPro.exe文件名释放到C盘,代码如下:

  1. Const ExeFile = 114688          '欲生成的文件大小,原文件112K
  2.   Dim ExeMy()       As Byte     'Btye类型的数组,存放EXE文件
  3.   Dim Counter        As Long    '文件字节数
  4.   '将文件读入数组
  5. ExeMy = LoadResData(101, "CUSTOM")
  6.   Open "C:\MyPro.exe" For Binary As #1
  7.   '从0 Byte开始因此以文件大小 - 1Byte 为终值
  8.    For Counter = 0 To ExeFile - 1
  9.       Put #1, , ExeMy (Counter) '释放文件
  10.    Next Counter
  11.    Close #1
复制代码

特别说明:
    1、Const ExeFile = 114688 中欲生成的文件大小,是根据你前面集成到VB资源编辑器中的文件实际大小换算而来,假如:MyPro.exe 文件为 112 K ,必须换算成字节,1K=1024字节,112K换算后等于 114688 字节。不多也不能少,否则释放文件将报错。
    2LoadResData(101, "CUSTOM") 101 为文件集成在资源编辑品中的编号,CUSTOM为文件类型,这决定着你将释出哪个文件。
       3Open "C:\MyPro.exe" For Binary As #1 "C:\MyPro.exe",给出了将要释放文件名:MyPro.exe ,路径:C:\ ,均为字符串。
  n文件名可以自定义,与集成到资源编辑器中的文件名并不要求一样
  n将要释放文件的路径可以根据自己需要而定

2.3 实例中释放工作组文件代码及说明:

  1. '*************************************************************************
  2. ' 模 块 名:ReleaseMdw
  3. '-------------------------------------------------------------------------
  4. ' 功能描述:自定义过程,释放工作组文件到指定路径,并定义指定名称
  5. ' 输    入:strMdw(String)       工作组文件名
  6. '           intTime As Integer   关闭窗体延迟时间
  7. ' 输    出:无
  8. ' 调用模块:GetWinSysDir 获取系统目录自定义函数
  9. ' 实    例:ReleaseMdw "security.mdw", 2000
  10. ' 编  程:江羽
  11. ' 日    期:2008-10-16
  12. '*************************************************************************
  13. Sub ReleaseMdw(ByVal strMdw As String, ByVal intTime As Integer)
  14.    
  15. Const Security = 114688    '欲生成的工作组文件大小
  16.      Dim mdw()    As Byte    'Btye类型的数组,存放工作组文件
  17.      Dim Counter    As Long  '对工作组文件字节数进行循环
  18.      Dim strSysPath  As String  '系统文件路径
  19.    
  20. Label1.Caption = "系统正在配置ACCESS环境,请稍候......."
  21.    
  22. '获取Windows系统文件夹System32路径,并赋值变量
  23.      strSysPath = GetWinSysDir
  24.      mdw = LoadResData(101, "CUSTOM") '将文件读入数组
  25.    
  26. '判断当前路径工作组文件是否存在,& _
  27.    存在则退出 , 不存在则释放工作组文件
  28.    If Dir(strSysPath & "" & strMdw) = "" Then
  29.      '释放工作组文件到系统文件夹
  30.      Open strSysPath & "" & strMdw For Binary As #1
  31.      '注意因为从0 Byte开始因此以文件大小 - 1Byte 为终值
  32.      For Counter = 0 To Security - 1
  33.          Put #1, , mdw(Counter) '释放工作组文件
  34.          DoEvents '转让控制权
  35.      Next Counter
  36.      Close #1
  37.   End If
  38.   
  39. Label1.Caption = "系统配置成功,正在启系统......."
  40.   '启动计时器,在指定秒数后关闭窗体
  41.   Timer1.Interval = intTime
  42. End Sub  
复制代码
以上是实例中的代码,内有详细注释,就不做特别说明,你可以将以上代码复制到工程中的Form1窗体中。
代码功能:是将集成在VB资源编辑器工作组文件,释放到系统文件夹中,即:System32中,以便我们后面调用。我们自定义了一个过程,过程预留了两个接口,一是将释放后的文件名,二是计时器触发时间,以便在指定时间关闭窗体,并关闭应用程序。

第三章、封装应用程序     

    前面我们已经完成了关键的几个步骤,我们现在要做的就是编译文件,在编译之前,我们还得做些准备工作。

3.1 添加控件并完善代码
    在Form1窗体中加入 时钟控件,控件名:Timer1;加入 标签控件,控件名Label1。添加窗体加载事件,时钟控件计时器触发事件代码。
实例代码如下:


  1. '*************************************************************************
  2. ' 模 块 名:Form_Load
  3. '------------------------------------------------------------------------------------------------------------
  4. ' 功能描述:窗体加载事件
  5. ' 输    入:无
  6. ' 输    出:无
  7. ' 调用模块:ReleaseMdw 释放工作组文件到指定路径,本实例路径为系统文件夹
  8. ' 编  程:江羽
  9. ' 日    期:2008-10-16
  10. '*************************************************************************
  11. Private Sub Form_Load()
  12. '显示窗体
  13. Me.Show
  14. '自定义过程,"security.mdw"指定释的文件名,2000延迟关闭窗体时间
  15. ReleaseMdw "security.mdw", 2000
  16. End Sub

  17. '*************************************************************************
  18. ' 模 块 名:Timer1_Timer
  19. '-------------------------------------------------------------------------------------------------------------
  20. ' 功能描述:计时器事件
  21. ' 输    入:无
  22. ' 输    出:无
  23. ' 调用模块:
  24. ' 编  程:江羽
  25. ' 日    期:2008-10-16
  26. '*************************************************************************
  27. Private Sub Timer1_Timer()
  28.   '关闭应程序
  29.   End
  30. 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 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

评分

参与人数 3经验 +25 收起 理由
wang1999 + 10 (V币)优秀原创教程、管理建议(1-5分)
tmtony + 10
5988143 + 5 精品文章

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏5 分享分享1 分享淘帖 订阅订阅
2#
发表于 2008-10-18 11:24:42 | 只看该作者
江兄精品不斷呀~[:28]
3#
 楼主| 发表于 2008-10-18 11:46:34 | 只看该作者
多谢汪兄的捧场, 还请多多指教.

点击这里给我发消息

4#
发表于 2008-10-18 13:02:05 | 只看该作者
太详细了, 顶一个,加个分
5#
 楼主| 发表于 2008-10-18 13:36:39 | 只看该作者
原帖由 tmtony 于 2008-10-18 13:02 发表
太详细了, 顶一个,加个分


多谢老大的加分!
6#
发表于 2008-10-18 13:52:47 | 只看该作者
支持一下
7#
发表于 2008-10-19 01:08:01 | 只看该作者
好,精彩
8#
发表于 2008-11-14 19:57:32 | 只看该作者
谢谢,
9#
发表于 2008-11-15 00:29:11 | 只看该作者
收藏,经典的东西,为什么不收藏?
10#
发表于 2008-11-25 22:32:11 | 只看该作者
收藏,经典
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-14 10:39 , Processed in 0.113028 second(s), 40 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表