Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.04.2010, 13:38   #1
мимо
Пользователь
 
Регистрация: 13.06.2009
Сообщений: 61
По умолчанию TComboBox и ini

Здравствуйте.
Подскажите как считать данные в TComboBox из ini, чтобы запись в TComboBox появилась уже в ниспадающем меню. Т.е. активная строка в TComboBox была пустая, а запись из ini была следующей.
Сейчас я делаю так
Код:
IniFile:=TIniFile.Create(ExtractFileDir(Application.ExeName)+ '\' + 'my.ini' );
cbb1.text:=IniFile.ReadString('1','0', '');
for i := 1 to cbb1.Items.Count-1 do cbb1.Items.Add(IniFile.ReadString('1',inttostr(i),''));
мимо вне форума Ответить с цитированием
Старый 21.04.2010, 15:30   #2
nXs
Форумчанин
 
Регистрация: 26.02.2010
Сообщений: 126
По умолчанию

Возможно так, не самый оптимальный, но рабочий:
Код:
var
i:TIniFile;
n:integer;
Str:TStringList;
begin
i:=TIniFile.Create(extractFileDir(paramstr(0))+'\1.ini');
Str:=TStringList.Create;
ComboBox1.Clear;
i.ReadSectionValues('1', Str);
for n:=0 to str.Count-1 do
Combobox1.Items.Add(i.ReadString('1', inttostr(n),  ''));
i.Free;
str.Free;
end;

Последний раз редактировалось nXs; 21.04.2010 в 16:05.
nXs вне форума Ответить с цитированием
Старый 21.04.2010, 15:37   #3
Sanprof
Форумчанин
 
Аватар для Sanprof
 
Регистрация: 28.01.2008
Сообщений: 267
По умолчанию

Код:
......

var
  Form1: TForm1;
  i : integer = 1;

implementation

...

var
  ini : Tinifile;
  f : string;
begin
  ini := Tinifile.Create(ExtractFileDir(Application.ExeName)+ '\' + 'my.ini');
  f := ini.ReadString('1',inttostr(i),'');
  inc(i);
  while (f <> '') do
    begin
      f := ini.ReadString('1',inttostr(i),'');
      combobox1.Items.Add(f);
      inc(i);
    end;
ini.free;
при условии, что в вашем ини файле возле каждого индекса точно есть строка, а не пустое место.
Не забываем говорить спасибо за помощь - это ведь так приятно
Sanprof вне форума Ответить с цитированием
Старый 21.04.2010, 16:26   #4
мимо
Пользователь
 
Регистрация: 13.06.2009
Сообщений: 61
По умолчанию

Цитата:
nXs
Спасибо. Ваш код работает.
Цитата:
Sanprof
Ваш код еще проверю.
А теперь возникла проблема с записью данных из TComboBox в ini при закрытии программы, если в TComboBox уже есть несколько строк.
Не могли помочь?
мимо вне форума Ответить с цитированием
Старый 21.04.2010, 16:38   #5
nXs
Форумчанин
 
Регистрация: 26.02.2010
Сообщений: 126
По умолчанию

Можно например так:
Код:
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
i:TINIFile;
begin
i:=TIniFile.Create(extractFileDir(paramstr(0))+'\1.ini');
for n:=0 to ComboBox1.Count-1 do
begin
ComBobox1.ItemIndex:=n;
i.WriteString('1', itnttostr(n), ComboBox.Text);
end;
i.Free;
end;

Последний раз редактировалось nXs; 21.04.2010 в 16:44.
nXs вне форума Ответить с цитированием
Старый 22.04.2010, 08:51   #6
мимо
Пользователь
 
Регистрация: 13.06.2009
Сообщений: 61
По умолчанию

спасибо. но у меня ваш код не сработал. Если уже есть ini файл и там есть запись - при загрузки программы она загружается в combobox. Затем добавляем еще одну запись, закрываем программу и в ini ничего не записывается. Там остается та же изначальная запись.
Также не записывается в ini, если его нет и он создается, т.е. он даже не создается (

Последний раз редактировалось мимо; 22.04.2010 в 08:56.
мимо вне форума Ответить с цитированием
Старый 22.04.2010, 11:04   #7
nXs
Форумчанин
 
Регистрация: 26.02.2010
Сообщений: 126
По умолчанию

Извините, нашел несколько ошибок. Вот рабочий код:
Код:
var
i:TIniFile;
n:integer;
begin
i:=TIniFile.Create(extractFileDir(paramstr(0))+'\1.ini');
for n:=0 to ComboBox1.Items.Count-1 do
begin
ComBobox1.ItemIndex:=n;
i.WriteString('1', inttostr(n), ComboBox1.Text);
end;
i.Free;
end;
nXs вне форума Ответить с цитированием
Старый 22.04.2010, 14:07   #8
мимо
Пользователь
 
Регистрация: 13.06.2009
Сообщений: 61
По умолчанию

не. изначальный ваш код я исправил, просто он у меня не работает. не сохраняет данный из ComboBox1. Вот он
Код:
  IniFile:=TIniFile.Create(ExtractFileDir(Application.ExeName)+ '\' + 'my.ini' );
for n:=0 to Form1.cbb1.Items.Count-1 do
begin
Form1.cbb1.ItemIndex:=n;
IniFile.WriteString('1', inttostr(n), Form1.cbb1.Text);
end;
IniFile.Free;
end;
вот. пример, в котором это можно заметить. в ComboBox1 пишется любые данные и при закрытии должно сохранятся в ini.
Вложения
Тип файла: rar 12.rar (3.5 Кб, 8 просмотров)
мимо вне форума Ответить с цитированием
Старый 22.04.2010, 15:25   #9
nXs
Форумчанин
 
Регистрация: 26.02.2010
Сообщений: 126
По умолчанию

Это потому, что когда вы вводите в combobox текст, не создается новый item. Сделайте подтверждение ввода например по нажатию клавиши enter:
Код:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if key=13 then cbb1.Items.Add(cbb1.Text);
end;
Свойство keypreview формы должно бить true.
nXs вне форума Ответить с цитированием
Старый 22.04.2010, 15:56   #10
мимо
Пользователь
 
Регистрация: 13.06.2009
Сообщений: 61
По умолчанию

ага. Значит я могу и строку
Код:
Form1.cbb1.Items.Add(Form1.cbb1.Text);
вставить в FormDestroy после создания ini. и все будет работать.
спасибо.
и еще вопросик - возможно ли сделать проверку, что уже вводили такие данные, то их не записывать в ini?
мимо вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как пересмотреть все секции в INI.ini ? iskurt Помощь студентам 1 31.01.2010 07:48
Шрифты в TCombobox Claster Помощь студентам 9 20.10.2008 13:45
TComboBox! samlay Общие вопросы Delphi 8 03.07.2008 22:11
TCombobox kalyan_ne_@ Компоненты Delphi 10 13.05.2008 09:44
..TComboBox.. Ensoph Компоненты Delphi 5 29.06.2007 16:36