У меня есть модуль ini (дал Chill), он читает/сохраняет форму в файл. Мне нужен кусок кода для кнопок "Save" и "Open", т.е. чтобы он открывал и сохранял в этот файл ini... Сам модуль: МОДУЛЬ ДЛЯ РАБОТЫ С *.ini ФАЙЛАМИ '************************************************************************************** 'Приведенные здесь три основные функции служат для работы 'с ini-файлами 2 на запись (для строкового и целочисленного 'параметров) и одна на чтение. Private Declare Function GetPrivateProfileInt Lib "KERNEL32" Alias "GetPrivateProfileIntA" (ByVal strSection As String, ByVal strKeyName As String, ByVal lngDefault As Long, ByVal strFileName As String) As Long Private Declare Function GetPrivateProfileString Lib "KERNEL32" Alias "GetPrivateProfileStringA" (ByVal strSection As String, ByVal strKeyName As String, ByVal strDefault As String, ByVal strReturned As String, ByVal lngSize As Long, ByVal strFileName As String) As Long Private Declare Function WritePrivateProfileString Lib "KERNEL32" Alias "WritePrivateProfileStringA" (ByVal strSection As String, ByVal strKeyNam As String, ByVal strValue As String, ByVal strFileName As String) As Long '************************************************************************************** '************************************************************************************** Private Declare Function GetPrivateProfileSection Lib "KERNEL32" Alias "GetPrivateProfileSectionA" (ByVal lpAppName As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long '************************************************************************************** 'Данная функция возвращает целочисленное значение из ini-файла. 'Где имя секции – strSection, имя ключа – strKey и strFile – полный путь к ini-файлу. Public Function GetValueInteger(strSection As String, strKey As String, strFile As String) As Integer Dim intValue As Integer On Error GoTo PROC_ERR intValue = GetPrivateProfileInt(strSection, strKey, 0, strFile) GetValueInteger = intValue PROC_EXIT: Exit Function PROC_ERR: MsgBox "Ошибка: <" & Err.Number & "> - " & Err.Description, vbExclamation + vbOKOnly, "GetValueInteger" Resume PROC_EXIT End Function '************************************************************************************** '************************************************************************************** 'Данная функция возвращает строковое значение из ini-файла. 'Где имя секции – strSection, имя ключа – strKey и 'strFile – полный путь к ini-файлу. Обратите внимание, 'что вначале резервируется пустая строка, а из результата функции выкидываются пустоты. Public Function GetValueString(strSection As String, strKey As String, strFile As String) As String Dim strBuffer As String * 256 Dim intSize As Integer On Error GoTo PROC_ERR intSize = GetPrivateProfileString(strSection, strKey, "", strBuffer, 256, strFile) GetValueString = Left$(strBuffer, intSize) PROC_EXIT: Exit Function PROC_ERR: MsgBox "Ошибка: <" & Err.Number & "> - " & Err.Description, vbExclamation + vbOKOnly, "GetValueString" Resume PROC_EXIT End Function '************************************************************************************** '************************************************************************************** 'Данная функция записывает в файл значение strValue 'и возвращает целочисленное значение: True, если запись 'произведена и False, в случае ошибки записи. 'Имя секции – strSection, имя ключа – strKey и strFile – полный путь к ini-файлу. Public Function SetValue(strSection As String, strKey As String, strValue As String, strFile As String) As Integer Dim intStatus As Integer On Error GoTo PROC_ERR intStatus = WritePrivateProfileString(strSection, strKey, strValue, strFile) SetValue = (intStatus <> 0) PROC_EXIT: Exit Function PROC_ERR: MsgBox "Ошибка: <" & Err.Number & "> - " & Err.Description, vbExclamation + vbOKOnly, "SetValue" Resume PROC_EXIT End Function '************************************************************************************** '************************************************************************************** 'Данная функция возвращает двумерный массив значений конкретной секции. 'Вначале, с помощью API-функции в буферизованную строку (strBuffer) 'считывается значение всей секции и определяется количество знаков (intSize). 'Далее, обрезаем строку от пустот и передаем это значение переменной strTemp. 'Затем в цикле Do-Loop считываем значение каждой строки (они разделены символом Chr(0)) 'и, предварительно разделив их на имя ключа и его значение, сбрасываем в двумерный массив. 'Первый параметр в массиве – будет означать, что мы считываем: имя ключа (0) или его значение (1). Public Function GetSection(strSection As String, strFile As String) Dim strBuffer As String * 512 Dim intSize As Integer Dim strTemp As String Dim intTemp As Integer Dim Index As Integer Dim arrSection() As String Dim key As String, value As String, str As String On Error GoTo PROC_ERR intSize = GetPrivateProfileSection(strSection, strBuffer, 512, strFile) strTemp = Left$(strBuffer, intSize) Do Until Len(strTemp) = 0 intTemp = InStr(1, strTemp, Chr(0)) ReDim Preserve arrSection(1, Index) As String str = Mid(strTemp, 1, intTemp) key = Mid(str, 1, InStr(1, str, "=") - 1) value = Mid(str, InStr(1, str, "=") + 1) arrSection(0, Index) = key arrSection(1, Index) = value Index = Index + 1 strTemp = Mid(strTemp, intTemp + 1, Len(strTemp)) Loop GetSection = arrSection PROC_EXIT: Exit Function PROC_ERR: MsgBox "Ошибка: <" & Err.Number & "> - " & Err.Description, vbExclamation + vbOKOnly, "GetValueString" Resume PROC_EXIT End Function '**************************************************************************************
Ответить
|