Форум: "Основная";
Текущий архив: 2002.05.27;
Скачать: [xml.tar.bz2];
ВнизСнова INI... Найти похожие ветки
← →
Riko (2002-05-15 16:52) [0]Не могу прочитать без ошибки запись в INI файле. Данный код находиться на форме Form1, а Edit1 на форме Extract. И еще - после того как я закрываю форму, когда она развернута на весь экран, а потом снова открываю, и пытаюсь восстановить ничего не происходит - средняя кнопка Развернуть/Восстановить не работает.
//чтение данных из .INI файла
procedure TForm1.ReadIni;
Var
IniFile:TIniFile;
begin
IniFile := TIniFile.Create(ChangeFileExt(ParamStr(0),".INI"));
Form1.Top:=IniFile.ReadInteger("Main Window","Top",Form1.Top);
Form1.Left:=IniFile.ReadInteger("Main Window","Left",Form1.Left);
Form1.Height:=IniFile.ReadInteger("Main Window","Height",Form1.Height);
Form1.Width:=IniFile.ReadInteger("Main Window","Width",Form1.Width);
//Edit1 находится на форме Extract
//не хочет читать, выдает ошибку типа "Access....." перед запуском проги
Extract.Edit1.Text:=IniFile.ReadString("Extract","Path",Extract.Edit1.Text);
IniFile.Free;
end;
//запись данных в .INI файл
procedure TForm1.WriteIni;
Var
IniFile:TIniFile;
begin
IniFile := TIniFile.Create(ChangeFileExt(ParamStr(0),".INI"));
IniFile.WriteInteger("Main Window","Top",Form1.Top);
IniFile.WriteInteger("Main Window","Left",Form1.Left);
IniFile.WriteInteger("Main Window","Height",Form1.Height);
IniFile.WriteInteger("Main Window","Width",Form1.Width);
//пишиться, вроде, без проблем
IniFile.WriteString("Extract","Path",Extract.Edit1.Text);
IniFile.Free;
end;
← →
VID (2002-05-15 17:26) [1]
> //Edit1 находится на форме Extract
> //не хочет читать, выдает ошибку типа "Access....." перед
> запуском проги
> Extract.Edit1.Text:=IniFile.ReadString("Extract","Path",Extract.Edit1.Text);
Здесь дело в том, что ты скорее всего процедуру READINI вызываешь на событии Create объекта FORM1. А я уверен что form1 у тебя создаётся первой и является главной. А теперь внимание: В процессе создания главной формы, ещё не существуют другие формы. В данном случае - форма Extract. Формы создаются по-очереди. Сначала главная (form1), затем та, которая находится в списке автоматически создаваемых форм. И на этапе создания формы X форма X+1 ещё не существует ! Потому и ошибка. Метод решения:
Определи вызов процедуры ReadIni на событии onShow объекта Form1. Если тебе нужно что бы ReadIni вызывалась только один раз, а не всякий раз когда происходит Form1.Show, то можно сделать так:
procedure tform1.form1show(sender:tobject);
begin
if form1.tag = 0 then
begin
ReadIni;
Form1.Tag := 1;
end;
Далее:
> И еще - после того как я закрываю форму, когда она развернута
> на весь экран, а потом снова открываю, и пытаюсь восстановить
> ничего не происходит - средняя кнопка Развернуть/Восстановить
> не работает.
Здесь дело в том, что ты закрыв форму сохраняешь её left, top, width и height. Но не сохраняешь form1.WindowState. Т.е. при следующем открытии формы, восстанавливаются её left, top, width и height, но ничего не говориться о состоянии WindowSate, которое ты так и не сохранил в IniFile перед закрытием формы. Поэтому windowstate формы, по-умолчанию принимает значение wsNormal, т.е. немаксимизированное окно. А кнопка Развернуть/Восстановить работает... просто ты не замечаешь её работы, т.к. в данном случае получается что MAXIMIZED-состояние формы = NORMAL-состоянию.
Одним словом... использовал бы ты лучше для этого компонент FormStorage из пакета RxLib.
← →
Riko (2002-05-15 17:59) [2]Спасибо!
Я все понял.
Где можно грузонуть RxLib и подойдет ли она к D3?
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.05.27;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.005 c