資源描述:
《利用ini文件給程序創(chuàng)建動態(tài)菜單》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在學(xué)術(shù)論文-天天文庫。
1、利用INI文件給程序創(chuàng)建動態(tài)菜單DPG:xinhaifu提供加入時(shí)間:2002年8月23日顯示次數(shù):536象Word那樣,在“文件”菜單中可以找到我們最近打開或編輯過的文件。這是程序在運(yùn)行時(shí)創(chuàng)建了動態(tài)菜單的緣故。VB程序?qū)崿F(xiàn)此功能有很多文章探討過,但大都著眼于Windows的注冊表。我們的注冊表早已發(fā)福了,有沒有辦法不讓她再增加負(fù)擔(dān)?用INI文件!INI文件是系統(tǒng)、應(yīng)用程序的配置文件。它可以使得我們的VB程序更具靈活性,充分地利用它自然也能夠?qū)崿F(xiàn)動態(tài)菜單的創(chuàng)建。下面給個例子。首先,我們得給程序添加一個模塊,在模塊中申明讀寫
2、INI用的兩個WindowsAPI函數(shù),并在其中封裝自定義的讀取、寫入INI的函數(shù):OptionExplicit'讀寫INI的API函數(shù)PublicDeclareFunctionWritePrivateProfileStringLib"kernel32"Alias"WritePrivateProfileStringA"(ByVallpApplicationNameAsString,ByVallpKeyNameAsAny,ByVallpStringAsAny,ByVallpFileNameAsString)AsLongPub
3、licDeclareFunctionGetPrivateProfileStringLib"kernel32"Alias"GetPrivateProfileStringA"(ByVallpApplicationNameAsString,ByVallpKeyNameAsAny,ByVallpDefaultAsString,ByVallpReturnedStringAsString,ByValnSizeAsLong,ByVallpFileNameAsString)AsLong'自定義寫入INI函數(shù)PublicFunctionWr
4、iteIni(ByValsectionAsString,ByValkeyAsString,ByValvalueAsString)AsBooleanDimxAsLong,BuffAsString*128,IAsIntegerBuff=value+Chr(0)x=WritePrivateProfileString(section,key,Buff,App.Path+"MenuSetting.ini")WriteIni=xEndFunction'自定義讀取INI函數(shù)PublicFunctionReadIni(ByValsect
5、ionAsString,ByValkeyAsString)AsStringDimxAsLong,BuffAsString*128,IAsIntegerx=GetPrivateProfileString(section,key,"",Buff,128,App.Path+"MenuSetting.ini")I=InStr(Buff,Chr(0))ReadIni=Trim(Left(Buff,I-1))EndFunction接著,回到主窗體,給主窗體添加若干控件、編輯菜單(控件和菜單名稱詳見代碼),其中,“文件”菜單的動態(tài)菜單
6、要用數(shù)組,其Index號可以從1開始,注意將這些動態(tài)菜單設(shè)為不可見。本例可保存最近打開的三個文件,如需要多一些可自行添加。以下是主窗體代碼:OptionExplicit'聲明用于判斷寫入INI中的FileName(n)中的n變量DimIAsString'為了能添在FileName串的后面,聲明為StringPrivateSubForm_Load()I=0'初值Text1.Left=0Text1.Top=0Text1=""Text1.FontSize=12Me.Caption="txtEditor"Me.Width=8000
7、Me.Height=6000AddMenu'添加動態(tài)菜單EndSubPrivateSubForm_Resize()'這個沒什么可說,為了使例程完整而已Text1.Width=Me.ScaleWidthText1.Height=Me.ScaleHeightEndSubPrivateSubmnuExit_Click()End'退出EndSub'打開文件PrivateSubmnuOpen_Click()DimsFAsStringCommonDialog1.Filter="文檔文件(*.txt)
8、*.txt
9、所有文件(*.*)
10、*
11、.*"CommonDialog1.ShowOpenOpenCommonDialog1.FileNameForInputAs#1Text1.Text=StrConv(InputB$(LOF(1),1),vbUnicode)Close#1IfI>=3ThenI=0'如大于等于3則返回原值I=I+1sF="F