Работа с 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

 

Hosted by uCoz