国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

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

2019-11-18 17:51:47
字體:
供稿:網(wǎng)友
為了方便用戶使用和使系統(tǒng)具有靈活性,大多數(shù)Win-dows應(yīng)用程序?qū)⒂脩羲龅倪x擇以及各種變化的系統(tǒng)信息記錄在初始化(INI)文件中。因此,當(dāng)系統(tǒng)的環(huán)境發(fā)生變化時(shí),可以直接修改INI文件,而無需修改程序。由此可見,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)右邊無任何內(nèi)容(即value為空),那就表示W(wǎng)indows應(yīng)用程序已為該關(guān)鍵詞指定了缺省值,如果在整個(gè)文件中找不到某個(gè)關(guān)鍵詞(或整個(gè)一部分),那同樣表示為它們指定了缺省值。各個(gè)部分所出現(xiàn)的順序是無關(guān)緊要的,在每一個(gè)部分里,各個(gè)關(guān)鍵詞的順序同樣也無關(guān)緊要。

讀寫INI文件通常有兩種方式:一是在Windows中用“記事本”(Notepad)對(duì)其進(jìn)行編輯,比較簡(jiǎn)單,無需贅述;二是由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ù):



DeclareFunctionGetprivateprofileStringLib“Ker-nel”(ByVallpAppNameAsString,
ByVallpKeyNameAsString,ByVallpDefaultAsString,ByVallpRetrm-StringAs
String,ByValcbReturnStringAsInteger,ByValFilenameAsString)AsInteger
DeclareFunctionGetPrivatePfileIntLib“Kernel”(ByVallpAppNameAsString,
ByVallpKeyNameAsString,ByVallpDefaultAsInteger,ByValFilenameAsString)As
Integer
DeclareFuncitonWritePrivateprofileStringLib“Kernel”(ByVallpapplicationName
AsString,ByVallpKeyNameAsString,ByVallpStringAsString,ByVallplFileName
AsString)AsInteger
FunctionGetIniS(ByValSectionNameAsString,ByValKeyWordAsString,ByValDefString
AsString)AsString
DimResultStringAsString*144,TempAsInteger
DimsAsString,iAsInteger
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
FunctionGetIniN(ByValSectionNameAsString,ByValKeyWordAsString,ByValDefValue
AsIneger)AsInteger
DimdAsLong,sAsString
d=DefValue
GetIniN=GetPrivateProfileInt(SectionName,
KeyWord,DefValue,ppProfileName())
Ifd<>DefValueThen
s=“”&d
d=WritePrivateProfileString(SectionName,
KeyWord,s,AppProfileName())
EndIf
EndFunction
SubSetIniS(ByValSectionNameAsString,BtVaKeyWordAsString,ByValValStr
AsString)
Dimres
res=WritePrivateprofileString(SectionName,KeyWord,ValStr,AppProfileName())
EndSub
SubSetIniN(ByValSectionNameAsString,ByValKeyWordAsString,ByValValInt
AsInteger)
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ù)庫和其它一些文件,這些文件的目錄(包括路徑和文件名)不應(yīng)在程序中固定,而是保存在INI文件中,程序運(yùn)行時(shí)由INI文件中讀入。讀入數(shù)據(jù)庫文件的代碼如下:



DimDatabasenameAsString
Databasename=GetIniS(“數(shù)據(jù)庫”,“職工”,“”)
IfDatabaseName=“”ThenDatabaseName=InputBox(“請(qǐng)輸入數(shù)據(jù)庫《職工》的目錄”),
App.Title)'也可通過“文件對(duì)話框”進(jìn)行選擇
OnErrorResumeNext
Setdb=OpenDatabas(DatabaseName)
IfErr<>0Then
MsgBox“打開數(shù)據(jù)庫失敗!”,MB-
ICONSTOP,App.Title:GotoErrorProcessing
Else
SetIniS“數(shù)據(jù)庫”,“職工”,DatabaseName
EndIf
OnErrorGoTo0
……



實(shí)例2:

為了方便用戶操作,有時(shí)需要保存用戶界面的某些信息,例如窗口的高度和寬度等。裝載窗體時(shí),從INI文件中讀入窗體高度和寬度,卸載窗體時(shí)將窗體當(dāng)前高度和寬度存入INI文件,代碼如下:



SubForm1_Load()
……
Forml.Height=GetIniN(“窗體1”,“高度”,6000)
Form1.Width=GetIniN(“窗體1”,“高度”,4500)
EndSub
……
SubForm1_Unload()
……
SetIniN“窗體1”,“高度”,Me.Height
SetIniN“窗體1,”寬度“,Me.Width
……
EndSub->


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 始兴县| 河西区| 咸阳市| 崇仁县| 湄潭县| 江永县| 石屏县| 明星| 拜泉县| 上高县| 抚远县| 尼勒克县| 西盟| 罗江县| 红河县| 通化市| 庆阳市| 肥西县| 万州区| 南和县| 大悟县| 福海县| 汤原县| 重庆市| 呼伦贝尔市| 古浪县| 营口市| 安顺市| 庆云县| 洞口县| 石台县| 黔西| 岑溪市| 阜南县| 保定市| 霍林郭勒市| 鲁山县| 内江市| 沂南县| 修文县| 宁城县|