Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как обновить данные в программе? [D3, Win95/98]


Riko ©   (2002-05-03 15:14:00) 

В своей программе я использую чтение данных из INI файла. При создании нового INI файла я не могу обновить данные (состояние Чекбоксов, Эдитов и т.д.) в программе, только повторное создание файла обновляет данные. Но файл с новыми данными успешно создаеться с первой попытки. На всякий случай привожу фрагменты кода:

procedure TForm1.Button3Click(Sender: TObject);
begin
if Application.MessageBox("Создать новый ?", "Заголовок",
MB_ICONQUESTION or MB_YESNO or MB_DEFBUTTON2 or MB_TASKMODAL) = ID_YES then
begin
//Очистка областей и прочее
Edit2.Text := "";
SpinEdit2.Text := "";
CheckBox2.Checked := False;
ComboBox2.Items.Clear;
ComboBox2.Items.Add("1");
ComboBox2.Items.Add("2");
ComboBox2.Items.Add("3");
Edit6.Text := "";
//Вызываю функцию записи INI файла, пишиться все отлично
WriteINI;
//Вызываю функцию чтения INI файла
ReadINI;
end;
end;


//Функция чтения INI файла
procedure TForm1.ReadINI;
Var
IniFile:TIniFile;
begin
IniFile:=TIniFile.Create("ИмяФайла.ini");
Edit2.Text:=IniFile.ReadString("Status","Name",Edit2.Text);
SpinEdit1.Text:=IniFile.ReadString("Status","Number",SpinEdit1.Text);
CheckBox2.Checked:=IniFile.ReadBool("Status","Scan",CheckBox2.Checked);
ComboBox2.ItemIndex:=IniFile.ReadInteger("Status","Index",ComboBox2.ItemIndex);
Edit6.Text:=IniFile.ReadString("Status","Color",Edit6.Text);
IniFile.Free;
end;


Помогите разобраться.


Nikolay M.   (2002-05-06 14:47:00) [1]

А зачем вообще изобретать велосипед? Уже давно существует библиотека RX, в которой есть FormStorage - прекрасно запоминает значения свойств нужных контролов.

ПЫС
...а если с инишками еще и через Readln/Writeln работать, то...


KilkennyCat   (2002-05-05 03:33:00) [2]

А зачем вообще создавать новый файл? разве нельзя проверить, есть ли он уже, и если есть, просто вписывать новые значения? По крайней мере, я так и поступаю.


VID   (2002-05-05 00:12:00) [3]

vid=mister m.


Mister M.   (2002-05-04 12:16:00) [4]

I"AM VID.

А нахрена ты AssignFile и прочее используешь ?
К тому же , ты в своей процедуре WriteIni не создал секцию Status.
Создание INI-файла можно осуществить с помощью объекта TINIFILE.
...
Var Ini:TIniFile;
Begin
Ini := TIniFile.Create ("имяфайла.ini");
Ini.WriteString ("Status", "Name", "Default Options");
//и так далее
Ini.Free;
end;


Riko   (2002-05-04 11:52:00) [5]

Вот кусок функции записи нового файла с настройками по умолчанию...
Может, что-то с перезаписью я накуралесил:

procedure WriteINI;
var
IniFile: TextFile;
begin
AssignFile(IniFile,"ИмяФайла.ini");
Rewrite(IniFile);
Writeln(IniFile, "Name=Default Options");
Writeln(IniFile, "Number=8");
Writeln(IniFile, "Scan=0");
Writeln(IniFile, "Index=2");
Writeln(IniFile, "Color=Black");
CloseFile(IniFile);
end;


//Функция чтения INI файла
procedure TForm1.ReadINI;
Var
IniFile:TIniFile;
begin
IniFile:=TIniFile.Create("ИмяФайла.ini");
Edit2.Text:=IniFile.ReadString("Status","Name",Edit2.Text);
SpinEdit1.Text:=IniFile.ReadString("Status","Number",SpinEdit1.Text);
CheckBox2.Checked:=IniFile.ReadBool("Status","Scan",CheckBox2.Checked);
ComboBox2.ItemIndex:=IniFile.ReadInteger("Status","Index",ComboBox2.ItemIndex);
Edit6.Text:=IniFile.ReadString("Status","Color",Edit6.Text);
IniFile.Free;
end;


VID   (2002-05-03 22:56:00) [6]

Ну давай код юнита... посмотрим :)


Riko   (2002-05-03 19:31:00) [7]

2VID © (03.05.02 18:58)

Данная задержачка
sleep(500);
не помогла.


VID   (2002-05-03 18:58:00) [8]

1. Никаких Exceptions, которые ты обработал Try .. except end, не возникало ?
2. ты пытаешься читать вновь созданный ini файл сразу как создаёшь его ? Если так, то интереса ради, поставь между строками WriteINI и ReadINI, функцию sleep(500); а вдруг поможет ? :)

Покажи реальный код функции WriteINI, а лучше всего юнита (если такое возможно по отношению к твоей ителектуальной собственности :) )


Riko   (2002-05-03 17:22:00) [9]

Мужики! Извините, что наглею.
Вы же должны знать, пожалуйста, помогите, что делаю неправильно?


Riko   (2002-05-03 16:18:00) [10]

2VID © (03.05.02 15:56)

1.Я сбрасываю все значения на форме проги.
2.WriteINI; - создаю новый файл, совершенно новый, он не четает данные формы, создаеться файл с настройками по умолчанию. Реальная функция записи данных в INI файл называется по-другому.
3.ReadINI; - считываю данные.

Само чтение не стабильное, читаеться только при повторном нажатии на кнопку, а то и при третьем.


VID   (2002-05-03 15:56:00) [11]

В данном случае всё происходит так, как должно происходить. Перед сохранением параметров в INI файл, ты зачем-то сбросил все сохраняемые значения, к "умалчиваемым":

//Очистка областей и прочее
Edit2.Text := "";
SpinEdit2.Text := "";
CheckBox2.Checked := False;
ComboBox2.Items.Clear;
ComboBox2.Items.Add("1");
ComboBox2.Items.Add("2");
ComboBox2.Items.Add("3");
Edit6.Text := "";

Затем сохраняешь параметры (WriteINI), а потом их читаешь (READINI). И получаешь ровно то, что сохранил! Что не так ???

может я чего не понял, ну так объясни поподробнее...


Наверх

Титульная страница Поиск, карта сайта Написать письмо