Сохранение TCollections в собственном компоненте
Я написал собственный компонент для FR, зарегестрировал его
все нормально. Работает.
Но теперь в него надо добавить свойство типа TCollections
Я добавил разобрася в редакторами свойств все нормально.
Но он у меня не сохраняется.
Вобщем я делал так:
Type
TMYParameters = Class(TCollections)
TfrxMyQuery = Class(TfrxCustomQuery)
Private
FMyQuery: TMyQuery;
procedure SetParams(Value: TMYParameters);
Function GetParams: TMYParameters;
procedure ReadData(Reader: TReader);
procedure WriteData(Writer: TWriter);
Protected
procedure DefineProperties(Filer: TFiler); override;
Published
Property MYParameters: TMYParameters Read GetParams Write SetParams;
End
.....
procedure TfrxIBSQuery.DefineProperties(Filer: TFiler);
Begin
Inherited;
Filer.DefineProperty('MYParameters', ReadData, WriteData, True);
End;
{
}
Procedure TfrxIBSQuery.ReadData(Reader: TReader);
Begin
frxReadCollection(FMyQuery.Parameters, Reader, Self);
End;
{
}
Procedure TfrxIBSQuery.WriteData(Writer: TWriter);
Begin
frxWriteCollection(FMyQuery.Parameters, Writer, Self);
End;
{
}
Function TfrxIBSQuery.GetParams: TMYParameters;
Begin
Result:= FQuery.Parameters;
End;
{
}
Procedure TfrxIBSQuery.SetParams(Value: TMYParameters);
Begin
FQuery.Parameters.Assign(Value);
End;
{
}
В чем я ошибся?
Как свойство сохранить?
ReadData у меня вообще ни разу не вызывается.
Жду...
все нормально. Работает.
Но теперь в него надо добавить свойство типа TCollections
Я добавил разобрася в редакторами свойств все нормально.
Но он у меня не сохраняется.
Вобщем я делал так:
Type
TMYParameters = Class(TCollections)
TfrxMyQuery = Class(TfrxCustomQuery)
Private
FMyQuery: TMyQuery;
procedure SetParams(Value: TMYParameters);
Function GetParams: TMYParameters;
procedure ReadData(Reader: TReader);
procedure WriteData(Writer: TWriter);
Protected
procedure DefineProperties(Filer: TFiler); override;
Published
Property MYParameters: TMYParameters Read GetParams Write SetParams;
End
.....
procedure TfrxIBSQuery.DefineProperties(Filer: TFiler);
Begin
Inherited;
Filer.DefineProperty('MYParameters', ReadData, WriteData, True);
End;
{
}
Procedure TfrxIBSQuery.ReadData(Reader: TReader);
Begin
frxReadCollection(FMyQuery.Parameters, Reader, Self);
End;
{
}
Procedure TfrxIBSQuery.WriteData(Writer: TWriter);
Begin
frxWriteCollection(FMyQuery.Parameters, Writer, Self);
End;
{
}
Function TfrxIBSQuery.GetParams: TMYParameters;
Begin
Result:= FQuery.Parameters;
End;
{
}
Procedure TfrxIBSQuery.SetParams(Value: TMYParameters);
Begin
FQuery.Parameters.Assign(Value);
End;
{
}
В чем я ошибся?
Как свойство сохранить?
ReadData у меня вообще ни разу не вызывается.
Жду...
Комментарии
Сохраненяется в поток класс TfrxMyQuery
происходит не непосредственно. Т.к. Он является
наследником TfrxCustomQuery то сохраняется свойство
FMyQuery: TMyQuery замапленное в свойство Component в предке.
Т.е. сохранение свойства MYParameters не происходит вообще.
Необходимо перекрывать непосредственно свойство у TMyQuery
которое = Parameters
т.е. ето выглядит так:
Filer.DefineProperty('Parameters', ReadData, WriteData, True);
Но в предке перекрыто свойство 'Parameters' поэтому пришлось
немного причесать исходники самого FR :-)
Вообщем работает.