設為首頁收藏本站Access中國

Office中國論壇/Access中國論壇

 找回密碼
 注冊

QQ登錄

只需一步,快速開始

1234下一頁
返回列表 發(fā)新帖
查看: 10879|回復: 34
打印 上一主題 下一主題

[Access本身] VB封裝工作組文件及調用方法探討(分享與交流)

[復制鏈接]
跳轉到指定樓層
1#
發(fā)表于 2008-10-18 11:11:49 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
前 言

    此前我曾在論壇發(fā)過兩篇文字,即關于《如何避開宏安全級限制啟動MDB》與《VB建殼指定工作組并啟動MDB》,由于成文較為倉促,文中有不少值得探究的地方,留待以后在文章中補充或更正。
本文與此前的兩篇文字主題大同小異,仍圍繞VB輔助ACCESS進行項目開發(fā)的主題,只是側重點有所不同,但幾篇文字又都相互關聯(lián),在實際項目開發(fā)中可以綜合運用。
本文主題為:VB實現(xiàn)資源文件集成、封裝及調用。論壇中有許多朋友提及并關注這一話題,下面我將結合實例與大家共同分享自己有關這方面的一些心得。權當拋磚引玉,還是那句話,如果此文對您有所幫助,那將是本人莫大之快事!
  • 本文講解要點:
    1、資源文件集成與封裝
    2、資源文件釋放及調用
    3、封裝技巧應用
  • 系統(tǒng)及平臺要求:
    1、操作系統(tǒng)為:XP2
    2、ACCESS為2003 版
    3、VB為 6.0
  • 附注及說明:
    1、本文圍繞具體實例進行講解。有關實例及VB源碼可到office中國江羽空間下載
    2、實例含:窗體圖片素材、圖標素材、編譯的mdw文件集成.exe、VB源碼
    3、實例演示:將封裝的“security.mdw”工作組文件釋放到system32文件夾
    4、本文默認你已對于VB6編程有一定了解

第一章、資源文件集成

1.1 初識VB資源編輯器
    我們要實現(xiàn)資源文件集成封裝到應用程序中,首要的工作就是將預集成資源文件(本文實例:“security.mdw”工作組文件)寄存到VB資源編輯器中。
那什么VB資源編輯器?通俗說就是VB用于存放資源文件的容器。VB的資源編輯器可以存放包括:文本、圖片、二進制數(shù)據(jù)等,幾乎所有的Windows應用程序中的資源,當我們需要使用時,再從中釋放或提取出來,供我們使用。

1.2 啟動資源編輯器

    步驟一:VB資源編輯器是外接程序,我們必須調用并啟動它。在VB編輯環(huán)境中點菜單[外接程序]—[外接程序管理器] (見圖1),啟動外接程序管理器窗口。
   
    (圖1)
   

    步驟二:選擇[VB6資源編輯器]選項—鉤選[加載/卸載]—點[確定],你在工具欄中就能看到資源編輯器圖標(見圖2)。
   
                               (圖2)

    步驟三:單擊 [資源編輯器圖標] (見圖3)打開VB6資源編輯器窗口。
   

1.3 向VB資源編輯器添加自定義資源文件
   

    步驟四:單擊窗口 [自定義資源] 圖標(見圖4),在 [打開一個自定義資源文件] 對話框中選擇自定義文件(實例為:“security.mdw”工作組文件),點[打開]按鈕選定資源文件就添加到資源編輯器中(見圖5),資源編輯器會出現(xiàn)CUSTOM 文件夾及[101] 自定義資源。
   
                               (圖4)


     
                               (圖5)

    步驟五:點[VB資源編輯器窗口] 的 [保存] 圖標,彈出 [資源文件另存為] 對話框,點確定,才算真正完成我們的資源文件集成(見圖6)。   
     
                 (圖6)

第二章、資源文件釋放及調用

    要使用集成文件我們必須先釋放已集成文件到指定文件夾,然后再調用就可以,實例是將工作組文件釋放到Windows系統(tǒng)文件,即:System32中。要實現(xiàn)上述目標,我們必須先解決幾個問題:

