资源描述:
《利用ini文件给程序创建动态菜单》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、利用INI文件给程序创建动态菜单DPG:xinhaifu提供加入时间:2002年8月23日显示次数:536象Word那样,在“文件”菜单中可以找到我们最近打开或编辑过的文件。这是程序在运行时创建了动态菜单的缘故。VB程序实现此功能有很多文章探讨过,但大都着眼于Windows的注册表。我们的注册表早已发福了,有没有办法不让她再增加负担?用INI文件!INI文件是系统、应用程序的配置文件。它可以使得我们的VB程序更具灵活性,充分地利用它自然也能够实现动态菜单的创建。下面给个例子。首先,我们得给程序添加一个模块,在模块中申明读写INI用的两个WindowsAPI函数,并在其中封
2、装自定义的读取、写入INI的函数:OptionExplicit'读写INI的API函數PublicDeclareFunctionWritePrivateProfileStringLib"kernel32"Alias"WritePrivateProfileStringA"(ByVallpApplicationNameAsString,ByVallpKeyNameAsAny,ByVallpStringAsAny,ByVallpFileNameAsString)AsLongPublicDeclareFunctionGetPrivateProfileStringLib"kerne
3、l32"Alias"GetPrivateProfileStringA"(ByVallpApplicationNameAsString,ByVallpKeyNameAsAny,ByVallpDefaultAsString,ByVallpReturnedStringAsString,ByValnSizeAsLong,ByVallpFileNameAsString)AsLong'自定义写入INI函數PublicFunctionWriteIni(ByValsectionAsString,ByValkeyAsString,ByValvalueAsString)AsBooleanDi
4、mxAsLong,BuffAsString*128,IAsIntegerBuff=value+Chr(0)x=WritePrivateProfileString(section,key,Buff,App.Path+"MenuSetting.ini")WriteIni=xEndFunction'自定义读取INI函數PublicFunctionReadIni(ByValsectionAsString,ByValkeyAsString)AsStringDimxAsLong,BuffAsString*128,IAsIntegerx=GetPrivateProfileString
5、(section,key,"",Buff,128,App.Path+"MenuSetting.ini")I=InStr(Buff,Chr(0))ReadIni=Trim(Left(Buff,I-1))EndFunction接着,回到主窗体,给主窗体添加若干控件、编辑菜单(控件和菜单名称详见代码),其中,“文件”菜单的动态菜单要用数组,其Index号可以从1开始,注意将这些动态菜单设为不可见。本例可保存最近打开的三个文件,如需要多一些可自行添加。以下是主窗体代码:OptionExplicit'声明用于判断写入INI中的FileName(n)中的n变量DimIAsStrin
6、g'为了能添在FileName串的后面,声明为StringPrivateSubForm_Load()I=0'初值Text1.Left=0Text1.Top=0Text1=""Text1.FontSize=12Me.Caption="txtEditor"Me.Width=8000Me.Height=6000AddMenu'添加动态菜单EndSubPrivateSubForm_Resize()'这个没什么可说,为了使例程完整而已Text1.Width=Me.ScaleWidthText1.Height=Me.ScaleHeightEndSubPrivateSubmnuExit
7、_Click()End'退出EndSub'打开文件PrivateSubmnuOpen_Click()DimsFAsStringCommonDialog1.Filter="文档文件(*.txt)
8、*.txt
9、所有文件(*.*)
10、*.*"CommonDialog1.ShowOpenOpenCommonDialog1.FileNameForInputAs#1Text1.Text=StrConv(InputB$(LOF(1),1),vbUnicode)Close#1IfI>=3ThenI=0'如大于等于3则返回原值I=I+1sF="F