Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 635

Раздел: Delphi » Прочее
/ вопрос открыт /

Здравствуйте, уважаемые эксперты!

Ini.WriteString('Options' ,'TextWith-memo3', Memo3.Lines.GetText);
В разделe 'Options' параметру 'TextWith-memo3' присваиваем значение из Memo3...

-эт записывается в ини-файл первая строка. А как записать к примеру вторую или третью?

Приложение:
  1.  
  2.  


Pokemonchyk Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: 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


Мини-форум вопроса

Мини-форум пуст.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:59
Выполнено за 0.03 сек.