2.1 獲取系統(tǒng)文件夾System32路徑
    我們通過GetSystemDirectory API函數(shù)來編寫一個獲取系統(tǒng)文件夾自定義函數(shù),我們在工程中建立一個模塊,并將如下代碼復制到模塊中。自定函數(shù)模塊可以自動獲取系統(tǒng)文件夾路徑。

實例代碼如下:

  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 目錄函數(shù)
  8. ' 輸    入:無
  9. ' 輸    出:GetWinSysDir(String) 'System32路徑
  10. ' 調用模塊:GetSystemDirectory 獲取系統(tǒng)目錄
  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為取得系統(tǒng)文件目錄
  19.   Length = GetSystemDirectory(strSysDir, MAX_PATH)
  20.   '去掉多余的空格
  21.   strSysDir = Left(strSysDir, InStr(strSysDir, Chr(0)) - 1)
  22.   '賦值輸出系統(tǒng)路徑
  23.   GetWinSysDir = strSysDir
  24. End Function
復制代碼


2.2 資源文件釋放方法解析
  我們可以通過編程,將資源編輯器中文件,以自定義文件名釋放到指定文件夾,舉例說明,假如:之前我們已將MyPro.exe文件集成至VB資源編輯的CUSTOM中,其資源編輯器中編號101,我們編程實現(xiàn):將MyPro.exe文件名釋放到C盤,代碼如下:

  1. Const ExeFile = 114688          '欲生成的文件大小,原文件112K
  2.   Dim ExeMy()       As Byte     'Btye類型的數(shù)組,存放EXE文件
  3.   Dim Counter        As Long    '文件字節(jié)數(shù)
  4.   '將文件讀入數(shù)組
  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 中欲生成的文件大小,是根據(jù)你前面集成到VB資源編輯器中的文件實際大小換算而來,假如:MyPro.exe 文件為 112 K ,必須換算成字節(jié),1K=1024字節(jié),112K換算后等于 114688 字節(jié)。不多也不能少,否則釋放文件將報錯。
    2LoadResData(101, "CUSTOM") 101 為文件集成在資源編輯品中的編號,CUSTOM為文件類型,這決定著你將釋出哪個文件。
       3Open "C:\MyPro.exe" For Binary As #1 "C:\MyPro.exe",給出了將要釋放文件名:MyPro.exe ,路徑:C:\ ,均為字符串。
  n文件名可以自定義,與集成到資源編輯器中的文件名并不要求一樣
  n將要釋放文件的路徑可以根據(jù)自己需要而定

2.3 實例中釋放工作組文件代碼及說明:

  1. '*************************************************************************
  2. ' 模 塊 名:ReleaseMdw
  3. '-------------------------------------------------------------------------
  4. ' 功能描述:自定義過程,釋放工作組文件到指定路徑,并定義指定名稱
  5. ' 輸    入:strMdw(String)       工作組文件名
  6. '           intTime As Integer   關閉窗體延遲時間
  7. ' 輸    出:無
  8. ' 調用模塊:GetWinSysDir 獲取系統(tǒng)目錄自定義函數(shù)
  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類型的數(shù)組,存放工作組文件
  17.      Dim Counter    As Long  '對工作組文件字節(jié)數(shù)進行循環(huán)
  18.      Dim strSysPath  As String  '系統(tǒng)文件路徑
  19.    
  20. Label1.Caption = "系統(tǒng)正在配置ACCESS環(huán)境,請稍候......."
  21.    
  22. '獲取Windows系統(tǒng)文件夾System32路徑,并賦值變量
  23.      strSysPath = GetWinSysDir
  24.      mdw = LoadResData(101, "CUSTOM") '將文件讀入數(shù)組
  25.    
  26. '判斷當前路徑工作組文件是否存在,& _
  27.    存在則退出 , 不存在則釋放工作組文件
  28.    If Dir(strSysPath & "" & strMdw) = "" Then
  29.      '釋放工作組文件到系統(tǒng)文件夾
  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 = "系統(tǒng)配置成功,正在啟系統(tǒng)......."
  40.   '啟動計時器,在指定秒數(shù)后關閉窗體
  41.   Timer1.Interval = intTime
  42. End Sub  
