Форум: "KOL";
Текущий архив: 2004.05.02;
Скачать: [xml.tar.bz2];
Внизini-файлы Найти похожие ветки
← →
_Polymorphic_ (2003-07-30 10:11) [0]Доброго времени суток!
Маааленький вопросик по 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?
← →
dataMaster © (2003-07-30 10:17) [1]У меня есть простенький компонент для работы с ИНИ-файлами. Напиши мне - вышлю
← →
BorisMor © (2003-07-30 13:18) [2]В KOLUtils (http://kol.mastak.ru/files/lib/KolUtils.zip) посмотри
uSavePosWindows
uLoadPosWindows
← →
Polymorphic © (2003-07-30 13:21) [3]Эти функции разве с ини-файлами работают? Мне очень нужны ИНИ!
← →
SPeller © (2003-07-30 13:40) [4]ini.ValueInteger("YPos",form.Top);
При загрузке синтаксис другой:
Form.Top := ini.ValueInteger( "YPos", 0 );
Удачи. :-)
← →
Polymorphic © (2003-07-30 14:02) [5]Спасибо! Ни за что бы не догадался сам!
← →
Кладов (2003-07-30 17:03) [6]И вообще, работу с ini-файлом можно в одном месте и описать, и не дублировать:
Form.Left := Ini.ValueInteger( "Left", Form.Left );
← →
_Polymorphic_ (2003-07-30 17:23) [7]Просто сбила меня с пути истинного статья про работу с ini-файлом, а пример к ней разбирать не стал. Вот и заблудился :)
← →
BorisMor © (2003-07-31 07:03) [8]Это что там не работает ?
И почему с пути сбила ?
← →
Gandalf © (2003-08-04 14:00) [9]http://kol.mastak.ru/lessons%209.htm
← →
Sagrer (2003-10-12 17:26) [10]Сорри, может я чего не понял, но у меня функции вроде 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 и т.п. уже есть?
← →
SPeller © (2003-10-13 06:11) [11]Банальная невнимательность:
if ...
SettingsIni := OpenIniFile(ProgaPath+"TrText.ini");
else
SettingsIni := OpenIniFile(ProgaPath+"settings.ini");
← →
Sagrer (2003-10-14 21:12) [12]нда... сорри :(
← →
Sagrer (2003-10-19 17:39) [13]У меня еще проблема с *.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 и запустить прогу, то она всеравно выведет мессагу и захалтится, а срабатывает как надо только в следующий раз.
← →
Vladimir Kladov (2003-10-19 21:59) [14]Free надо делать аккуратно для ini-файла, чтобы вовремя доходило при следующем запуске.
← →
Sagrer (2003-10-20 01:12) [15]Ну я Free уже потом поставил, думал поможет. Без него тоже самое. В общем пробовал ставить FREE чтоб всегда при выходе из проги был и вообще без него - все одинакого происходит.
хм... наверное проще будет сделать самопальный класс для работы с инями :)
Страницы: 1 вся ветка
Форум: "KOL";
Текущий архив: 2004.05.02;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.029 c