Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
3-1080811304
TL
2004-04-01 13:21
2004.05.02
Restore базы


1-1082035779
Garmahis
2004-04-15 17:29
2004.05.02
Цвет панели.


1-1081758981
Dima S
2004-04-12 12:36
2004.05.02
StringGrid


8-1071478333
alexeyII
2003-12-15 11:52
2004.05.02
Как можно вывести на принтер TIF-файл?


14-1081160711
Thor
2004-04-05 14:25
2004.05.02
малыш и Буш :)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский