1-The old forms have ColWidths.
2-Your updated control does not *write* ColWidths.
3-Your updated control does not care to read them if they exist.
4-Your updated control will not complain if they do exist.
5-Users with old forms will *not* have a problem when they upgrade.
6-Users that updated their forms will have a problem if they
downgrade. <-- This is normal.
If I open an old form in Lazarus with updated control and saved it, I will have a "new form" without ColWidths. Now, if I open this new form in Lazarus with older version of your control, it *will* complain about ColWidths. <-- This is normal.
BTW: After introducing the proposed "stored" attribute approach, ColWidths are still written to the lfm.
What you have after
stored is returning "True", always. Check, for instance, BiDiMode property.
property BiDiMode: TBiDiMode read FBiDiMode write SetBiDiMode stored IsBiDiModeStored default bdLeftToRight;
...
function TControl.IsBiDiModeStored: boolean;
begin
Result := not ParentBidiMode;
end;