Vincent Snijders wrote:
Hi,

I am investigating Lazarus issue 7305. The TSynEdit class has a KeyStrokes property of the type TSynEditKeyStrokes, which is a TCollection descendant. The TSynEdit constructor fills the collection with some default items. If I remove the items and stream the TSynEdit, the following line is shown in the lfm:
    Keystrokes = <>

If I read this lfm, I don't get a empty KeyStrokes collection, but one filled with the default value.

I suspect the following lines in TReader.ReadCollection cause this behaviour:
    if not EndOfList then
      Collection.Clear;

Is this a bug or by design? How do I load an empty collection from a stream, if the collection has a default value?

Delphi has the same construction, which is IMO a design flaw.
IMO when a collection is "default" is shouldn't be streamed, so there would be nothing written. I don't know why it is there, since when a "default" collection is written, all elements are written. So it never will be <>.

Note, if I remove the 'Keystrokes = <>' line from the lfm, I will get the default collection too, so I wonder why there are two ways to get the default collection.

I propose to remove the "if not EndOfList then Collection.Clear;" line.



Marc
_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-devel

Reply via email to