Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   [решено] сохранение значений ComboBox (http://forum.oszone.net/showthread.php?t=215398)

camope3 11-09-2011 22:15 1751062

сохранение значений ComboBox
 
Ситуация состоит в следующем:
Есть ComboBox1 с внесенными данными в Items. Корректировка данных для пользователя запрещена.
Пользователь открыл программу выбрал нужный вариант из ComboBox1 например из Strings[3] ... закрыл программу.

Можно ли что бы при следующем открытии программы в ComboBox1 открывалась Strings[3] ? Проще говоря, открывались те варианты, которые пользователь выбрал в прошлый раз при работе с программой.
Нашел решение этой задачи на FoxPro но мне нужно на Delphi :(
Заранее благодарен.

ferget 11-09-2011 23:30 1751102

сохранить значение в ini файл при выходе

Любезный 12-09-2011 17:42 1751551

Текущее значение комбобокса хранится в свойстве ItemIndex, которое можно как считывать, так и записывать. А куда записывать - решай сам: можно в реестр, можно во временный файл, а можно и в память пользователя :)

А считывать нужно перед показом формы, т.е. в обработчике события OnShow.

camope3 12-09-2011 21:57 1751723

Любезный ты навел меня на мысль :) то что мне хотелось я решил, присвоив в инспеторе обьектов нужный ItemIndex который отображается при загрузке.
Но все же, для общего развития не могу вкурить как именно сохранить(загрузить) текущий индекс. Как записать(считать) весь итем - понятно, а вот текущий индекс не пойму. Как запомнить а потом загрузить то, что было выбрано пользоватилем хоть убей :( Если не лень кинь кодом с записью в реестр или временный файл. Ну нет же такого понятия Current Index :)

Любезный 12-09-2011 22:52 1751754

Блин... Фигня ведь. ItemIndex - это число, номер текущего пункта. А текст пункта - это Items [ItemIndex] или (только для чтения) ComboBox.Text.

Код писать не буду, но на мысль наведу. Создай TStringList, присвой свойству Text этого стринглиста значение ItemIndex, преобразованное в строку, а затем методом SaveToFile сохрани его во временный файл. Ну и соответственно не забудь уничтожить этот стринглист.

Насчёт реестра - поищи в сети работу с классом TRegistry. Ну и также инфу, в каких разделах нужно создавать ключи.

Цитата:

я решил, присвоив в инспеторе обьектов нужный ItemIndex который отображается при загрузке.
Кстати, если у тебя при запуске программы комбобокс будет пустым (т.е. не заполненным в процессе создания программы), а ItemIndex будет больше -1, у тебя программа может вываливаться с ошибкой. Так что присваивать это свойство нужно только на заполненном комбобоксе (неважно, в DesignTime или в RunTime).

camope3 12-09-2011 23:41 1751785

Любезный Спасибо! проблему решил сохранением в *.ini файл весь код писать не буду напишу кусок для записи
...
Код:

procedure TForm1.ReadParams;
Var IniFile:TIniFile;
begin
IniFile:=TIniFile.Create('path.ini'); {создаем переменную}
ComboBox1.ItemIndex:=IniFile.ReadInteger('FORM1','ComboBox1ItemIndex',ComboBox1.ItemIndex); {сохраняем выбранный пункт, то над чем я ломал голову}
IniFile.Free; {убиваем переменную}
end;
...

и кусок для чтения
Код:

...
procedure TForm1.WriteParams;
Var IniFile:TIniFile;
begin
IniFile:=TIniFile.Create('path.ini');
IniFile.WriteInteger('FORM1','ComboBox1ItemIndex',ComboBox1.ItemIndex);
IniFile.Free;
end;
...

но при таком варианте path.ini сохраняется в папке Windows но это уже пол беды.

ferget 12-09-2011 23:50 1751793

Код:

function TForm1.Ininame: string;
begin
  result := ExtractFilePath(Application.ExeName)+'path.ini';
end;


hb860 14-09-2011 14:11 1752787

Я на делфи лет эдак 10 не писал уже, но я помню, там есть что-то вроде
ComboBox1.Items.SaveToFile('Имя_Файла')

Любезный 14-09-2011 19:19 1753032

Цитата:

Я на делфи лет эдак 10 не писал уже, но я помню, там есть что-то вроде
ComboBox1.Items.SaveToFile('Имя_Файла')
Это сохранение пунктов в файл. Но эта команда не сохраняет информацию о том, какой пункт является текущим - это и нужно топикстартеру.

camope3 15-09-2011 22:45 1753877

Всем спасибо за участие в помощи.


Время: 20:56.

Время: 20:56.
© OSzone.net 2001-