PDA

Показать полную графическую версию : [решено] сохранение значений ComboBox


camope3
11-09-2011, 22:15
Ситуация состоит в следующем:
Есть ComboBox1 с внесенными данными в Items. Корректировка данных для пользователя запрещена.
Пользователь открыл программу выбрал нужный вариант из ComboBox1 например из Strings[3] ... закрыл программу.

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

ferget
11-09-2011, 23:30
сохранить значение в ini файл при выходе

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

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

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

Любезный
12-09-2011, 22:52
Блин... Фигня ведь. ItemIndex - это число, номер текущего пункта. А текст пункта - это Items [ItemIndex] или (только для чтения) ComboBox.Text.

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

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

я решил, присвоив в инспеторе обьектов нужный ItemIndex который отображается при загрузке.

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

camope3
12-09-2011, 23:41
Любезный Спасибо! проблему решил сохранением в *.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
function TForm1.Ininame: string;
begin
result := ExtractFilePath(Application.ExeName)+'path.ini';
end;

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

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

Это сохранение пунктов в файл. Но эта команда не сохраняет информацию о том, какой пункт является текущим - это и нужно топикстартеру.

camope3
15-09-2011, 22:45
Всем спасибо за участие в помощи.




© OSzone.net 2001-2012