一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

用VB開發(fā)應(yīng)用程序如何使用INI文件

 barbarossia 2006-09-26
6、用VB開發(fā)應(yīng)用程序如何使用INI文件

為了方便用戶使用和使系統(tǒng)具有靈活性,大多數(shù)Win-dows應(yīng)用程序?qū)⒂脩羲龅倪x擇以及各種變化的系統(tǒng)信息記錄在初始化(INI)文件中。因此,當(dāng)系統(tǒng)的環(huán)境發(fā)生變化時(shí),可以直接修改INI文件,而無(wú)需修改程序。由此可見,INI文件對(duì)系統(tǒng)功能是至關(guān)重要的。本文將介紹采用VisualBasicforWindows(下稱VB)開發(fā)Windows應(yīng)用程序時(shí)如何讀寫INI文件。

INI文件是文本文件,由若干部分(section)組成,在每個(gè)帶括號(hào)的標(biāo)題下面,是若干個(gè)以單個(gè)單詞開頭的關(guān)鍵詞(keyword)和一個(gè)等號(hào),每個(gè)關(guān)鍵詞會(huì)控制應(yīng)用程序某個(gè)功能的工作方式,等號(hào)右邊的值(value)指定關(guān)鍵詞的操作方式。其一般形式如下:

[section1]
keyword1=valuel
keyword2=value2
……
[section2]
keyword1=value1
keyword2=value2
……

其中,如果等號(hào)右邊無(wú)任何內(nèi)容(即value為空),那就表示W(wǎng)indows應(yīng)用程序已為該關(guān)鍵詞指定了缺省值,如果在整個(gè)文件中找不到某個(gè)關(guān)鍵詞(或整個(gè)一部分),那同樣表示為它們指定了缺省值。各個(gè)部分所出現(xiàn)的順序是無(wú)關(guān)緊要的,在每一個(gè)部分里,各個(gè)關(guān)鍵詞的順序同樣也無(wú)關(guān)緊要。

讀寫INI文件通常有兩種方式:一是在Windows中用"記事本"(Notepad)對(duì)其進(jìn)行編輯,比較簡(jiǎn)單,無(wú)需贅述;二是由Windows應(yīng)用程序讀寫INI文件,通常是應(yīng)用程序運(yùn)行時(shí)讀取INI文件中的信息,退出應(yīng)用程序時(shí)保存用戶對(duì)運(yùn)行環(huán)境的某些修改。

關(guān)鍵詞的值的類型多為字符串或整數(shù)型,應(yīng)分兩種情況讀寫。為了使程序具有可維護(hù)性和可移植性,最好把對(duì)INI文件的讀寫封裝在一個(gè)模塊(RWINI.BAS)中,在RWI-NI.BAS中構(gòu)造GetIniS和GetIniN函數(shù)以及SetIniS和Se-tIniN過程,在這些函數(shù)和過程中需要使用WindowsAPI的"GetPrivateprofileString"、"GetPrivateProfileInt"和"WritePrivateProfileString"函數(shù)。

RWINI.BAS模塊的程序代碼如下:

在General-Declearation部分中聲明使用到的WindowsAPI函數(shù):

Declare Function GetprivateprofileString Lib"Ker-nel"(ByVallpAppName As String,ByVallpKeyName As String,ByVallpDefault As String,ByVal lpRetrm-String As String,ByVal cbReturnString As Integer,ByVal Filename As String)As Integer

Declare FunctionGetPrivatePfileInt Lib "Kernel"(ByVal lpAppName As String,ByVal lpKeyName As String,ByVal lpDefault As Integer,ByVal Filename As String)As Integer

Declare FuncitonWritePrivateprofileString Lib "Kernel"(ByVal lpApplicationName As String,ByVal lpKeyName As String,ByVal lpString As String,ByVal lplFileName As String)As Integer

寫入INI文件
Function GetIniS(ByVal SectionName As String,ByVal KeyWord As String,ByVal DefString As String)As String
Dim ResultString As String * 144,Temp As Integer
Dims As String,i As Integer
Temp%=GetPrivateProfileString(SectionName,KeyWord,"",ResultString,144,AppProfileName())
‘檢索關(guān)鍵詞的值
IfTemp%>0Then‘關(guān)鍵詞的值不為空
s=""
Fori=1To144
IfAsc(Mid$(ResultString,I,1))=0Then
ExitFor
Else
s=s&Mid$(ResultString,I,1)
EndIf
Next
Else
Temp%=WritePrivateProfilesString(sectionname,KeyWord,DefString,ppProfileName())
‘將缺省值寫入INI文件
s=DefString
EndIf
GetIniS=s
EndFunction

