![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Урок 9 - Работа с INI файламиDelphi , Технологии , KOL и MCK
Ведущий раздела KOL и MCK: Анатолий aka XVeL Полную версию библиотеки KOL и MCK можно скачать здесь. Если вы не являетесь любителем забивать свои и чужие реестры мегабайтами мусора, или просто не надеетесь на сохранность информации в нем (когда нибудь Windows наверняка умрет), то вам надо обратить свои взоры на старые добрые Ini-файлы. В KOL работа с ini организованна с помощью объекта TIniFile.
Для чтения/записи данных из ini используют 4 функции. Их описание приведено в таблице :
Еще раз повторюсь и напомню, что чтение или запись происходит в зависимости от того чему равно свойство Mode. Как известно ini файлы построены по следующему принципу
Key1=Value Key2=Value ... [Section2] Key1=Value Key1=Value ... Key - имя переменной Value - Переменная которая записывается под именем Key (Кто этого не знал, может открыть любой ini файл и убедится в этом). За то из какой секции происходит чтение (или запись) отвечает свойство Section. Для того чтобы получить список секций надо обратится к GetSectionNames. А для получения данных из секции, надо воспользоваться SectionData. И у первой и второй процедуры данные записываются в объект типа pStrList (список строк). Я про него пока ничего не рассказывал, но он мало чем отличается от от VCL аналога TStringList. Но отличия все-таки есть, и к сожалению не в пользу pStrList. У pStrList нет таких свойств как Name и Value, а они бы не помешали, так как SectionData возвращает список из переменных и их значений в том же виде, в каком они записаны в ini файле (т.е разделенные знаком равно). Ну это не такая и большая проблема :) В подтверждение этого, маленький примерчик простенького ini-редактора. Программа внешне состоит из двух списков (List1 и List2). В List1 заносятся имена секторов, а в List2 список переменных и их значения. Сверху два поля (edName и edDan), в которые заносятся имя переменной и ее значение, когда происходит двойной клик по List2. Поле edDan (в него заносятся значение) можно редактировать. program Primer_2; uses windows, messages, kol; var Form, panTop, buWrite, edDan,edName, List1,List2 : pControl; dialog : pOpenSaveDialog; strList : pStrList; ini : pIniFile; i : integer; ///////////////////////////////////////////////////////////////////// // обработка клика по кнопке "записать " Procedure ClickOnBuWrite( Dummy : Pointer; Sender : PControl ); begin if edName.Text = '' then Exit; ini.Mode := ifmWrite; ini.ValueString(edName.Text, edDan.text); ini.Mode := ifmRead; end; ///////////////////////////////////////////////////////////////////// Procedure ClickOnList2( Dummy : Pointer; Sender : PControl ); var s : string; i : integer; begin s := List2.Items[List2.CurIndex]; i := IndexOfChar(s, '='); edName.Text := Copy(s, 0, i - 1); edDan.Text := CopyEnd(s, i + 1); end; ///////////////////////////////////////////////////////////////////// Procedure ClickOnList1( Dummy : Pointer; Sender : PControl ); var j : integer; begin edName.Clear ; edDan.Clear ; j := List1.CurIndex; // заносим в List2 данные, которые находятся в j-ой секции strList.Clear ; List2.Clear ; ini.Section := List1.Items[j]; ini.SectionData(strList); for i := 0 to strList.Count-1 do List2.Items[i]:=strList.Items[i]; end; ///////////////////////////////////////////////////////////////////// begin Applet := NewApplet('Пример #2'); dialog := NewOpenSaveDialog('Выбор ini', '', []); dialog.Filter := '*.ini|*.ini|все|*.*'; dialog.OpenDialog := true; if dialog.Execute then ini := OpenIniFile(dialog.Filename) else exit; //----------- делаем интерфейс ------------------------ Form := NewForm(Applet, 'Работа с Ini файлами').setSize(400, 300); Form.Font.FontName := 'MS Sans Serif'; Form.Font.FontHeight := 9; Form.Style := WS_BORDER or WS_SYSMENU or WS_VISIBLE; panTop := NewPanel(Form, esRaised ).SetAlign(caTop) ; panTop.Height := 60 ; buWrite := NewButton(panTop, 'Записать'); buWrite.OnClick := TOnEvent( MakeMethod( nil, @ClickOnBuWrite ) ); edName := NewEditBox(panTop,[eoReadOnly]).PlaceDown; edDan := NewEditBox(panTop, []).PlaceRight; edDan.Width := Form.Width - edName.Width - 30; strList:= NewStrList; List1 := NewListBox(Form,[]).setAlign(caLeft); List2 := NewListBox(Form,[]).setAlign(caClient); //--------------------------------------------------- // заносим в List1 список секций ini.GetSectionNames(strList); for i := 0 to strList.Count - 1 do List1.Items[i] := strList.Items[i]; List1.OnChange := TOnEvent( MakeMethod( nil, @ClickOnList1 ) ); // показываем данные из 0-ой секции List1.CurIndex := 0; ClickOnList1(nil, nil); List2.OnClick := TOnEvent( MakeMethod( nil, @ClickOnList2 ) ); run(Applet); end.Исходный текст : 2,64 Кб ; размер программы: 32,5Кб(без сжатия и замены System). А теперь таблица подытоживающая все вышесказанное, а также рассказывающая про свойства pIniFile, которые не были затронуты:
В статье описана работа с INI файлами в программе KOL, представлен пример простого редактора ini-файлов. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
|
||||||||||||||||||||||||||||||||||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |