powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Непонятие с Ini файлом
11 сообщений из 11, страница 1 из 1
Непонятие с Ini файлом
    #39422431
Irmantas Simaitis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте. И так, проблема такая. После закрытия программы, все что было изменено и сохранено во время работы - исчезает. Остается то, что было до открытия программы. Во время работы, данные записывается в INI-файле.
...
Рейтинг: 0 / 0
Непонятие с Ini файлом
    #39422445
Irmantas Simaitis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И еще один вопрос ... Как лучше работать с ini-файлом: или каждый раз когда необходимо сохранить данные инициализировать переменную и после сохранение ее уничтожить, или инициализировать Ini переменную при создании формы и только в конце работы, ее уничтожить?
...
Рейтинг: 0 / 0
Непонятие с Ini файлом
    #39422466
Irmantas Simaitis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Первую проблему решил. В основной форме без выгоды лежал компонент RzRegIniFile1 в котором и была проблема. Но остается открытым вопрос, как лучше работать с INI-переменной?
...
Рейтинг: 0 / 0
Непонятие с Ini файлом
    #39422485
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Irmantas SimaitisНо остается открытым вопрос, как лучше работать с INI-переменной?Если часто, регулярно дергать надо, то чтоб не перезоздавать объект постоянно - лучше создать один раз.
Если редко - то можно создал/использовал/удалил.

Вообще разницы особой нет - там тупые обертки над апи-фциями Read/WritePrivateProfile*.
Неужели самому сложно исходники посмотреть.
...
Рейтинг: 0 / 0
Непонятие с Ini файлом
    #39422653
Irmantas Simaitis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
YuRockIrmantas SimaitisНо остается открытым вопрос, как лучше работать с INI-переменной?Если часто, регулярно дергать надо, то чтоб не перезоздавать объект постоянно - лучше создать один раз.
Если редко - то можно создал/использовал/удалил.

Вообще разницы особой нет - там тупые обертки над апи-фциями Read/WritePrivateProfile*.
Неужели самому сложно исходники посмотреть.

Спасибо YuRock. Самому несложно, но иногда полезно услышать и другие мнения ...
...
Рейтинг: 0 / 0
Непонятие с Ini файлом
    #39422655
zeon11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
var
  IniFile: TIniFile;
..................

implementation

procedure TForm.FormCreate(Sender: TObject);
begin
.......
  IniFile:=TIniFile.Create(AppPath+'My.ini');
  ChBoxMakeRAR.Checked:=IniFile.ReadBool('Настройки','Создавать RARархив',true);
  ChBoxMakeZIP.Checked:=IniFile.ReadBool('Настройки','Создавать ZIPархив',false);
........
end


Записать в INI состояние, обычно при закрытии приложения:
  IniFile.WriteBool('Настройки','Создавать RARархив',ChBoxMakeRAR.Checked);
  IniFile.WriteBool('Настройки','Создавать ZIPархив',ChBoxMakeZIP.Checked);



Как-то так. Не забудь, когда время придёт - надо разрушить IniFile
...
Рейтинг: 0 / 0
Непонятие с Ini файлом
    #39422767
Фотография DetSimen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кусок рабочего кода из рабочего проекта. Ini файл создается как синглтон, всегда в единственном экземпляре

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
interface
......................

  type TAppIniFile = class (TMemIniFile)
  ............
  end;

  function AppIniFile:  TAppIniFile;

implementation
uses Dialogs, Types, StrUtils, uStrings, uCommon;


const SingleIniFile:  TAppIniFile = nil;

function AppIniFile:  TAppIniFile;
begin
  try
    if SingleIniFile=nil then SingleIniFile:=TAppIniFile.Create(GetAppIniFileName());
  except
    SingleIniFile:=nil;
..........
    ShowError
  end;

  Result:=SingleIniFile;
end;



{ TAppIniFile }

constructor TAppIniFile.Create(const AIniFileName: string);
begin
   inherited Create(AIniFileName);
   FModified:=FALSE;
end;

.........................

destructor TAppIniFile.Destroy;
begin
  try
   if Self.FModified then UpdateFile;
  except
    ShowMessage(rs_IniWriteError);
  end;

  inherited;
end;
..............................

initialization

finalization

 if Assigned(SingleIniFile) then SingleIniFile.Free;
...
Рейтинг: 0 / 0
Непонятие с Ini файлом
    #39423381
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DetSimen
Код: pascal
1.
const SingleIniFile:  TAppIniFile = nil;

Зачем константа? Чем переменная не угодила?
DetSimen
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
function AppIniFile:  TAppIniFile;
begin
  try
    if SingleIniFile=nil then SingleIniFile:=TAppIniFile.Create(GetAppIniFileName());
  except
    SingleIniFile:=nil;
