On Thu, 7 Sep 2006, Marc Weustink wrote:

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?

You can't.

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.

There is no way to know whether the collection is default or not, since that would imply keeping a copy of the collection as it was just after creation.

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.

You may not, because then inherited form streaming will be broken: a collection of "<>" means: don't touch, keep the collection of
the parent form.

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

Reply via email to