在 Visual Basic 中資源文件的多種使用技巧

在 Visual Basic 中資源文件的多種使用技巧
武漢 艾軍
摘要 本文介紹了 Visual Basic 中資源文件的多種使用技巧:①開發中英(簡、繁)雙版本的技巧;②實現“綠色”軟件;③直接播放聲音文件;④保存各類圖標、光標圖片等等。
關鍵詞 資源文件
一、 開發中英(簡、繁)雙版本
現在比較流行的軟件都會有中文版、英文版、繁體版等等多個版本,並可以根據系統的語言自動顯示相適應的版本,那麼這個功能在 VB 是如何實現得呢的:
1、 首先通過 API 函數GetSystemDefaultLCID 判斷系統的語言
Option Explicit
Dim lang As String
Private Declare Function GetSystemDefaultLCID Lib "kernel32" () As Long
Private Sub Form_Load()
Dim LocaleID As Long
LocaleID = GetSystemDefaultLCID
    Select Case LocaleID
        Case &H404
            MsgBox "當前系統爲:中文繁體", , "語言"
        Case &H804
            MsgBox "當前系統爲:中文簡體", , "語言"
            lang = "1"
        Case &H409
            MsgBox "當前系統爲:英文", , "語言"
            lang = "2"
    End Select
End Sub
2、然後程序就可以加載保存在資源文件(這裏我們就是使用的這種方法)、註冊表、INI 文件、文本文件或其他文件中的各類字符串,以達到達到實現多種語言的目的。
⑴啓動 VB6.0,在“外接程序→外接程序管理器”中加載“Visual Basic 6 資源編輯器”
⑵在 VB 資源編輯器窗口中,點擊“編輯字符串表格”輸入如下資料:
標識號 中文(中國)
101 例子
102 中文
103 英文
201 Ensample
202 Chinese
203 English
⑶保存資源文件,寫如下代碼:(自定義裝載字符的函數 LoadString)
Sub LoadString()
    Me.Caption = LoadResString(Int(lang & "01"))
    Command1(0).Caption = LoadResString(Int(lang & "02"))
    Command1(1).Caption = LoadResString(Int(lang & "03"))
End Sub
⑷怎麼樣一個簡單的中英雙版本的程序就做出來了,如果把 lang 的值設置爲 1,則顯示中文,如果把 lang 的值設置爲 2,則顯示英文。
二、 實現“綠色”軟件
現在非常流行“綠色”軟件,不需要什麼安裝程序只要一個 EXE 文件就可以運行程序
了,而在 VB 的編程中有許多地方需要調用第三方的控件(很難用 API 函數搞定所有的功能),這就需要製做一個安裝程序,把所需要的控件、DLL 文件或其他文件打包進去了,那麼在 VB 中怎麼用變通的方法實現“綠色”軟件呢,請看:
示例:
1、主程序.EXE
用 VB6.0 編寫的程序,調用了 Winsock 控件,如果在沒有安裝 VB5.0、6.0 的機器上運行則會出現錯誤,導致程序運行失敗,這時如果按一般的方法,只有把這個程序用 VB5.0、6.0 的安裝程序進行打包,不然只有用用2的方法來解決了。
2、註冊程序.EXE
用 VB6.0 編寫的程序,使用資源文件的方法,把 Winsock 控件封裝到本程序中,在運行主程序.EXE之前,先運行本程序,通過 API 函數 GetSystemDirectory 取得系統的 Winddows/System 的目錄,然後把 Winsock 控件複製到該目錄下,並用 Shell 來完成控件的註冊。
⑴啓動 VB6.0,在“外接程序→外接程序管理器”中加載“Visual Basic 6 資源編輯器”
⑵在 VB 資源編輯器窗口中,點擊“添加自定義資料”,增加 Winsock 控件(C:/Winddows/System/Mswinsck.ocx),再雙擊剛剛創建的自定義資源,彈出”編輯屬性”窗口,定義如下:
類型: “OCX”
標識號: 101
語言: 中文(中國)
⑶保存資源文件,寫如下代碼:
Option Explicit
Private Declare Function GetSystemDirectory Lib "kernel32" Alias "GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long
Const MAX_PATH = 260  註釋:定義足夠長的字符串
Private Sub Form_Load()
Dim TempFile() As Byte
Dim FileNum As Integer
Dim TempDir As String
    TempDir = GetWinSysDir 註釋:自定義函數取得系統的 Winddows/System 的目錄
    TempFile = LoadResData(101, "OCX") 註釋:用以從資源 (.res) 文件裝載若干可能類型的數據,並返回一個 Byte 數組
    FileNum = FreeFile
    Open TempDir & "/Mswinsck.ocx" For Binary Access Write As #FileNum 註釋:新建文件(把 Winsock 控件複製到指定目錄下)
        Put #FileNum, , TempFile
    Close #FileNum
    
    註釋:Shell "regsvr32 " & TempDir & "/Mswinsck.ocx ", vbNormalFocus 註釋:註冊控件,有彈出對話框
    Shell "regsvr32 " & TempDir & "/Mswinsck.ocx /s", vbNormalFocus 註釋:註冊控件,無彈出對話框
    
    MsgBox "註冊成功,現在本程序可正常運行了!!", vbOKOnly, "註冊控件"
    
    Unload Me
