📄 ba62.htm
字号:
<HTML>
<HEAD>
<TITLE>用VB开发应用程序如何使用INI文件</TITLE>
<META content="text/html; charset=gb2312" http-equiv=Content-Type>
</head>
<p align="center"><script src="../../1.js"></script></a>
<BODY topMargin=4 vLink=#0000ff>
<TABLE border=0 cellPadding=0 cellSpacing=0 width="100%">
<TBODY>
<TR>
<TD height="52">
<DIV align=center>
<CENTER>
<table border=0 cellpadding=0 cellspacing=0 width=679 align="center">
<tbody>
<tr>
<td width=200 height="59">
</TD></TR><!--msnavigation--></TBODY></TABLE>
<table border=0 cellpadding=0 cellspacing=0 width="100%">
<tbody>
<tr><!--msnavigation--><td valign=top height="123">
<div align=center>
<table border=1 bordercolor=#b9d9ff cellpadding=0 cellspacing=0
class=table width=755>
<center>
<tr>
<td width="100%" height="3">
<div align="center"> <strong><b>用VB开发应用程序如何使用INI文件</b></strong></span></div>
</td>
</tr>
<tr>
<td
width="100%" class="unnamed1" height="124">
<div align="left">
<p align="center"> </p>
<p align="left"> <font size="-1" face="宋体">为了方便用户使用和使系统具有灵活性,大多数Win-dows应用程序将用户所做的选择以及各种变化的系统信息记录在初始化(INI)文件中。因此,当系统的环境发生变化时,可以直接修改INI文件,而无需修改程序。由此可见,INI文件对系统功能是至关重要的。本文将介绍采用VisualBasicforWindows(下称VB)开发Windows应用程序时如何读写INI文件。<br>
<br>
INI文件是文本文件,由若干部分(section)组成,在每个带括号的标题下面,是若干个以单个单词开头的关键词(keyword)和一个等号,每个关键词会控制应用程序某个功能的工作方式,等号右边的值(value)指定关键词的操作方式。其一般形式如下:<br>
<br>
[section1]<br>
keyword1=valuel<br>
keyword2=value2<br>
……<br>
[section2]<br>
keyword1=value1<br>
keyword2=value2<br>
……<br>
<br>
<br>
<br>
其中,如果等号右边无任何内容(即value为空),那就表示Windows应用程序已为该关键词指定了缺省值,如果在整个文件中找不到某个关键词(或整个一部分),那同样表示为它们指定了缺省值。各个部分所出现的顺序是无关紧要的,在每一个部分里,各个关键词的顺序同样也无关紧要。<br>
<br>
读写INI文件通常有两种方式:一是在Windows中用“记事本”(Notepad)对其进行编辑,比较简单,无需赘述;二是由Windows应用程序读写INI文件,通常是应用程序运行时读取INI文件中的信息,退出应用程序时保存用户对运行环境的某些修改。<br>
<br>
关键词的值的类型多为字符串或整数型,应分两种情况读写。为了使程序具有可维护性和可移植性,最好把对INI文件的读写封装在一个模块(RWINI.BAS)中,在RWI-NI.BAS中构造GetIniS和GetIniN函数以及SetIniS和Se-tIniN过程,在这些函数和过程中需要使用WindowsAPI的“GetPrivateprofileString”、“GetPrivateProfileInt”和“WritePrivateProfileString”函数。<br>
<br>
RWINI.BAS模块的程序代码如下:<br>
<br>
在General-Declearation部分中声明使用到的WindowsAPI函数:<br>
<br>
<br>
<br>
DeclareFunctionGetprivateprofileStringLib“Ker-nel”(ByVallpAppNameAsString,<br>
ByVallpKeyNameAsString,ByVallpDefaultAsString,ByVallpRetrm-StringAs<br>
String,ByValcbReturnStringAsInteger,ByValFilenameAsString)AsInteger<br>
DeclareFunctionGetPrivatePfileIntLib“Kernel”(ByVallpAppNameAsString,<br>
ByVallpKeyNameAsString,ByVallpDefaultAsInteger,ByValFilenameAsString)As<br>
Integer<br>
DeclareFuncitonWritePrivateprofileStringLib“Kernel”(ByVallpApplicationName<br>
AsString,ByVallpKeyNameAsString,ByVallpStringAsString,ByVallplFileName<br>
AsString)AsInteger<br>
FunctionGetIniS(ByValSectionNameAsString,ByValKeyWordAsString,ByValDefString<br>
AsString)AsString<br>
DimResultStringAsString*144,TempAsInteger<br>
DimsAsString,iAsInteger<br>
Temp%=GetPrivateProfileString(SectionName,KeyWord,“”,ResultString,144,AppProfileName())<br>
‘检索关键词的值<br>
IfTemp%>0Then‘关键词的值不为空<br>
s=“”<br>
Fori=1To144<br>
IfAsc(Mid$(ResultString,i,1))=0Then<br>
ExitFor<br>
Else<br>
s=s&Mid$(ResultString,i,1)<br>
EndIf<br>
Next<br>
Else<br>
Temp%=WritePrivateProfilesString(sectionname,KeyWord,DefString,ppProfileName())<br>
‘将缺省值写入INI文件<br>
s=DefString<br>
EndIf<br>
GetIniS=s<br>
EndFunction<br>
FunctionGetIniN(ByValSectionNameAsString,ByValKeyWordAsString,ByValDefValue<br>
AsIneger)AsInteger<br>
DimdAsLong,sAsString<br>
d=DefValue<br>
GetIniN=GetPrivateProfileInt(SectionName,<br>
KeyWord,DefValue,ppProfileName())<br>
Ifd<>DefValueThen<br>
s=“”&d<br>
d=WritePrivateProfileString(SectionName,<br>
KeyWord,s,AppProfileName())<br>
EndIf<br>
EndFunction<br>
SubSetIniS(ByValSectionNameAsString,BtVaKeyWordAsString,ByValValStr<br>
AsString)<br>
Dimres%<br>
res%=WritePrivateprofileString(SectionName,KeyWord,ValStr,AppProfileName())<br>
EndSub<br>
SubSetIniN(ByValSectionNameAsString,ByValKeyWordAsString,ByValValInt<br>
AsInteger)<br>
Dimres%,s$<br>
s$=Str$(ValInt)<br>
res%=WriteprivateProfileString(SectionName,KeyWord,s$,AppProfileName())<br>
EndSub<br>
<br>
SectionName为每一部分的标题,KeyWord为关键词,GetIniS和GetIniN中的DefValue为关键词的缺省值,SetIniS和SetIniN的ValStr和ValInt为要写入INI文件的关键词的值。为了能更好地说明如何使用以上函数和过程,下面举两个实例。<br>
<br>
实例1:<br>
<br>
开发应用程序通常要使用数据库和其它一些文件,这些文件的目录(包括路径和文件名)不应在程序中固定,而是保存在INI文件中,程序运行时由INI文件中读入。读入数据库文件的代码如下:<br>
<br>
<br>
<br>
DimDatabasenameAsString<br>
Databasename=GetIniS(“数据库”,“职工”,“”)<br>
IfDatabaseName=“”ThenDatabaseName=InputBox(“请输入数据库《职工》的目录”),<br>
App.Title)’也可通过“文件对话框”进行选择<br>
OnErrorResumeNext<br>
Setdb=OpenDatabas(DatabaseName)<br>
IfErr<>0Then<br>
MsgBox“打开数据库失败!”,MB-<br>
ICONSTOP,App.Title:GotoErrorProcessing<br>
Else<br>
SetIniS“数据库”,“职工”,DatabaseName<br>
EndIf<br>
OnErrorGoTo0<br>
……<br>
<br>
<br>
<br>
实例2:<br>
<br>
为了方便用户操作,有时需要保存用户界面的某些信息,例如窗口的高度和宽度等。装载窗体时,从INI文件中读入窗体高度和宽度,卸载窗体时将窗体当前高度和宽度存入INI文件,代码如下:<br>
<br>
<br>
<br>
Sub Form1_Load()<br>
……<br>
Forml.Height=GetIniN(“窗体1”,“高度”,6000)<br>
Form1.Width=GetIniN(“窗体1”,“高度”,4500)<br>
EndSub<br>
……<br>
Sub Form1_Unload()<br>
……<br>
SetIniN“窗体1”,“高度”,Me.Height<br>
SetIniN“窗体1,”宽度“,Me.Width<br>
……<br>
End Sub</font>
</div>
</td>
</tr>
</center>
<tr>
<td width="100%" class="unnamed1">
<p align=right><a href="ba61.htm">(上一页)</a>---<a href="ba63.htm">(下一页)</a></p>
</td>
</tr>
<tr>
<td width="100%" class="unnamed1">
</div>
</td>
</tr>
<!--msnavigation--></tbody>
</table>
<p align="center"><script src="../../2.js"></script></a>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -