Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с INI, Вопрос новичка 
:(
    Опции темы
KlanB
Дата 6.3.2005, 18:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 6.3.2005

Репутация: нет
Всего: нет



Даже делая по примеру не могу понять в чем загвоздка smile

Код
//Загрузка файла инициализации
function ReadIni(ASection, AString : String): String;
var
//sPath: string;
sIni: TIniFile;   <---- Ошибка тут

 begin
//    GetDir(0,sPath);
//    sIniFile := TIniFile.Create(sPath + '\LogAn.ini');
//  end;
end;


И выдает ошибку:
[Error] Parser.pas(68): Undeclared identifier: 'TIniFile'
PM MAIL   Вверх
SPrograMMer
Дата 6.3.2005, 19:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Спамер :)
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 5.11.2004
Где: Краснодар

Репутация: 2
Всего: 6



Подключи модуль INIFiles в секции Uses.

Это сообщение отредактировал(а) SPrograMMer - 6.3.2005, 19:20


--------------------
животное = зверь
законченный гентушник
PM MAIL ICQ Jabber   Вверх
KlanB
Дата 6.3.2005, 20:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 6.3.2005

Репутация: нет
Всего: нет



Спасибо! smile
Все пошло
Но на счет модулей нигде не нашел инфу: как с ними работать, как определять, что к чему относитья... вобщем пишу, а что непонямаю smile
PM MAIL   Вверх
Dr.No_xXx
Дата 6.3.2005, 20:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 215
Регистрация: 24.2.2005

Репутация: нет
Всего: нет



1)
Код

.....
public
Ini:TIniFiles;
...... //процедура(oncreate или какая тебе там нужна)
Ini:=Tinifile.create(название);

2)не забудь описать в uses
3)вводятся данные так:
Код

Ini.writeinteger('раздел в ини файле(то что в квадратных скобках)','параметр(не ставь знак =)',значение)
ini.writestring('раздел в ини файле(то что в квадратных скобках)','параметр(не ставь знак =)',текст)
ini.writebool('раздел в ини файле(то что в квадратных скобках)','параметр(не ставь знак =)',True или false)

выводится так:
Код

ini.readinteger('название раздела','параметр',значение по умолчанию(то есть если оно не указано в ини файле то берется это значение));
ini.readstring('название раздела','параметр',значение по умолчанию(то есть если оно не указано в ини файле то берется это значение));
ini.readbool('название раздела','параметр',значение по умолчанию(то есть если оно не указано в ини файле то берется это значение));

вроде все smile

Это сообщение отредактировал(а) Dr.No_xXx - 6.3.2005, 20:51
PM MAIL   Вверх
Pakshin A. S.
Дата 6.3.2005, 21:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 5056
Регистрация: 16.2.2003

Репутация: 21
Всего: 61



Если компилятор говорит, что неизвестный идентификатор находится в коде программы, то
1) Проверь правильность написания, если все правильно переходи ко второму пунтку, иначе исправь ошибку и еще раз компилируй.
2) Зайди в Help и посмотри тип переменной (если ошибка именно в нем)... обычно в справке написано то, к какому модулю относится данный тип (класс)... иначе переходим к третьему пунтку
3) зайди на форум и спроси
PM   Вверх
Sentynel
Дата 6.3.2005, 23:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 20.12.2004
Где: Deutschland, Cell e

Репутация: нет
Всего: нет



Сверху окна имеется ссылка на:
DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
скачай и найди внём пункт "Работа с INI файлами". И все проблемы по INI файлам отпадут. smile
PM MAIL ICQ   Вверх
Pakshin A. S.
Дата 6.3.2005, 23:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 5056
Регистрация: 16.2.2003

Репутация: 21
Всего: 61



Ну, может и не все... smile Может иногда и придется немного подумать... smile smile smile и обратиться на форум за помощью в реализации... smile
PM   Вверх
KlanB
Дата 7.3.2005, 01:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 6.3.2005

Репутация: нет
Всего: нет



Это точно smile
Пока перелопатишь хелпы и доки, найдешь там все, что нужно... а все равно что-то не получается smile (было 3 примера реализации чтения/записи INI)

Вот кстати, не слишком ли накладно каждый раз работать через

Код

Ini.writeinteger('раздел в ини файле(то что в квадратных скобках)','параметр(не ставь знак =)',значение)
ini.writestring('раздел в ини файле(то что в квадратных скобках)','параметр(не ставь знак =)',текст)
ini.writebool('раздел в ини файле(то что в квадратных скобках)','параметр(не ставь знак =)',True или false)

Или я недопонял smile

Попробовал вот так:
Код

//Функция загрузки настроек (INTEGER)
function ReadIniI(ASector, AIdent : String): integer;
{Функция чтения INI ([Сектор, Параметр]}

const
ADef = 200; //Значение, которое будет стоять по умолчанию
var
sIni: TIniFile;
begin
 sIni := TIniFile.Create(ChangeFileExt(Application.ExeName, '.ini'));
 Result := sIni.ReadInteger(ASector, AIdent, ADef); //Результат выполнения
 sIni.Free;
end;

//Процедура записи настроек (INTEGER)
procedure WriteIniI(ASector, AIdent: string; AItem: Integer);
var
sIni: TIniFile;
begin
 sIni := TIniFile.Create(ChangeFileExt(Application.ExeName, '.ini'));
 sIni.WriteInteger(ASector, AIdent, AItem);
 sIni.Free;
end;

И так для String'ов и Boolean'ов

Тогда для чтения/записи нужно всего лишь вызвать функцию и процедуру:
Код

//Загрузка параметров при запуске программы
procedure TForm1.FormActivate(Sender: TObject);
begin
  Form1.Height := ReadIniI('Size', 'Height');
  Form1.Width := ReadIniI('Size', 'Width');
end;

//Сохранение настроек при закрытии программы
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 WriteIniI('Size', 'Height', Height);
 WriteIniI('Size', 'Width', Width);
end;


Правда не понятно можно ли сделать "наследование" типа переменной с помощью некоторых переменных, что за тип используется (Integer, String, Boolean). Т. е. пишем всего лишь функцию Read и процедуру Write а они там уже разбираются с какими переменными они имеют дело.
Еще не очень хорошо получается что по умолчанию стоит одно и то же значение (в данном случае 200).

зы
У меня в проге (моя первая прога smile ) много параметров и вот хочу спросить мнения у вас, как более опытных.

Это сообщение отредактировал(а) KlanB - 7.3.2005, 01:33
PM MAIL   Вверх
Pakshin A. S.
Дата 7.3.2005, 09:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 5056
Регистрация: 16.2.2003

Репутация: 21
Всего: 61



Если уже очень хочется разбить всю работу, то лучше сделать так:
Код

type
TMyIni = class
 private
  FIni: TIniFile;
 public
  constuctor Create(filename: string);
  function ReadIntA( section: string; param: string): integer;
  ...
  destructor Free;
 end;

...

constructor TMyIni.Create(filename: string);
begin
FIni:=TIniFile.Create(FileName);
end;

function TMyIni.ReadIntA(section: string; param: string): integer;
begin
Result:=FIniFile.ReadInteger(section, param, -MaxInt);
end;

...

destructor TMtIni.Free;
begin
FIni.Free;
end;

...

{Работа:}
var
MyIni: TMyIni;
integer;
begin
MyIni:=TMyIni.Create('MyIniFile.ini');
with MyIni do
  begin
   i:=ReadIntA('sec', 'par');
   if i = -MaxInt
    then
     ShowMEssage('Error')
    else
     ShowMEssage(IntToStr(i));
   Free;
  end;
end;

Но это можно даже сказать тоже лишнее, т. к. идет полный дубль стандартных процедур и функций... Если подробнее опишете свою задачу, то может что-нить и придумаю.. smile
PM   Вверх
KlanB
Дата 9.3.2005, 19:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 6.3.2005

Репутация: нет
Всего: нет



До такого мне по идее еще рановато smile
Хитрого ничего нет, просто нужно сохранять параметры наиболее оптимальным путем. Иногда не все сразу а, например по кнопке "применить". Поэтому и решил попробовать разные варианты.
PM MAIL   Вверх
Vit
Дата 9.3.2005, 20:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 48
Всего: 207



Я пользуюсь чем-то типа:

Код

Procedure WriteValue(Section, Key, Value:string);
begin
  with TiniFile.create(ChangeFileExt(Paramstr(0),'.ini')) do
    try
      WriteString(Section, Key, Value);
    finally
      Free;
    end;
end;

Function ReadValue(Section, Key, default:string):string;
begin
  with TiniFile.create(ChangeFileExt(Paramstr(0),'.ini')) do
    try
      Result:=ReadString(Section, Key, default);
    finally
      Free;
    end;
end;





--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0569 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.