..........
    ShowError
  end;

  Result:=SingleIniFile;
end;

Зачем присваивать обратно в nil? Оно и так nil. Отлов исключения, отображение не текста исключения, а абстрактной ошибки и возвращение nil при ошибке это верх гениальности
DetSimen
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
destructor TAppIniFile.Destroy;
begin
  try
   if Self.FModified then UpdateFile;
  except
    ShowMessage(rs_IniWriteError);
  end;

  inherited;
end;

И опять - кого интересует реальная ошибка? Просто сделаем rs_IniWriteError
DetSimen
Код: pascal
1.
 if Assigned(SingleIniFile) then SingleIniFile.Free;

Ну и какой великий смысл в if Assigned()? Вы код метода Free видели?
...
Рейтинг: 0 / 0
Непонятие с Ini файлом
    #39568051
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как я использую Ini-файл.

В Ini я храню множество настроек программы, сейчас размер файла составляет порядка 57кб.
От использования TIniFile отказался в пользу TMemIniFile - он намного быстрее работает т.к не лазит за каждым параметром в файл заново.

В главной форме (которая создается первой) объявляю глобальную переменную
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
var
  FrmMain: TFrmMain;
  Ini: TMemIniFile;

implementation

const
  IniSectionName = 'FrmMain';



И ее видно из всего приложения.

Создается и разрушается Ini в событиях главной формы.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
procedure TFrmMain.FormCreate(Sender: TObject);
begin
  Ini := TMemIniFile.Create( ChangeFileExt(Application.ExeName, '.ini') );
  // размер и положение окна
  Top    := Ini.ReadInteger(IniSectionName, 'Top'   ,   10);
  Left   := Ini.ReadInteger(IniSectionName, 'Left'  ,   10);
  Width  := Ini.ReadInteger(IniSectionName, 'Width' , 1000);
  Height := Ini.ReadInteger(IniSectionName, 'Height',  540);
end;

procedure TFrmMain.FormDestroy(Sender: TObject);
begin
  Ini.WriteInteger(IniSectionName, 'Top'        , Top       );
  Ini.WriteInteger(IniSectionName, 'Left'       , Left      );
  Ini.WriteInteger(IniSectionName, 'Width'      , Width     );
  Ini.WriteInteger(IniSectionName, 'Height'     , Height    );
  Ini.UpdateFile;
  Ini.Free;
end;



Для каждого окна своя секция - примерно по имени класса окна.
Для некоторых случаев имя секции создается динамически, в частности для использования с отчетами FastReport - используется префикс и ID отчета. Получается что у каждой формы своя секция в Ini-файле.

Что бы не писать в каждом Read/Write имя конкретной секции, завожу в форме локальную константу IniSectionName.
Это дает возможность копипастить чтение и запись обычных параметров которые есть в большинстве форм.


Еще может быть удобным использование специального класса для хранения настроек, когда параметры глобальные а не по формам, и часто использутся. Можно городить свой класс и прочее, но оказалось удобно использовать для этого DataModule.
Обзываем его например CFG: TDataModule и элементарно объявляем у него поля.
Обращаться потом удобно, например

Код: pascal
1.
id := CFG.base_id;


При создании CFG зачитываем его параметры из того же Ini а при Destroy выгружаем обратно. Ну или в базе и т.п.
Лично мне удобно когда в списке модулей есть эта сущность CFG.
...
Рейтинг: 0 / 0
Непонятие с Ini файлом
    #39568117
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fraksКак я использую Ini-файл.

Для каждого окна своя секция - примерно по имени класса окна.
...
Что бы не писать в каждом Read/Write имя конкретной секции, завожу в форме локальную константу IniSectionName.
Это дает возможность копипастить чтение и запись обычных параметров которые есть в большинстве форм.
...

Можно было вообще Form.ClassName использовать в таком случае :)
...
Рейтинг: 0 / 0
Непонятие с Ini файлом
    #39568259
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvpfraksКак я использую Ini-файл.

Для каждого окна своя секция - примерно по имени класса окна.
...
Что бы не писать в каждом Read/Write имя конкретной секции, завожу в форме локальную константу IniSectionName.
Это дает возможность копипастить чтение и запись обычных параметров которые есть в большинстве форм.
...

Можно было вообще Form.ClassName использовать в таком случае :)
Давным давно когда я это делал, то пытался использовать Form.Name но она автонумеруется и каждый последующий экземпляр класса имеет собственное имя.
А до Form.ClassName я чего-то не догадался :)
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Непонятие с Ini файлом
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]