Оказывается 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
^^^^^^
это номер ящика