|
Вопрос # 635/ вопрос открыт / |
|
Здравствуйте, уважаемые эксперты!
Ini.WriteString('Options' ,'TextWith-memo3', Memo3.Lines.GetText);
В разделe 'Options' параметру 'TextWith-memo3' присваиваем значение из Memo3...
-эт записывается в ини-файл первая строка. А как записать к примеру вторую или третью?
 |
Вопрос задал: Pokemonchyk (статус: Посетитель)
Вопрос отправлен: 16 июня 2007, 01:53
Состояние вопроса: открыт, ответов: 3.
|
Ответ #1. Отвечает эксперт: Градов Ю.М.
Здравствуйте, Pokemonchyk!
var
ini: TIniFile;
begin
// Создаем INI Object и открываем или создаем файл test.ini
ini := TIniFile.Create('c:\MyIni.ini');
try
// Записать стринг в INI файл.
ini.WriteString('Section_Name', 'Key_Name', 'String Value');
// Записать целое в INI файл.
ini.WriteInteger('Section_Name', 'Key_Name', 2002);
// Записать boolean в INI файл.
ini.WriteBool('Section_Name', 'Key_Name', True);
finally
ini.Free;
end;
end;
 |
Ответ отправил: Градов Ю.М. (статус: 8-ой класс)
Время отправки: 16 июня 2007, 02:10
|
Ответ #2. Отвечает эксперт: Вадим К
Здравствуйте, Pokemonchyk!
Есть два подхода. первый - в цикле сохраняем строки. что то вида
for i:=0 to memo1.lines.count-1 do
ini.writestring('section',line_'+inttostr(i),memo1.lines[I]);
загрузка тоже не сложна, если знать, что можно узнать количество строк в секции.
Но мне лично нравиться другой способ.
Ini.WriteString('Options' ,'TextWith-memo3', Memo3.Lines.DelimiterText)
Как загрузку сделать - догадаетесь.:)
Свойство DelimiterText позволяет брать и устанавливать содержимое мемо в таком виде
"строка1","строка 2","строка 3"
Если вам не нравиться запятая в качестве разделителя, то её можно сменить в свойстве Delimiter. Если строка не содержит пробелов, то кавычки могут быть убраны.
И ещё. Не нужно пытаться запхать в ини файл большой кусок текста. при обёме больше 64кбайта начнуться проблемы - это максимальный объём ини файла. Но проблема даже не в том. Если в ини сохраняется 1000 элементов, то он начинает реально подтормаживать. И проблема тут не в делфи.
Но есть выход. Заменяем класс TIniFile на TMemIniFile (он тоже находиться в IniFiles.pas). Всё остальное остаётся таким же, за исключением маленького нюанса. Когда вы пишете в ини файл, не забывайте вызывать ini.update - эта строка произведёт фактически запись файла на диск. В классическом варианте при добавлении каждой записи файл читается, парситься, обновляется и снова пишеться - поэтому и тормоза. Проблемы с размером для него тоже нет.
 |
Ответ отправил: Вадим К (статус: Академик)
Время отправки: 16 июня 2007, 02:17
Оценка за ответ: 5
|
Ответ #3. Отвечает эксперт: Дима Гусаков
Здравствуйте, Pokemonchyk!
Добавьте в uses (модули) модуль для работы с ini-файлами: inifiles. Без него у нас ничего не выйдет.
Пример:
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var Vars: Tinifile;
begin
Vars:=TiniFile.Create(extractfilepath(paramstr(0))+'data/vars.ini');
Vars.WriteString('Form','Caption',Form1.Caption);
Vars.WriteInteger('Form','Left',Form1.Left);
Vars.WriteInteger('Form','Top',Form1.Top);
Vars.WriteInteger('Form','Width',Form1.Width);
Vars.WriteInteger('Form','Height',Form1.Height);
Vars.Free;
end;
Попробую теперь объяснить этот код.
var Vars: Tinifile;
Мы объявили переменную Vars типа Tinifile, т.е. чтобы нам работать с ними, необходимо объявить переменную. И теперь для чтения и записи данных, всё происходит через обращение этой переменной.
Vars:=TiniFile.Create(extractfilepath(paramstr(0))+'data/vars.ini');
Если этого файла нет в каталоге, то он автоматически создастся, а если есть, то откроется.
Vars.WriteString('Form','Caption',Form1.Caption);
Записываем заголовок формы, причём, обратите внимание - командой WriteString(Дословно - записать текст).
Vars.WriteInteger('Form','Left',Form1.Left);
Записываем положение формы слева от экрана. Это величина целая - WriteInteger(Дословно - записать целое число).
Vars.Free;
Очищаем память.
 |
Ответ отправил: Дима Гусаков (статус: 2-ой класс)
Время отправки: 17 июня 2007, 09:15
Оценка за ответ: 4
|
Мини-форум вопроса
Мини-форум пуст.
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|