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

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

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

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

Сообщение vitaly_l » 22.08.2015 10:46:24

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

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


.
Последний раз редактировалось vitaly_l 22.08.2015 13:39:18, всего редактировалось 1 раз.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: Несколько IniPropStorage на форме

Сообщение Лекс Айрин » 22.08.2015 11:17:44

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;
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Несколько IniPropStorage на форме

Сообщение vitaly_l » 22.08.2015 11:31:13

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

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

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

Задача именно создать два разных INI файла, в которых будут разные данные из разных IniPropStorage.
Но как разделить данные в SessionProperties я не знаю: :oops: либо их вообще нельзя разделить?... :cry:
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: Несколько IniPropStorage на форме

Сообщение Лекс Айрин » 22.08.2015 11:45:23

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


И чо?

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

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

Добавлено спустя 5 минут 20 секунд:
А разделить данные в SessionProperties, если подумать, конечно же нельзя... ведь это одна структура на форму. Поэтому и придется писать ручками.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Несколько IniPropStorage на форме

Сообщение vitaly_l » 22.08.2015 11:59:36

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

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

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

Re: Несколько IniPropStorage на форме

Сообщение Лекс Айрин » 22.08.2015 12:11:51

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


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

и я повторяю, нельзя разделить. Просто подумайте и поймете почему. И если уж хотите этого, то вам нужно будет переписать код TForm, добавив 2, 3, 4, 5...сколько вам нужно SessionProperties.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Несколько IniPropStorage на форме

Сообщение vitaly_l » 22.08.2015 12:19:13

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

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

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


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

Re: Несколько IniPropStorage на форме

Сообщение Лекс Айрин » 22.08.2015 12:30:16

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

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

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

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

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

Re: Несколько IniPropStorage на форме

Сообщение vitaly_l » 22.08.2015 12:53:04

IniPropStorage - запускается при закрытии программы...
Можно менять содержимое SessionProperties... и тогда... можно хоть 100000... ini ...
всем спасибо!
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 223

Рейтинг@Mail.ru