Если вы не являетесь любителем забивать свои и чужие реестры мегабайтами мусора, или просто не надеетесь на сохранность информации в нем (когда нибудь Windows наверняка умрет), то вам надо обратить свои взоры на старые добрые Ini-файлы.
В KOL работа с ini организованна с помощью объекта TIniFile.
Для того чтобы открыть ini-файл (и одновременно создать TIniFile), надо
воспользоваться функцией OpenIniFile.
Свойство Mode отвечает за то, что вы будете делать с ini файлом
: производить запись или чтение. Для записи вы должны прировнять Mode
к ifmWrite, и соответственно для чтения к ifmRead. По умолчанию (при открытии)
Mode = ifmRead, т.е. для чтения.
Для чтения/записи данных из ini используют 4 функции. Их описание приведено в таблице :
Функция | Выполняемое действие |
ValueInteger |
Чтение/запись данных Value типа integer под именем Key |
function ValueInteger( const Key: String; Value: Integer ): Integer; |
|
ValueString |
Чтение/запись данных Value типа string под именем Key |
function ValueString( const Key: String; const Value: String ): String; |
|
ValueBoolean |
Чтение/запись данных Value типа boolean под именем Key |
function ValueBoolean( const Key: String; Value: Boolean ): Boolean; |
|
ValueData |
Чтение/запись данных на которые указывает Value длинной Count под именем Key |
function ValueData( const Key: String; Value: Pointer; Count: Integer ): Boolean; |
Еще раз повторюсь и напомню, что чтение или запись происходит в зависимости от того чему равно свойство Mode.
Как известно ini файлы построены по следующему принципу
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, которые не были затронуты:
Cвойство | Описание |
FileName | Имя ini файла |
Mode | Отвечает в каком режиме находится Ini файл: для чтения или для записи |
Section | Секция из которой (или в которую) идет чтение (или запись) |
GetSectionNames | Читает список секций в этом ini-файле |
SectionData | Читает данные из текущей секции |
ClearAll | Удаляет все секции в ini-файле |
ClearSection | Удаляет текущую секцию |
ClearKey | Удаляет ключ (переменную) |
|
Программирование для чайников.
|