Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ComboBox + INI, Хитрая запись в ИНИ-файл. 
:(
    Опции темы
ForumRu
  Дата 4.10.2004, 21:11 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Как в INI-файл записывать последний текст из ComboBox? Тое сть: есть ИНИ-файл с содержанием:

Код
[SECTION]
1=Текст
2=Еще текс
3=И снова текст
4=И опять текст


Этими (к примеру) пунктами заполняется ComboBox при загрузки программы. Когдя пользователь вписует новый текст в ComboBox и закрывает программу он должен сохраняться, а последний пропадать в этом списке пропадать:

Код
[SECTION]
1=НОВЫЙ ТЕКСТ
2=Текст
3=Еще текс
4=И снова текст


и т.д:

Код
[SECTION]
1=СОВСЕМ НОВЫЙ ТЕКСТ
2=НОВЫЙ ТЕКСТ
3=Текст
4=Еще текс


Как это можно реализовать на практике. Буду благодарен за код.
  Вверх
Pakshin A. S.
Дата 4.10.2004, 21:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 5056
Регистрация: 16.2.2003

Репутация: 21
Всего: 61



Вот три процедуры
Код


{В ini есть секция с количеством записей}

procedure TForm1.Load(filename:string);
var
f:TIniFiles;
i:integer;
begin
f:=TiniFile.Create(filename);
Memo1.Lines.Clear;
for i:=1 to f.readinteger('Section', 'Count', 1) do
 Memo1.Lines.Add(f.readString('Section', IntToStr(i), '');
f.free;
CombBox1.Items:=Memo1.Lines;
end;

procedure TForm1.AddItem(str:string);
var
i:integer;
begin
for i:=Memo1.Lines.Count-1 downto 1 do
 Memo1.Lines[i]:=Memo1.Lines[i-1];
Memo1.Lines[0]:=str;
ComboBox1.IOtems:=Memo1.Lines;
end;

procedure TForm1.Save(filename:string);
var
i:integer;
begin
f:=TiniFile.Create(fileName);
for i:=0 to Memo1.Lines.Count-1 do
f.WriteString('Section, IntToStr(i+1), Memo1.Lines[i]);
f.WriteInteger('Section', 'Count', Memo1.Lines.Count);
f.Free;
end;

У Memo свойство Visible=False;

Вроде так... smile.gif wink.gif

Это сообщение отредактировал(а) Pakshin A. S. - 4.10.2004, 21:47
PM   Вверх
p0s0l
Дата 5.10.2004, 01:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 58
Всего: 112



Ну, Pakshin A. S., ну наворотил ! biggrin.gif
Зачем бедный Memo-то сюда прилепил ?
Что мешает делать сразу так:
ComboBox1.Items.Add(f.readString('Section', IntToStr(i), '');
то бишь везде вместо Memo1.Lines делать ComboBox1.Items
А AddItem будет так:
ComboBox1.Items.Delete(0);
ComboBox1.Items.Add(str);




--------------------
С уважением, г-н Посол.
PM   Вверх
andrey_post
Дата 5.10.2004, 07:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 109
Регистрация: 23.12.2003
Где: Екатеринбург

Репутация: нет
Всего: нет



Я тоже раньше делал все через Мемо и его скрывал.
но появлялись другие проблемы связанные с длинной строк, когда они переходили за предел Мемо и переносились в другие строки, плюс проблемы с кодировками и ключами конца файла и т.п....
Посол согласен с твоим экземляром!

Это сообщение отредактировал(а) andrey_post - 5.10.2004, 07:07
--------------------
И что бы там не происходило, не стоит воспринимать жизнь слишком всерьёз, всё равно нам из неё живыми не выбраться!!!
PM MAIL WWW ICQ   Вверх
Guest
Дата 5.10.2004, 08:10 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











А ИМХО лучше через TStrings

  Вверх
ForumRu
  Дата 5.10.2004, 08:20 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Через МЕМО не очень хорошо...
Кстати, ребята! Меня интересует запись, а чтение дело нехитрое...

qstn.gif
  Вверх
ForumRu
Дата 5.10.2004, 11:56 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











И еще один вопросик назрел: как НЕ отображать в КомбоБоксе пустые пункты, т.е не заполнять ими это компонент?
  Вверх
Pakshin A. S.
Дата 5.10.2004, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 5056
Регистрация: 16.2.2003

Репутация: 21
Всего: 61



Цитата(andrey_post @ 5.10.2004, 08:07)
но появлялись другие проблемы связанные с длинной строк, когда они переходили за предел Мемо и переносились в другие строки, плюс проблемы с кодировками и ключами конца файла и т.п....

Ставим полосы прокрутки горизонтальные и вертикальные...
Добавлено @ 17:01
Цитата(ForumRu @ 5.10.2004, 09:20)
Меня интересует запись

Как прочли, так и записываем... sad.gif Что именно?
Добавлено @ 17:05
Цитата(p0s0l @ 5.10.2004, 02:01)
А AddItem будет так:
ComboBox1.Items.Delete(0);
ComboBox1.Items.Add(str);

Нее, здесь надо как с массивом
Код

for i:=ComboBox1.Items.Count-1 downto 1 do
ComboBox1.Items[i]:=ComboBox1.Items[i-1];
CombBox1.Items[0]:=str;

Добавлено @ 17:07
Код
procedure TForm1.Load(filename:string);
var
f:TIniFiles;
i:integer;
begin
f:=TiniFile.Create(filename);
ComboBox1.Items.Clear;
for i:=1 to f.readinteger('Section', 'Count', 1) do
ComboBox1.Items.Add(f.readString('Section', IntToStr(i), '');
f.free;
end;

procedure TForm1.AddItem(str:string);
var
i:integer;
begin
for i:=ComboBox1.Items.Count-1 downto 1 do
ComboBox1.Items[i]:=ComboBox1.Items[i-1];
ComboBox1.Items[0]:=str;
end;

procedure TForm1.Save(filename:string);
var
i:integer;
begin
f:=TiniFile.Create(fileName);
for i:=0 to ComboBox1.Items.Count-1 do
f.WriteString('Section', IntToStr(i+1), ComboBox1.Items[i]);
f.WriteInteger('Section', 'Count', ComboBox1.Items.Count);
f.Free;
end;


Это сообщение отредактировал(а) Pakshin A. S. - 5.10.2004, 17:10
PM   Вверх
Pakshin A. S.
Дата 5.10.2004, 17:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 5056
Регистрация: 16.2.2003

Репутация: 21
Всего: 61



Кстати обходимся без изменения структуры файла:
Код

procedure TForm1.Load(filename:string);
var
f:TIniFiles;
i:integer;
begin
f:=TiniFile.Create(filename);
ComboBox1.Items.Clear;
i:=1;
while f.ValueExists('Section', IntToStr(i)) do
begin
ComboBox1.Items.Add(f.readString('Section', IntToStr(i), '');
inc(i);
end;
f.free;
end;

procedure TForm1.Save(filename:string);
var
i:integer;
begin
f:=TiniFile.Create(fileName);
for i:=0 to ComboBox1.Items.Count-1 do
f.WriteString('Section', IntToStr(i+1), ComboBox1.Items[i]);
f.Free;
end;

Добавлено @ 17:20
Цитата(ForumRu @ 5.10.2004, 12:56)
как НЕ отображать в КомбоБоксе пустые пункты, т.е не заполнять ими это компонент?

В этом духе?
Код


var DefL:integer;

procedure TForm1.Load(filename:string);
var
f:TIniFiles;
i:integer;
begin
f:=TiniFile.Create(filename);
ComboBox1.Items.Clear;
i:=1;
while f.ValueExists('Section', IntToStr(i)) do
begin
if f.readString('Section', IntToStr(i), '') <> ''
then
ComboBox1.Items.Add(f.readString('Section', IntToStr(i), ''));
inc(i);
end;
DefL:=i-1;
f.free;
end;


procedure TForm1.AddItem(str:string);
var
i:integer;
begin
if ComboBox1.Items.Count <> DefL
then
 ComboBox1.Items.Add('');
for i:=ComboBox1.Items.Count-1 downto 1 do
ComboBox1.Items[i]:=ComboBox1.Items[i-1];
ComboBox1.Items[0]:=str;
end;

{Остальное без изменений}



Это сообщение отредактировал(а) Pakshin A. S. - 5.10.2004, 17:28
PM   Вверх
p0s0l
Дата 5.10.2004, 21:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 58
Всего: 112



Цитата(Pakshin @ 5.10.2004, 17:00)
Нее, здесь надо как с массивом

Почему ? Обоснуй...
Если надо с другой стороны вставлять, то делаем так:
Код
 ComboBox1.Items.Delete(ComboBox1.Items.Count-1);
 ComboBox1.Items.Insert(0, str);




--------------------
С уважением, г-н Посол.
PM   Вверх
Pakshin A. S.
Дата 5.10.2004, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 5056
Регистрация: 16.2.2003

Репутация: 21
Всего: 61



О! А я и не подумал, что так можно... smile.gif
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.5387 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.