讀INI文件
FunctionGetIniN(ByValSectionNameAsString,ByValKeyWordAsString,ByValDefValue As Ineger)AsInteger
DimdAsLong,sAsString
d=DefValue
GetIniN=GetPrivateProfileInt(SectionName,KeyWord,DefValue,ppProfileName())
If d<>DefValueThen
    s=""&d
    d=WritePrivateProfileString(SectionName,KeyWord,s,AppProfileName())
EndIf
EndFunction

SubSetIniS(ByVal SectionName As String,BtVal KeyWord As String,ByVal ValStr As String)
Dim res%
res%=WritePrivateprofileString(SectionName,KeyWord,ValStr,AppProfileName())
EndSub

SubSetIniN(ByValSectionNameAsString,ByValKeyWordAsString,ByValValIntAsInteger)
Dimres%,s$
s$=Str$(ValInt)
res%=WriteprivateProfileString(SectionName,KeyWord,s$,AppProfileName())
EndSub

SectionName為每一部分的標(biāo)題,KeyWord為關(guān)鍵詞,GetIniS和GetIniN中的DefValue為關(guān)鍵詞的缺省值,SetIniS和SetIniN的ValStr和ValInt為要寫入INI文件的關(guān)鍵詞的值。為了能更好地說明如何使用以上函數(shù)和過程,下面舉兩個(gè)實(shí)例。

實(shí)例1:

開發(fā)應(yīng)用程序通常要使用數(shù)據(jù)庫(kù)和其它一些文件,這些文件的目錄(包括路徑和文件名)不應(yīng)在程序中固定,而是保存在INI文件中,程序運(yùn)行時(shí)由INI文件中讀入。讀入數(shù)據(jù)庫(kù)文件的代碼如下:
DimDatabasenameAsString
Databasename=GetIniS("數(shù)據(jù)庫(kù)","職工","")
If DatabaseName=""ThenDatabaseName=InputBox("請(qǐng)輸入數(shù)據(jù)庫(kù)《職工》的目錄"),App.Title)’也可通過"文件對(duì)話框"進(jìn)行選擇
OnErrorResumeNext
Setdb=OpenDatabas(DatabaseName)
IfErr<>0Then
MsgBox"打開數(shù)據(jù)庫(kù)失敗!",MB-
ICONSTOP,App.Title:GotoErrorProcessing
Else
SetIniS"數(shù)據(jù)庫(kù)","職工",DatabaseName
EndIf
OnErrorGoTo0
……
實(shí)例2:

為了方便用戶操作,有時(shí)需要保存用戶界面的某些信息,例如窗口的高度和寬度等。裝載窗體時(shí),從INI文件中讀入窗體高度和寬度,卸載窗體時(shí)將窗體當(dāng)前高度和寬度存入INI文件,代碼如下:
Sub Form1_Load()
……
Forml.Height=GetIniN("窗體1","高度",6000)
Form1.Width=GetIniN("窗體1","高度",4500)
EndSub
……
Sub Form1_Unload()
……
SetIniN"窗體1","高度",Me.Height
SetIniN"窗體1,"寬度",Me.Width
……
End Sub

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    免费国产成人性生活生活片| 天海翼精品久久中文字幕| 欧美激情一区二区亚洲专区| 日韩免费av一区二区三区| 欧美日韩一级aa大片| 精品人妻一区二区三区四区久久| 91久久国产福利自产拍| 日本本亚洲三级在线播放| 日本加勒比不卡二三四区| 亚洲av又爽又色又色| 一区二区三区日韩中文| 91人妻丝袜一区二区三区| 午夜福利激情性生活免费视频| 日本精品中文字幕在线视频| 欧美欧美欧美欧美一区| 日韩欧美一区二区不卡视频| 一区二区三区亚洲国产| 中文字幕日韩精品人一妻| 日韩欧美综合中文字幕| 91日韩欧美在线视频| 九九热视频网在线观看| 国产成人精品在线一区二区三区| 91亚洲国产日韩在线| 精品al亚洲麻豆一区| 色婷婷日本视频在线观看| 伊人久久青草地综合婷婷| 男生和女生哪个更好色| 色哟哟在线免费一区二区三区| 国产精品色热综合在线| 免费国产成人性生活生活片| 91精品欧美综合在ⅹ| 丁香六月婷婷基地伊人| 少妇人妻中出中文字幕| 欧美六区视频在线观看| 熟女一区二区三区国产| 国产白丝粉嫩av在线免费观看| 国产又大又黄又粗的黄色| 欧美视频在线观看一区| 免费在线观看激情小视频| 日韩欧美一区二区黄色| 国产成人国产精品国产三级|