Чтобы облегчить использование пользователя и сделать систему гибкой, большинство приложений Windows записывают выбор, сделанный пользователем, и различную измененную системную информацию в файле инициализации (INI). Поэтому при изменении системной среды INI-файл можно изменить напрямую, не изменяя программу. Видно, что файл INI имеет решающее значение для функциональности системы. В этой статье рассказывается, как читать и записывать файлы INI при разработке приложений Windows с использованием Visual Basic для Windows (далее — VB).
INI-файл представляет собой текстовый файл, состоящий из нескольких разделов. Под каждым заголовком в скобках находится несколько ключевых слов (keyWord), начинающихся с одного слова и знака равенства. Каждое ключевое слово управляет определенным аспектом работы каждого приложения. функции, значение справа от знака равенства указывает режим работы ключевого слова. Его общий вид следующий:
[раздел1]
ключевое слово1=значение
ключевое слово2=значение2
…
[раздел2]
ключевое слово1=значение1
ключевое слово2=значение2
…
Среди них, если справа от знака равенства ничего нет (то есть значение пустое), это означает, что приложение Windows указало значение по умолчанию для ключевого слова. Если ключевое слово (или его часть) есть. не найдены во всем файле, что также означает, что для них указаны значения по умолчанию. Порядок появления частей не имеет значения, как и порядок ключевых слов внутри каждой части.
Обычно существует два способа чтения и записи INI-файлов: один — редактировать их с помощью «Блокнота» в Windows, что относительно просто и не требует дальнейшего описания; другой — читать и записывать INI-файлы с помощью приложения Windows, обычно с помощью приложения Windows. Запуск приложения Информация в INI-файле считывается при выходе из приложения, а некоторые изменения, внесенные пользователем в рабочую среду, сохраняются при выходе из приложения.
Тип значения ключевых слов в основном является строковым или целочисленным, и его следует читать и записывать в двух ситуациях. Чтобы сделать программу легко поддерживаемой и переносимой, лучше всего инкапсулировать чтение и запись INI-файлов в модуль (RWINI.BAS) и построить функции GetIniS и GetIniN, а также SetIniS и SetIniN в RWI-NI.BAS. . Process, вам необходимо использовать функции Windows API «GetPRivateprofileString», «GetPrivateProfileInt» и «WritePrivateProfileString» в этих функциях и процессах.
Программный код модуля RWINI.BAS следующий:
Объявите функции Windows API, используемые в разделе General-Declaration:
DeclareFunctionGetprivateprofileStringLib "Ker-nel" (ByVallpAppNameAsString, ByVallpKeyNameAsString, ByVallpDefaultAsString, ByVallpRetrm-StringAsString, ByValcbReturnStringAsInteger, ByValFilenameAsString)AsInteger
DeclareFunctionGetPrivatePfileIntLib «Kernel» (ByVallpAppNameAsString, ByVallpKeyNameAsString, ByVallpDefaultAsInteger, ByValFilenameAsString)AsInteger
DeclareFuncitonWritePrivateprofileStringLib «Kernel» (ByVallpapplicationNameAsString, ByVallpKeyNameAsString, ByVallpStringAsString, ByVallplFileNameAsString)AsInteger
FunctionGetIniS(ByValSectionNameAsString, ByValKeyWordAsString, ByValDefStringAsString)AsString
DimResultStringAsString*144,TempAsInteger
DimsAsString, iAsInteger
Temp=GetPrivateProfileString(SectionName,KeyWord,"",ResultString,144,AppProfileName())
'Получаем значение ключевого слова
IfTemp>0Then'Значение ключевого слова не пусто
с=""
Фори=1To144
ЕслиAsc(Mid$(ResultString,I,1))=0Тогда
ВыходДля
Еще
s=s&Mid$(ResultString, I, 1)
КонецЕсли
Следующий
Еще
Temp = WritePrivateProfilesString (имя раздела, ключевое слово, DefString, ppProfileName())
'Записать значения по умолчанию в INI-файл
s=DefString
КонецЕсли
GetIniS=s
Конечнаяфункция
FunctionGetIniN(ByValSectionNameAsString, ByValKeyWordAsString, ByValDefValue
AsIneger)AsInteger
Димдаслонг, сасстринг
d=DefValue
GetIniN=GetPrivateProfileInt(имяраздела,
Ключевое слово, DefValue, ppProfileName())
Ifd<>DefValueThen
с=""&д
d = WritePrivateProfileString (имя_раздела,
Ключевое слово,s,AppProfileName())
КонецЕсли
Конечнаяфункция
SubSetIniS(ByValSectionNameAsString, BtVaKeyWordAsString, ByValValStr
АсСтрока)
Димрес
res=WritePrivateprofileString(SectionName,KeyWord,ValStr,AppProfileName())
EndSub
SubSetIniN(ByValSectionNameAsString, ByValKeyWordAsString, ByValValInt
как целое число)
Димрес,с$
s$=Str$(ValInt)
res=WriteprivateProfileString(SectionName,KeyWord,s$,AppProfileName())
EndSub
sectionName — заголовок каждого раздела, KeyWord — ключевое слово, DefValue в GetIniS и GetIniN — значение ключевого слова по умолчанию, а ValStr и ValInt в SetIniS и SetIniN — значения ключевого слова, которое будет записано в INI-файл. Чтобы лучше проиллюстрировать, как использовать вышеуказанные функции и процедуры, ниже приведены два примера.
Пример 1:
Разработка приложений обычно требует использования баз данных и других файлов. Каталоги этих файлов (включая пути и имена файлов) не должны фиксироваться в программе, а сохраняться в файлах INI, которые считываются из файлов INI при работе программы. бег. Код для чтения файла базы данных выглядит следующим образом:
Dimимя_базы_данныхAsString
Databasename=GetIniS("база данных", "сотрудник", "")
IfDatabaseName=""ThenDatabaseName=InputBox("Пожалуйста, введите каталог базы данных "Сотрудник"),
App.Title)» также можно выбрать через «Диалоговое окно файла».
OnErrorResumeNext
Setdb=OpenDatabas(ИмяБазы данных)
ЕслиОшибка<>0Тогда
MsgBox "Не удалось открыть базу данных!", MB-
ICONSTOP,App.Title:GotoErrorProcessing
Еще
SetIniS «База данных», «Сотрудник», Имя базы данных
КонецЕсли
Онерроргото0
…
Пример 2:
Чтобы облегчить работу пользователя, иногда необходимо сохранить определенную информацию пользовательского интерфейса, например высоту и ширину окна. При загрузке формы читайте высоту и ширину формы из INI-файла. При выгрузке формы сохраняйте текущую высоту и ширину формы в INI-файле. Код выглядит следующим образом:
Подформа1_Load()
…
Forml.Height=GetIniN("Форма 1", "Высота", 6000)
Form1.Width=GetIniN("Форма1","Высота",4500)
EndSub
…
SubForm1_Unload()
…
SetIniN"Form1","Height",Me.Height
SetIniN"Form1,"Width",Me.Width
…
EndSub->