На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: SCINER, B.V.
  
    > Как сохранить настройки программы , работа с ini-файлами
      Цитата
      В модуле находятся две подпрограммы.

      Public Sub SaveOptions(Frm As Form) - запись настроек в реестр
      Public Sub LoadOptions(Frm As Form) - чтение настроек из реестра
      Настройки записываются текущему пользователю. Т.е. в Windows NT каждый пользователь будет иметь свои настройки.

      Использование:

      1) Выбрать форму, которая будет хранить в своих элементах настройки. Например в калькуляторе - frmMain

      2) В обработчик события формы OnLoad вставить строку

      LoadOptions Me

      3) В обработчик события формы OnUnload вставить строку:

      SaveOptions Me

      По умолчанию сохраняются/записываются только положение и размер окна приложения.

      Если Вы хотите сохранить в реестре ещё значение какого-нибудь элемента формы, то надо в свойствах этого элемента в поле Tag поставить значение "Save" (в процессе разработки формы, а не в RunTime)

      Например в калькуляторе можно было бы сохранять значения поля lcd0

      Для этого надо просто присвоить свойству Tag этого поля значение Save

      И тогда, если вы вставляли ранее описанные строки в обработчики OnLoad и OnUnload, то значение этого поля будут записываться и считываться при запуске приложения и выходе из него.

      Это - в модуль.

      ExpandedWrap disabled
        Option Explicit
         
        Public Sub SaveOptions(Frm As Form)
        Dim Cont As Control
        SaveSetting App.Title, Frm.Name, "(name)", Frm.Caption
        With Frm
        If Frm.WindowState <> vbMinimized Then
        SaveSetting App.Title, Frm.Name, "_Form Wight", .Width
        SaveSetting App.Title, Frm.Name, "_Form Height", .Height
        SaveSetting App.Title, Frm.Name, "_Form Top", .Top
        SaveSetting App.Title, Frm.Name, "_Form Left", .Left
        End If
        'Общие параметры приложение
        Dim НазваниеПараметра As String
        For Each Cont In Frm
        Select Case Left$(Cont.Tag, 5)
        Case "Save:"
        НазваниеПараметра = Mid$(Cont.Tag, 6, Len(Cont.Tag) - 5)
        SaveSetting App.Title, "Shared", НазваниеПараметра, Cont
        Case Else
        End Select
        Next
         
        'Параметры окна
        For Each Cont In Frm
        Select Case Cont.Tag
        Case "Save"
        Select Case IsArray(Cont)
        Case False
        SaveSetting App.Title, Frm.Name, Cont.Name, Cont
        Case True
        SaveSetting App.Title, Frm.Name, Cont.Name & " [" &Trim$(Str$(Cont.Index)) & "]", Cont
        End Select
        Case Else
        End Select
        Next
        End With
        End Sub
         
        Public Sub LoadOptions(Frm As Form)
        Dim Cont As Control
         
        With Frm
        Frm.Width = GetSetting(App.Title, Frm.Name, "_Form Wight", .Width)
        Frm.Height = GetSetting(App.Title, Frm.Name, "_Form Height", .Height)
        Frm.Top = GetSetting(App.Title, Frm.Name, "_Form Top", .Top)
        Frm.Left = GetSetting(App.Title, Frm.Name, "_Form Left", .Left)
         
        'Общие параметры приложение
        Dim НазваниеПараметра As String
        For Each Cont In Frm
        Select Case Left$(Cont.Tag, 5)
        Case "Save:"
        НазваниеПараметра = Mid$(Cont.Tag, 6, Len(Cont.Tag) - 5)
        Cont = GetSetting(App.Title, "Shared", НазваниеПараметра, Cont)
        Case Else
        End Select
        Next
         
        For Each Cont In Frm
        Select Case Cont.Tag
        Case "Save"
        Select Case IsArray(Cont)
        Case False
        Cont = GetSetting(App.Title, Frm.Name, Cont.Name, Cont)
        Case True
        Cont = GetSetting(App.Title, Frm.Name, Cont.Name & " [" &Trim$(Str$(Cont.Index)) & "]", Cont)
        End Select
        Case Else
        End Select
        Next
        End With
        End Sub
         
        Public Function Параметр(НазваниеПараметра As String, Optional Default)
        Параметр = GetSetting(App.Title, "Shared", НазваниеПараметра, Default)
        End Function


      Цитата
      С вами был BSP

      Эта тема была разделена из темы "Настройки програмы!!!"

      Это сообщение было перенесено сюда или объединено из темы "Как сохранить настройки программы"
        Кстати этого нет в факе, просьба добавить!

        ExpandedWrap disabled
          Option Explicit
           
          Private Declare Function GetPrivateProfileString Lib "kernel32" Alias _
          "GetPrivateProfileStringA" (ByVal Section As String, ByVal Key As String, _
          ByVal Default As String, ByVal GetStr As String, ByVal nSize As Long, _
          ByVal INIfile As String) As Long
          Private Declare Function WritePrivateProfileString Lib "kernel32" Alias _
          "WritePrivateProfileStringA" (ByVal Section As String, ByVal Key As String, _
          ByVal putStr As String, ByVal INIfile As String) As Long
           
          Dim CONFIG_FILE As String
           
          Sub Main()
            'ПРИСВАИВАЕМ ПУТЬ К ФАЙЛУ С НАСТРОЙКАМИ С КОТОРЫМ ХОТИМ РАБОТАТЬ
            CONFIG_FILE = RCP(App.Path) & "options.ini"
            'ПРИ ПЕРВОМ ЗАПУСКЕ ВЫДАСТ "ПУСТО"
            'ПРИ ВТОРОМ УЖЕ ВЫТАЩИТ СОХРАНЕННЫЕ ДАННЫЕ
            MsgBox SETS("МояНастройка", "Пусто")
            'ЗАПИШЕМ ДАННЫЕ В ФАЙЛ НАСТРОЕК
            SETS("МояНастройка") = "Настроенные настройки"
            End Sub
           
          'ФУНКЦИЯ ВОЗВРАЩАЕТ СТРОКУ СО СЛЕШЕМ НА КОНЦЕ
          Function RCP(ByVal P As String)
            RCP = P & IIf(VBA.Right(P, 1) = "\", vbNullString, "\")
            End Function
          'ФУНКЦИЯ ФОРМАТИРОВАНИЯ СТРОКИ
          Function TrimNullChar(ByVal lpzString As String) As String
            lpzString = lpzString & vbNullChar
            lpzString = VBA.Left$(lpzString, InStr(lpzString, vbNullChar) - 1)
            TrimNullChar = lpzString
            End Function
           
          'ОБОЛОЧКА К ФУНКЦИИ ЧТЕНИЯ/ЗАПИСИ INI-ФАЙЛОВ
          Public Property Get SETS(ByVal Key As String, Optional ByVal Default As Variant) As Variant
            Dim Tmp As String
            Tmp = GetSettingIni(CONFIG_FILE, "OPTIONS", Key, Default)
            SETS = Tmp
            End Property
          Public Property Let SETS(ByVal Key As String, Optional ByVal Default As Variant, ByVal vNewValue As Variant)
            SaveSettingIni CONFIG_FILE, "OPTIONS", Key, vNewValue
            End Property
           
          Private Function GetSettingIni(ByVal File As String, ByVal Section As String, ByVal Key As String, Optional ByVal Default As Variant) As Variant
            Dim Tmp As String, Ret As Long
            Tmp = VBA.Space$(16536)
            Ret = GetPrivateProfileString(Section, Key, vbNullString, Tmp, Len(Tmp), File)
            If Ret = 0 Then GetSettingIni = Default Else GetSettingIni = TrimNullChar(Tmp)
            End Function
          Private Sub SaveSettingIni(ByVal File As String, ByVal Section As String, ByVal Key As String, ByVal Value As Variant)
            Dim Ret As Integer, wS As String
            Ret = WritePrivateProfileString(Section, Key, CStr(Value), File)
            End Sub
        Сообщение отредактировано: SCINER -
          Готовый класс для работы с INI. Подключаешь его к проекту.

          Сохранение параметров:
          ExpandedWrap disabled
            dim iNi as new clsIni
             iNi.Filename = path & "file.ini"
             iNi.Value("Color", "MainLable") = Me.lblMain.Backcolor
             iNi.UpdateFile

          Загрузка параметров:
          ExpandedWrap disabled
            Dim iNi As New clsIni
             iNi.Filename = path & "file.ini"
             Me.lblMain.Backcolor = iNi.Value("Color", "MainLable")

          Прикреплённый файлПрикреплённый файлclsInI.cls (13.03 Кбайт, скачиваний: 876)
          1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
          0 пользователей:


          Рейтинг@Mail.ru
          [ Script execution time: 0,0268 ]   [ 17 queries used ]   [ Generated: 21.05.24, 13:39 GMT ]