-
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.