Читая Эпплмана

Пример 3. Работа с INI-файлами.

В предыдущей статье было рассказано как преобразовывать АPI-функции в случае когда параметры могут получать разные типы значений. Здесь на практическом примере это будет показано. Для работы с INI-файлами существует всего-навсего две API-функции: GetPrivateProfileString и WritePrivateProfileString. Однако ряд параметров в них может принимать как строковый тип (String), так и длинночисленный (Long). Эпплман предлагает написать безопасные объявления данных функций исходя из предложенных API Text Viewer. В результате у нас получится 6 функций, каждая из которых будет выполнять свое определенное действие.

В предлагаемом примере я сделал корректировку программы Эпплмана, удалив из нее не актуальные части, которые относятся к WIN16, и русифицировав ее. Код является достаточно прозрачным для восприятия поэтому нет смысла расписывать каждую процедуру в отдельности. Остановимся только на одной, которая считывает значения всех ключей из определенной секции. Для этого в модуле создается новая функция-обертка, которая защищает API-функцию от передачи неправильного типа данных.
Function VBGetPrivateProfileString(section$, key$, File$) As String
    Dim KeyValue$
    Dim characters As Long
    KeyValue$ = String$(128, 0)
    characters = GetPrivateProfileStringByKeyName(section$, key$, "", KeyValue$, 127, File$)
    If characters > 1 Then
        KeyValue$ = Left$(KeyValue$, characters)
    End If
    VBGetPrivateProfileString = KeyValue$
End Function

В начале создается буфер достаточно большой для получения списка всех ключей, а затем с помощью функции GetPrivateProfileStringByKeyName выбирается конкретное значение. В форме же данная полученная строка просто разбивается на отдельные сегменты, которые и пересылаются в ListBox. 

Как я и обещал в самом начале, я не буду останавливаться только на примерах гуру по API-фукциям. В zip-файле вы найдете две папки с примерами. Первая - VB5INI- является непосредственно примером  Эпплмана, а вторая - UtilityINI- моя расширенная версия для полноценной работы с INI-файлами. 
Там добавлена кнопка (и соответственно ее обработка) открытия любого INI-файла с помощью стандартного диалогового окна. Естественно, для этого в модуле были добавлены Тип и еще одна API-функция.
Перечень секций выбранного файла пересылается в ComboBox. В качестве поправки на случай очень большого количества секций зарезервирован увеличенный буфер под их перечень. Аналогичным образом увеличен буфер списка ключей для их большого числа. Вставлены проверки на допустимость вводимых значений, сделаны запросы на удаление. Реализованы как две новые кнопки для создания новых и удаления выбранных секций INI-файла. 

 
Назад Далее Скачать пример

Hosted by uCoz