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

Вниз

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 вся ветка

Текущий архив: 2004.05.02;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.05 c
6-1073638803
snake1977
2004-01-09 12:00
2004.05.02
синхронизация времени


7-1078639207
MAVr
2004-03-07 09:00
2004.05.02
*.mht формат???


11-1066640661
ASilver
2003-10-20 13:04
2004.05.02
TCPServer.SendStream()


3-1081239691
V-A-V
2004-04-06 12:21
2004.05.02
Удаления пароля из БД MsAccess


9-1069480497
Агент Смит [8]
2003-11-22 08:54
2004.05.02
Текстура из нескольких бмп. OpenGL