![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
ini-файлы
_Polymorphic_ © (2003-07-30 10:11:00)Доброго времени суток!
Маааленький вопросик по PIniFile. Пытаюсь сохранять положение окна и восстанавливать его :
//...загрузка формы...
inifile:=ExtractFilePath(ParamStr(0))+'ac.ini';
ini:=OpenIniFile(inifile);
ini.Mode:=ifmRead;
ini.Section:='MainWin';
ini.ValueInteger('XPos',form.Left);
ini.ValueInteger('YPos',form.Top);
ini.ValueInteger('col0',grid.ColWidths[0]);
ini.ValueInteger('col1',grid.ColWidths[1]);
ini.ValueInteger('col2',grid.ColWidths[2]);
ini.ValueInteger('col3',grid.ColWidths[3]);
ini.Free;
//...закрытие формы:
ini:=OpenIniFile(inifile);
ini.Mode:=ifmWrite;
ini.Section:='MainWin';
ini.ValueInteger('XPos',form.Left);
ini.ValueInteger('YPos',form.Top);
ini.ValueInteger('col0',grdAutostart.ColWidths[0]);
ini.ValueInteger('col1',grdAutostart.ColWidths[1]);
ini.ValueInteger('col2',grdAutostart.ColWidths[2]);
ini.ValueInteger('col3',grdAutostart.ColWidths[3]);
ini.Free;
...и все бы было хорошо, если бы читался ini-файл при загрузке!
Он создан, запись в него идет без проблем, а чтение - ни в какую! Приглючило мне попробовать читать просто в переменную. При дебаге выяснил, что переменная просто не меняет значение!
Что делать? F1? SOS?
Sagrer (2003-10-20 01:12:00) [1]Ну я Free уже потом поставил, думал поможет. Без него тоже самое. В общем пробовал ставить FREE чтоб всегда при выходе из проги был и вообще без него - все одинакого происходит.
хм... наверное проще будет сделать самопальный класс для работы с инями :)
Vladimir Kladov (2003-10-19 21:59:00) [2]Free надо делать аккуратно для ini-файла, чтобы вовремя доходило при следующем запуске.
Sagrer (2003-10-19 17:39:00) [3]У меня еще проблема с *.ini-ями - вот такой код :
//Открыть TRTEdit.ini с настройками.
If FileExists(ProgaPath+'TRTEdit.ini') = false then begin
//Нету такого файла. Создать его!
SettingsIni := OpenIniFile(ProgaPath+'TRTEdit.ini');
SettingsIni.Mode := ifmWrite;
SettingsIni.Section := 'Settings';
DefalDir := ProgaPath;
SettingsIni.ValueString('DefalDir',DefalDir);
SettingsIni.ValueString('ver',ver);
SettingsIni.Mode := ifmRead;
end
else begin
SettingsIni := OpenIniFile(ProgaPath+'TRTEdit.ini');
SettingsIni.Section := 'Settings';
SettingsIni.Mode := ifmRead;
GNPResult := SettingsIni.ValueString('ver','');
If GNPResult <> ver then begin
MsgOK('Непонятная версия ini-файла в папке программы.'+#13+'Удалите TRTEdit.ini из папки с программой и запустите программу снова.');
SettingsIni.Free;
Halt;
end;
После последнего end есть еще код, но оно уже неважно... В общем, тут прога проверяет ver в инишнике, и если оно не совпадает с константой ver в проге, то выдает MsgOK, а потом делает Halt. Проблема в том, что прога "отстает". Например у проги const ver = '1.0'; В инишнике тоже ver=1.0 . Все идет как надо - прога не заходит в ветку с MsgOK и идет дальше. Но если я меняю блокнотом в инишнике на ver=1.1 (сейвю ессно до запуска проги), то в первый раз прога никак не реагирует (смотрел вотчем, GNPResult := SettingsIni.ValueString('ver',''); - тут GNPResult всеравно равен '1.0', хотя в инишнике уже 1.1), а если ее запустить во второй раз, то тогда уже срабатывает (вылетает мессага и прога хальтится). Если в инишнике поменять на ver=1.0 и запустить прогу, то она всеравно выведет мессагу и захалтится, а срабатывает как надо только в следующий раз.
Sagrer (2003-10-14 21:12:00) [4]нда... сорри :(
SPeller (2003-10-13 06:11:00) [5]Банальная невнимательность:
if ...
SettingsIni := OpenIniFile(ProgaPath+' TrText.ini');
else
SettingsIni := OpenIniFile(ProgaPath+' settings.ini');
Sagrer (2003-10-12 17:26:00) [6]Сорри, может я чего не понял, но у меня функции вроде VlueInteger или ValueString не работают (на чтение) вообще никак. Тоесть Result-у ихнему присваивается то, что было передано по Value...
Тоесть вот мой код (при запуске проги срабатывает)
//Открыть TrText.ini с настройками.
If FileExists(ProgaPath+'TrText.ini') = false then begin
//Нету такого файла. Создать его!
SettingsIni := OpenIniFile(ProgaPath+'TrText.ini');
SettingsIni.Mode := ifmWrite;
SettingsIni.Section := 'Settings';
DefalDir := ProgaPath;
SettingsIni.ValueString('DefalDir',DefalDir);
SettingsIni.Mode := ifmRead;
end
else begin
//Просто получить нужные значения...
SettingsIni := OpenIniFile(ProgaPath+'settings.ini');
SettingsIni.Section := 'Settings';
SettingsIni.Mode := ifmRead;
DefalDir := SettingsIni.ValueString('DefalDir',DefalDir);
MsgOK(DefalDir); //Для теста...
end;
В общем, MsgOK не выводит вообще мессагу - DefalDir пустая остается (тоесть DefalDir = '')
У меня скачаны KolLessons, и я там видел вот это:
/////////////////////////////////////////////////////////////////////
Procedure ClickOnList2( Dummy : Pointer; Sender : PControl );
var
s:string;
i:integer;
begin
s:= List2.Items[List2.CurIndex];
i:= IndexOfChar(s,'=');
edName.Text := Copy(s,0,i-1);
edDan.Text := CopyEnd(s,i+1);
end;
/////////////////////////////////////////////////////////////////////
Procedure ClickOnList1( Dummy : Pointer; Sender : PControl );
var
j:integer;
begin
edName.Clear ;
edDan.Clear ;
j:=List1.CurIndex;
// заносим в List2 данные, которые находятся в j-ой секции
strList.Clear ;
List2.Clear ;
ini.Section := List1.Items[j];
ini.SectionData(strList);
for i:=0 to strList.Count-1 do
List2.Items[i]:=strList.Items[i];
end;
/////////////////////////////////////////////////////////////////////
Но юзать так постояно в проге слишком длинно - значит надо делать для этого себе класс или хотяб функцию... мне то нетрудно, только зачем изобретать велосипед, если ValueString и т.п. уже есть?
Gandalf (2003-08-04 14:00:00) [7]http://kol.mastak.ru/lessons%209.htm
BorisMor (2003-07-31 07:03:00) [8]Это что там не работает ?
И почему с пути сбила ?
_Polymorphic_ (2003-07-30 17:23:00) [9]Просто сбила меня с пути истинного статья про работу с ini-файлом, а пример к ней разбирать не стал. Вот и заблудился :)
Кладов (2003-07-30 17:03:00) [10]И вообще, работу с ini-файлом можно в одном месте и описать, и не дублировать:
Form.Left := Ini.ValueInteger( 'Left', Form.Left );
Polymorphic (2003-07-30 14:02:00) [11]Спасибо! Ни за что бы не догадался сам!
SPeller (2003-07-30 13:40:00) [12]ini.ValueInteger('YPos',form.Top);
При загрузке синтаксис другой:
Form.Top := ini.ValueInteger( 'YPos', 0 );
Удачи. :-)
Polymorphic (2003-07-30 13:21:00) [13]Эти функции разве с ини-файлами работают? Мне очень нужны ИНИ!
BorisMor (2003-07-30 13:18:00) [14]В KOLUtils ( http://kol.mastak.ru/files/lib/KolUtils.zip) посмотри
uSavePosWindows
uLoadPosWindows
dataMaster (2003-07-30 10:17:00) [15]У меня есть простенький компонент для работы с ИНИ-файлами. Напиши мне - вышлю