Работа с
INI файлами
Почти
все приложения Windows, сохраняют своё состояние. То есть положение окон,
список документов и тому подобное. Для этого существуют два способа: реестр или
"INI" файлы(файлы инициализации). Чтобы работать с реестром Visual
Basic имеет встроенные функции GetSetting и SaveSetting.
Вы спросите: если есть реестр зачем INI-файлы. Отвечаю:
попробуйте перенести часть реестра(особенно если вы не знаете какую) с одного
компьютера на другой. А INI-файл - цап и неси куда хочешь. Да и изменять их
легче чем реестр. В общем я за текстовые INI-файлы, и Вам их советую. А теперь
за работу. Вообще работать с INI файлами через VB нельзя. Эту Возможность нам
предоставляет, кто бы вы думали? Windows API.
Для того чтобы работать с INI-файлами существуют API-Функции:
GetPrivateProfileString, WritePrivateProfileString, WriteProfileString
и GetProfileString. Их, конечно, можно использовать сами по себе, но для
удобства мы их заключим в класс clsINI. Для этого нужно создать этот
класс, и добавить в него код, который мы сейчас разберём. Для начала объявим
переменные:
'Объявим API функции
Private Declare Function GetPrivateProfileString _Lib "kernel32" Alias "GetPrivateProfileStringA" ( _ ByVal lpApplicationName As String, _ ByVal lpKeyName As Any, _ ByVal lpDefault As String, _ ByVal lpReturnedString As String, _ ByVal nSize As Long, _ ByVal lpFileName As String _) As LongPrivate Declare Function WritePrivateProfileString _Lib "kernel32" Alias "WritePrivateProfileStringA" ( _ ByVal lpApplicationName As String, _ ByVal lpKeyName As Any, _ ByVal lpString As Any, _ ByVal lpFileName As String _) As LongPrivate Declare Function WriteProfileString _Lib "kernel32" Alias "WriteProfileStringA" ( _ ByVal lpszSection As String, _ ByVal lpszKeyName As String, _ ByVal lpszString As String _) As LongPrivate Declare Function GetProfileString _ Lib "kernel32" Alias "GetProfileStringA" ( _ ByVal lpAppName As String, _ ByVal lpKeyName As String, _ ByVal lpDefault As String, _ ByVal lpReturnedString As String, _ ByVal nSize As Long _) As Long'Переменная для хранения 'имени INI-файла
Private sFileName As String
Теперь
обработаем свойства определяющие имя файла инициализации.
'Устанавливаем свойство' ~~~~~~.INIFileName'чтение
Public Property Get INIFileName() As StringINIFileName = sFileNameEnd Property'И запись
Public Property Let INIFileName(s_filename As String)sFileName = s_filenameEnd Property 'Обработаем инициализацию класса
Private Sub Class_Initialize()If Len(sFileName) > 0 Then 'на случай если забыли задать имяsFileName = App.EXEName & ".ini"
'не забудьте про расширениеEnd IFEnd Sub
Теперь
"обернём" API-функции в оболочку класса.
Public Sub WritePrivateINIString( _ sSection, _ sKEy As String, _ sValue As String) Dim lRes As LonglRes = WritePrivateProfileString( _ sSection, _ sKEy, _ sValue, _sFileName)End Sub Public Function GetPrivateINIString( _ sSection As String, _ sKEy As String, _ Optional sDefault As String _) As String Dim lRes As LongDim lLen As LongDim sTstr As StringsTstr = Space$(512)lRes = GetPrivateProfileString( _ sSection, _ sKEy, _ sDefault, _ sTstr, _ Len(sTstr), _ sFileName) If lRes > 0 ThensTstr = Left$(sTstr, lRes)End IfGetPrivateINIString = sTstrEnd Function Public Sub WriteWinINIString( _ sSection As String, _ sKEy As String, _ sValue As String) Dim lRes As LonglRes = WriteProfileString( _ sSection, _ sKEy, _ sValue)End Sub Public Function GetWinINIString( _ sSection, _ sKEy, _ Optional sDefault As String _) As String Dim lRes As LongDim lTlen As LongDim sTstr As StringsTstr = Space$(512)lRes = GetProfileString( _ sSection, _ sKEy, _ sDefault, _ sTstr, _ Len(sTstr)) If lRes > 0 ThensTstr = Left$(sTstr, lRes)End IfGetWinINIString = sTstrEnd Function