Конференция "Компоненты" » Сохранение параметров визуального компонента [D5, Win2k]
 
  • Yaro (21.01.07 19:07) [0]
    Все привет! Вопрос в следующем:
    Есть класс визуального компонента:

    type
    TParams = class(TPersistent)
     private
       _SubParam: Integer;
     public
       constructor Create;
     published
       property SubParam: Integer read _SubParam write _SubParam;
     end;

    TClass = class (TStringGrid) // допустим, не так важно
     private
       _Params: TParams;
     public
       constructor Create(AOwner: TComponent);
     published
       property Params: TParams read GetParams write SetParams;
     end;

    implementation

    constructor TParam.Create;
    begin
     _SubParam := 5;
    end;

    constructor TClass.Create(AOwner: TComponent);
    begin
     inherited Create;
     _Param := TParam.Create;
    end;



    он прекрасно работает, кроме одного но - в файле DFM не запоминается параметр Param.SubParam и при запуске программы, не зависимо от того что ты укажешь в ObjectInspector'е он принимает значение 5.

    делаю "сохранить все", лезу и открываю файл DFM текстовым редактором - так и есть, моего параметра там нет.

    Что я делаю не так? пробовал играться с stored, default, но не доконца понимаю их значения, разницы не увидел.

    Помогите!
  • ZeroDivide © (22.01.07 08:26) [1]
    Наследуйся от TComponent
    » Юрий Зотов:
    » Не самый лучший совет.
  • DimaBr (22.01.07 08:55) [2]

    property Params: TParams read GetParams write SetParams;

    А где описание и реализация этих двух методов ??? Скрываете ?
  • Yaro (26.01.07 00:15) [3]
    Всем спасибо!
    Сам разобрался - все очень просто, для того, чтобы КЛАССовый параметр нормально отображался в object-inspectore и сохранялся при STORED TRUE
    необходимо придерживаться следующих правил:
    1. Под-Класс должен быть наследником TPersistent
    2. Метод SetParams должен ОБЯЗАТЕЛЬНО присутствовать (т.е. так делать нельзя:
    property Params: TParams read _Params

    . Надо так:
    property Params: TParams read _Params write SetParams

    )
    3. Реализация метода SetParams должна быть такой:
    _Params.Assign(Value)

    , а не такой или подобной:
    _Params := Value

    .
    4. В итоге все прекрасно работает! :)

    Можно в Факю выносить...
  • Юрий Зотов © (26.01.07 09:56) [4]
    > Yaro   (26.01.07 00:15) [3]

    А можно и не выносить. Поскольку все это хорошо известно. И кроме того, еще не гарантирует сохранение любого класса. Скажем, если класс содержит нестандартные published-свойства, придется писать DefineProperties.
 
Конференция "Компоненты" » Сохранение параметров визуального компонента [D5, Win2k]
Есть новые Нет новых   [118645   +50][b:0][p:0.001]