Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.05.27;
Скачать: CL | DM;

Вниз

Снова 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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.014 c
1-88555
Mihan
2002-05-15 13:04
2002.05.27
Как сделать консоль ??


3-88359
Wildhoney
2002-05-01 04:08
2002.05.27
вопрос


3-88380
fliz
2002-04-29 11:21
2002.05.27
ADO + DBGrid. Добавление-отмена д-я записи приводит к сообщению


3-88383
Vicheslav
2002-05-03 09:54
2002.05.27
Ув. помогите определиться IB6 или SQL2K


1-88408
Stexen
2002-05-16 23:45
2002.05.27
ZLIB ZLIB ZLIB ZLIB