Agreed, this is one of the weird Delphi misfeatures...

In later SynEdit versions I implemented custom streameing functions
which only store the "diff" from default keystrokes (i.e. the removed
and added keystrokes compared to the default list).

-Flávio

On 9/7/06, Marc Weustink <[EMAIL PROTECTED]> 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?

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

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

Reply via email to