Работа с
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 Long
Private Declare Function WritePrivateProfileString _
Lib "kernel32" Alias "WritePrivateProfileStringA" ( _
ByVal lpApplicationName As String, _
ByVal lpKeyName As Any, _
ByVal lpString As Any, _
ByVal lpFileName As String _
) As Long
Private Declare Function WriteProfileString _
Lib "kernel32" Alias "WriteProfileStringA" ( _
ByVal lpszSection As String, _
ByVal lpszKeyName As String, _
ByVal lpszString As String _
) As Long
Private 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 String
INIFileName = sFileName
End Property
'И запись
Public Property Let INIFileName(s_filename As String)
sFileName = s_filename
End Property
'Обработаем инициализацию класса
Private Sub Class_Initialize()
If Len(sFileName) > 0 Then
'на случай если забыли задать имя
sFileName = App.EXEName & ".ini"
'не забудьте про расширение
End IF
End Sub
Теперь
"обернём" API-функции в оболочку класса.
Public Sub WritePrivateINIString( _
sSection, _
sKEy As String, _
sValue As String)
Dim lRes As Long
lRes = 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 Long
Dim lLen As Long
Dim sTstr As String
sTstr = Space$(512)
lRes = GetPrivateProfileString( _
sSection, _
sKEy, _
sDefault, _
sTstr, _
Len(sTstr), _
sFileName)
If lRes > 0 Then
sTstr = Left$(sTstr, lRes)
End If
GetPrivateINIString = sTstr
End Function
Public Sub WriteWinINIString( _
sSection As String, _
sKEy As String, _
sValue As String)
Dim lRes As Long
lRes = WriteProfileString( _
sSection, _
sKEy, _
sValue)
End Sub
Public Function GetWinINIString( _
sSection, _
sKEy, _
Optional sDefault As String _
) As String
Dim lRes As Long
Dim lTlen As Long
Dim sTstr As String
sTstr = Space$(512)
lRes = GetProfileString( _
sSection, _
sKEy, _
sDefault, _
sTstr, _
Len(sTstr))
If lRes > 0 Then
sTstr = Left$(sTstr, lRes)
End If
GetWinINIString = sTstr
End Function