INI-файлы
Home Up Автозапись Буфер обмена Долой пробелы DOS-программы Контролы в массиве Редактор VB Скрытые папки INI-файлы Лог-файлы Миминизация Звук в MP3 Советы

Работа с ини файлами или сохранение настроек

Оказывается ini-файлы очень удобны для хранения настроек программы!

Для работы с ini-фалами нам потребуются две функции Windows API как раз для этого призванные. Объявим их в модуле:

Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Declare Function SleepEx& Lib "kernel32" (ByVal dwMilliseconds As Long, ByVal _
bAlertable As Long)


Public Path As String
'Функции для записи/чтения ini-файла
Public 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

Public 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


Public Function sGetINI(sINIFile As String, sSection As String, _
sKey As String, sDefault As String) As String
Dim temp As String * 256
Dim nLength As Integer

temp = Space$(256)
nLength = GetPrivateProfileString(sSection, sKey, sDefault, _
temp, 255, sINIFile)
sGetINI = Left$(temp, nLength)
End Function

Public Sub writeINI(sINIFile As String, sSection As String, sKey _
As String, sValue As String)
Dim n As Integer
Dim temp As String

temp = sValue

'Заменим символы CR/LF на пробелы
For n = 1 To Len(sValue)
If Mid$(sValue, n, 1) = vbCr Or Mid$(sValue, n, 1) = vbLf _
Then Mid$(sValue, n) = " "
Next n
n = WritePrivateProfileString(sSection, sKey, temp, sINIFile)

End Sub

Структура ини-файла состоит из названий разделов, заключенных в квадратные скобки [раздел] и их параметров, находящихся ниже заголовка раздела. Таким образом мы можем записывать в файл данные о каждом почтовом ящике (пример из Сообчайлера, хотя и в Почтовом роботе тоже можно найти). Я реализовал так.
[Box]
BoxSum= 1
Здесь записывается общее количество ящиков

[BoxNumber:1]
Это ящик под номером 1 (свойство BoxID класса Box определяет номер ящика. Вам необязательно разбираться с классами. Просто наберите в режиме разработки box.Item(1) и нажмите точку. После этого вы увидите
все свойства, какие можно просмотреть и записать. Для ящика с _текущим_ порядковым номером 1. Все. Больше вам ничего знать-то не нужно, хотя это все довольно просто.)
Далее. В эти свойства необходимо записать информацию из файла global.ini. Для этого используем функцию sGetINI, описанную в модуле mdlINIFile, которая считывает указанные ей параметры из указанного
раздела.
Синтаксис ее такой sGetINI (путь к ини-файлу, название раздела, название параметра этого
раздела который нужно считать, значение по умолчанию если раздел или параметр не будет найден)
Функция возвращает строковое значение параметра. Т.е. для считывания значения переменной BoxSum необходимо сделать следующую запись:


infFilePath = App.Path & "\global.ini"
BoxSum = Val(sGetINI(infFilePath, "Box", "BoxSum", "0"))
^^^
По умолчанию я поставил значение BoxSum=0

Например для считывания значений свойств ящика я использовал цикл

For i = 1 To BoxSum
nBoxName = sGetINI(infFilePath, "BoxNumber:" & nBoxID, "BoxName", " none")
nPOP3Server = sGetINI(infFilePath, "BoxNumber:" & nBoxID, "POP3Server", "none")
nSMTPServer = sGetINI(infFilePath, "BoxNumber:" & nBoxID, "SMTPServer", "none")
nPassword = sGetINI(infFilePath, "BoxNumber:" & nBoxID, "Password", "none")

nBoxID = Str(i)
Box.Add nBoxName, nPassword, nSMTPServer, nPOP3Server, nBoxID
Next i


Предпоследняя строка записывает считанные параметры в ящик с текущим номером i. Т.е. чтобы просмотреть название ящика с номером n нам нужно набрать Box.Item(n).BoxName. Все просто. Это как свойство Text
контрола TextBox.

Ну вот, считываем параметры, добавляем ящики... Тоже самое с папками.

Запись осуществляется с помощью функции writeINI.
Синтаксис:
writeINI путь, раздел, параметр этого раздела, значение присваиваемое
этому параметру
Т.е. чтобы записать новое имя ящика  нужно выполнить:
writeINI infFilePath, "Box number:" & nBoxID, "BoxName", nBoxName
^^^^^^
это номер ящика

На главную

 

Home ] Up ] О группе ] Статьи ] Исходники ] Орфография ] Проекты ] Наша рассылка ]

Хостинг от uCoz