復制代碼
以上是實例中的代碼,內有詳細注釋,就不做特別說明,你可以將以上代碼復制到工程中的Form1窗體中。
代碼功能:是將集成在VB資源編輯器工作組文件,釋放到系統(tǒng)文件夾中,即:System32中,以便我們后面調用。我們自定義了一個過程,過程預留了兩個接口,一是將釋放后的文件名,二是計時器觸發(fā)時間,以便在指定時間關閉窗體,并關閉應用程序。

第三章、封裝應用程序     

    前面我們已經完成了關鍵的幾個步驟,我們現(xiàn)在要做的就是編譯文件,在編譯之前,我們還得做些準備工作。

3.1 添加控件并完善代碼
    在Form1窗體中加入 時鐘控件,控件名:Timer1;加入 標簽控件,控件名Label1。添加窗體加載事件,時鐘控件計時器觸發(fā)事件代碼。
實例代碼如下:


  1. '*************************************************************************
  2. ' 模 塊 名:Form_Load
  3. '------------------------------------------------------------------------------------------------------------
  4. ' 功能描述:窗體加載事件
  5. ' 輸    入:無
  6. ' 輸    出:無
  7. ' 調用模塊:ReleaseMdw 釋放工作組文件到指定路徑,本實例路徑為系統(tǒng)文件夾
  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項目,在此不做講解,大家可以參看我在此前的發(fā)文。

    至此,本文與大家分享東西到此告一個段落,剩下的就是運行我們編譯的EXE文件看看自己辛苦的勞動成果!以后我將再與大家分享關于DLL組件使用及封裝的有關技巧與方法。

    注:有關此文的實例、素材及VB源碼,您可以到Office中國江羽空間下載。


                                               作者:江羽

                                              2008-10-16


Word文稿下載
游客,如果您要查看本帖隱藏內容請回復





[ 本帖最后由 tanhong 于 2008-10-19 11:50 編輯 ]

本帖子中包含更多資源

您需要 登錄 才可以下載或查看,沒有帳號?注冊

x

評分

參與人數(shù) 3經驗 +25 收起 理由
wang1999 + 10 (V幣)優(yōu)秀原創(chuàng)教程、管理建議(1-5分)
tmtony + 10
5988143 + 5 精品文章

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏5 分享分享1 分享淘帖 訂閱訂閱
2#
發(fā)表于 2008-10-18 11:24:42 | 只看該作者
江兄精品不斷呀~[:28]
3#
 樓主| 發(fā)表于 2008-10-18 11:46:34 | 只看該作者
多謝汪兄的捧場, 還請多多指教.

點擊這里給我發(fā)消息

4#
發(fā)表于 2008-10-18 13:02:05 | 只看該作者
太詳細了, 頂一個,加個分
5#
 樓主| 發(fā)表于 2008-10-18 13:36:39 | 只看該作者
原帖由 tmtony 于 2008-10-18 13:02 發(fā)表
太詳細了, 頂一個,加個分


多謝老大的加分!
6#
發(fā)表于 2008-10-18 13:52:47 | 只看該作者
支持一下
7#
發(fā)表于 2008-10-19 01:08:01 | 只看該作者
好,精彩
8#
發(fā)表于 2008-11-14 19:57:32 | 只看該作者
謝謝,
9#
發(fā)表于 2008-11-15 00:29:11 | 只看該作者
收藏,經典的東西,為什么不收藏?
10#
發(fā)表于 2008-11-25 22:32:11 | 只看該作者
收藏,經典
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則

QQ|站長郵箱|小黑屋|手機版|Office中國/Access中國 ( 粵ICP備10043721號-1 )  

GMT+8, 2024-10-23 08:23 , Processed in 0.111402 second(s), 39 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回復 返回頂部 返回列表