End Sub

Public Function GetWinSysDir() 註釋:定義讀取Winddows/System 的所在目錄的函數
Dim S As String, Length As Long
S = String(MAX_PATH, 0) 註釋:賦值
Length = GetSystemDirectory(S, MAX_PATH)   註釋:S爲取得目錄,MAX_PATH 爲長度
S = Left(S, InStr(S, Chr(0)) - 1) 註釋:去掉多餘的空格
GetWinSysDir = S
End Function
註釋:補充:S 和 MAX_PATH 的值是可以隨便賦的,
註釋:如: Dim S As String * 20
註釋:    Length = GetSystemDirectory(S, 20)
3、補充說明
在用 VB6.0 保存上述兩個程序後,請再使用 VB5.0 重新打開這兩個程序,並編譯爲主程序.EXE、註冊文件.EXE。(用 VB5.0 編譯的程序,在 Win98、2000 下不需要任何 DLL 文件)
程序運行
4、程序運行
將主程序.EXE、註冊文件.EXE兩個文件,複製到任意機器上,先運行註冊文件.EXE註冊第三方的控件,再運行主程序.EXE,就不會有任何的錯誤了,一個變通的“綠色”軟件就完成了。
三、 直接播放EXE文件中的聲音文件
使用資源文件,可以直接在在EXE文件中播放聲音文件(WAV文件),使程序顯得更加專業。
⑴啓動 VB6.0,在“外接程序→外接程序管理器”中加載“Visual Basic 6 資源編輯器”
⑵在 VB 資源編輯器窗口中,點擊“添加自定義資料”,增加任意的 WAV 文件,再雙擊剛剛創建的自定義資源,彈出”編輯屬性”窗口,定義如下:
類型: "WAVE"
標識號: 102
語言: 中文(中國)
⑶保存資源文件,寫如下代碼:
Option Explicit
Private Declare Function GetSystemDefaultLCID Lib "kernel32" () As Long
Private Declare Function sndPlaySoundFromMemory Lib "winmm.dll" Alias "sndPlaySoundA" (lpszSoundName As Any, ByVal uFlags As Long) As Long
Public Const SND_ASYNC = &H1&
Public Const SND_MEMORY = &H4&
Private Sub Command5_Click()  註釋:播放 WAV 文件
    Dim bArr() As Byte
    bArr = LoadResData(102, "WAVE")
    sndPlaySoundFromMemory bArr(0), SND_ASYNC Or SND_MEMORY
End Sub
⑷按 F5 運行本程序,點擊 Command 按鈕,就可以聽到你選定的 WAV 文件的聲音了。
四、 直接調用各類圖標、光標圖片
在一個程序中,我們可能需要調用多個圖標、光標、圖片文件,一般來說我們主要是使用 ImageList 控件,不過其時使用資源文件是最好的方法(可以少使用一個控件呀)。
⑴啓動 VB6.0,在“外接程序→外接程序管理器”中加載“Visual Basic 6 資源編輯器”
⑵在 VB 資源編輯器窗口中,點擊“添加光標”,“添加圖標”,“添加位圖”,裝載所需要的文件。
⑶程序代碼如下:
Me.Icon = LoadResPicture(101, vbResIcon) 註釋:加載圖標
Picture1.Picture = LoadResPicture(101, vbResBitmap) 註釋:加載位圖
Command1.MouseIcon = LoadResPicture(101, vbResCursor) 註釋:加載光標
五、到此爲此資源文件的多種使用技巧全部介紹完畢,希望這些技巧對大家的編程有幫助,上述程序全部在 Win98、VB5.0或6.0下運行通過,如果大家還有什麼問題,可到 www.d1vb.com 來我們一起討論。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章