Несколько IniPropStorage на форме {решено}

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
Аватара пользователя
vitaly_l
долгожитель
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41
Контактная информация:

Несколько IniPropStorage на форме {решено}

Сообщение vitaly_l »

Всем привет,
Нужно разместить информацию собираемую IniPropStorage в двух файлах.
Если задать "SessionProperties", то с одним IniPropStorage - проблемы отсутствуют.
А вот, если их два положить на форму и задать им разные FileName, то в обоих случаях - итоговая информация в файлах дублируется.

:?: Как сделать, чтобы можно было прилепить половину данных к IniPropStorage №1, а другую половину IniPropStorage №2 ???
И вообще это возможно ли?


.
Последний раз редактировалось vitaly_l 22.08.2015 12:39:18, всего редактировалось 1 раз.
Аватара пользователя
Лекс Айрин
долгожитель
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград
Контактная информация:

Сообщение Лекс Айрин »

vitaly_l, а зачем? Если так уж сильно нужно, то создай вторую, невидимую, форму и сохраняй/восстанавливай вторую порцию данных в ней. Только ручками.

Добавлено спустя 1 минуту 12 секунд:
Упс... а ведь так можно и в одной форме поступить...

Добавлено спустя 9 минут 35 секунд:
вот наброски кода.

Код: Выделить всё

uses
  Classes, SysUtils, Forms, Controls, Dialogs, ExtCtrls, ComCtrls, StdCtrls,
  Menus, Spin, ColorBox, FileUtil, Types, Graphics, PairSplitter, ShellCtrls,
   IniPropStorage, tune, Windows,....
....
procedure TMainForm.FormCreate(Sender: TObject);
begin

with MainForm.IniPropStorage1 do
    begin
      IniSection:='Tune'; //указываем секцию
      WinView:=ReadBoolean('CheckWinPopup_Checked',false); //пробуем
      IniSection:='Main'; //возвращаем обратно секцию формы
    end;
...
end;
...

procedure TMainForm.FormClose(Sender: TObject; var CloseAction: TCloseAction);
begin
 if FormTune.CheckOpenPrevSessionFile.Checked=true then
     begin

       IniPropStorage1.IniSection:='Main'; //указываем секцию формы
       IniPropStorage1.WriteString('File', MyFile);

     end else
     begin
         IniPropStorage1.IniSection:='Main'; //указываем секцию формы
         IniPropStorage1.WriteString('File', '');
     end;
 end;
Аватара пользователя
vitaly_l
долгожитель
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41
Контактная информация:

Сообщение vitaly_l »

Лекс Айрин писал(а): создай вторую, невидимую, форму и сохраняй/восстанавливай вторую порцию данных в ней.

Вариант со второй формой - безусловно пройдёт, но все данные на одной форме.
Лекс Айрин писал(а):Упс... а ведь так можно и в одной форме поступить...

Ваш вариант не подходит. IniPropStorage - должен автоматически сохранять данные. <== А Вы ручками пишите.

Задача именно создать два разных INI файла, в которых будут разные данные из разных IniPropStorage.
Но как разделить данные в SessionProperties я не знаю: :oops: либо их вообще нельзя разделить?... :cry:
Аватара пользователя
Лекс Айрин
долгожитель
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград
Контактная информация:

Сообщение Лекс Айрин »

vitaly_l писал(а):Ваш вариант не подходит. IniPropStorage - должен автоматически сохранять данные. <== А Вы ручками пишите.


И чо?

Чем это отличается от автосохранения для итогового пользователя? Да и не было у Вас требования именно автоматического сохранения.

Кстати, и с первым вариантом тогда пролет. Данные с другой формы можно сохранить/прочитать только вручную. Даже если файл для них общий.

Добавлено спустя 5 минут 20 секунд:
А разделить данные в SessionProperties, если подумать, конечно же нельзя... ведь это одна структура на форму. Поэтому и придется писать ручками.
Аватара пользователя
vitaly_l
долгожитель
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41
Контактная информация:

Сообщение vitaly_l »

Лекс Айрин писал(а):Да и не было у Вас требования именно автоматического сохранения.

Из Ваших советов я понял что, Вы - не умеете пользоваться IniPropStorage, т.к. IniPropStorage - автоматически сохраняет данные и читает он данные тоже автоматически. И в этом его(IniPropStorage) прелесть. И он(IniPropStorage) - это прекрасно делает, а Вы его используете как обычный IniFile (в смысле не по назначению). Спасибо, за Ваш совет. Дайте, пожалуйста, возможность высказаться тем кто умеет пользоваться IniPropStorage.

Изначальная задача именно создать два разных INI файла, в которых будут разные данные из разных IniPropStorage.
Но как разделить данные в SessionProperties я не знаю: :oops: либо их вообще нельзя разделить?... :cry:
Возможно ещё как-то можно разделить SessionProperties между IniPropStorage1 и IniPropStorage2 ???
Аватара пользователя
Лекс Айрин
долгожитель
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград
Контактная информация:

Сообщение Лекс Айрин »

vitaly_l писал(а):Из Ваших советов я понял что, Вы - не умеете пользоваться IniPropStorage, т.к. IniPropStorage - автоматически сохраняет данные и читает он данные тоже автоматически.


Ну почему не умею. Просто некоторые данные не получается сохранить и/или прочитать автоматически (не дает компилятор), поэтому приходится делать вручную... и кстати, их очень мало, но зато они позволяют избегать костылей.

и я повторяю, нельзя разделить. Просто подумайте и поймете почему. И если уж хотите этого, то вам нужно будет переписать код TForm, добавив 2, 3, 4, 5...сколько вам нужно SessionProperties.
Аватара пользователя
vitaly_l
долгожитель
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41
Контактная информация:

Сообщение vitaly_l »

Лекс Айрин писал(а):нельзя разделить

Возможно Вы правы, но возможно я неправильно ставлю задачу, когда говорю о разделении SessionProperties.

Но суть одна: Возможно можно как-то разделить данные между двумя IniPropStorage1 и IniPropStorage2 лежащими на одной форме???


.
Аватара пользователя
Лекс Айрин
долгожитель
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград
Контактная информация:

Сообщение Лекс Айрин »

vitaly_l, есть два способа. И оба я уже указал.

1) в одну IniPropStorage писать/читать автоматически, а в другую ручками.
2) Создать потомка TForm, у которого просто добавить еще один SessionProperties. Тогда можно будет добиться автоматического сохранения.

ах да... можно еще будет попробовать переписать код IniPropStorage и добавить SessionProperties прямо туда.

Самый легкий способ все же первый. Да придется писать все (для IniPropStorage2) вручную, но если это штучное использование, то, имхо, не стоит извращаться с чем-то более сложным.

Иначе, стоит переписать код формы. (вот только неизвестно, позволит ли использовать дополненный компонент Lazarus)
Аватара пользователя
vitaly_l
долгожитель
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41
Контактная информация:

Сообщение vitaly_l »

IniPropStorage - запускается при закрытии программы...
Можно менять содержимое SessionProperties... и тогда... можно хоть 100000... ini ...
всем спасибо!
Ответить