I just solved it, and in case anyone needs it, the solution is to put the clause
"stored True" to the declaration of the subcomponent.
property PanelColor: TTestColor read FPanelColor stored True;
Thank you all
Nonsense.
From Delphi manual:
If a property has no stored directive, it is treated as if stored True were specified.
It is the same in Lazarus. Adding "
stored True" does nothing. It is still read-only property.
I just tried with TECSlider.Knob, which is also TPersistent descendant and this code:
property Knob: TECSliderKnob read FKnob stored True; //write FKnob;
causes exactly the same troubles: design-time changes are not shown at run-time and property Knob is not in *.lfm at all.
My guess is that you do changes in your code and you don't reinstall the component properly - with absolutely necessary rebuild of whole Lazarus IDE.